// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_MAC_DOCK_H_
#define CHROME_BROWSER_MAC_DOCK_H_

#if defined(__OBJC__)
@class NSString;
#else
class NSString;
#endif

namespace dock {

enum AddIconStatus {
  IconAddFailure,
  IconAddSuccess,
  IconAlreadyPresent
};

// Adds an icon to the Dock pointing to |installed_path| if one is not already
// present. |dmg_app_path| is the path to the install source. Its tile will be
// removed if present. If any changes are made to the Dock's configuration,
// the Dock process is restarted so that the changes become visible in the UI.
//
// Various heuristics are used to determine where to place the new icon
// relative to other items already present in the Dock:
//  - If installed_path is already in the Dock, no new tiles for this path
//    will be added.
//  - If dmg_app_path is present in the Dock, it will be removed. If
//    installed_path is not already present, the new tile referencing
//    installed_path will be placed where the dmg_app_path tile was. This
//    keeps the tile where a user expects it if they dragged the application
//    icon from a disk image into the Dock and then clicked on the new icon
//    in the Dock.
//  - The new tile will precede any application with the same name already
//    in the Dock.
//  - In an official build, a new tile for Google Chrome will be placed
//    immediately before the first existing tile for Google Chrome Canary,
//    and a new tile for Google Chrome Canary will be placed immediately after
//    the last existing tile for Google Chrome.
//  - The new tile will be placed immediately after the last tile for another
//    browser application already in the Dock.
//  - The new tile will be placed last in the Dock.
// For the purposes of these comparisons, applications are identified by the
// last component in their path. For example, any application named Safari.app
// will be treated as a browser. If the user renames an application on disk,
// it will alter the result. Looking up the bundle ID could be slightly more
// robust in the presence of such alterations, but it's not thought to be a
// large enough problem to warrant such lookups.
//
// The changes made to the Dock's configuration are the minimal changes
// necessary to cause the desired behavior. Although it's possible to set
// additional properties on the dock tile added to the Dock's plist, this
// is not done. Upon relaunch, Dock.app will determine the correct values for
// the properties it requires and add them to its configuration.
AddIconStatus AddIcon(NSString* installed_path, NSString* dmg_app_path);

}  // namespace dock

#endif  // CHROME_BROWSER_MAC_DOCK_H_
