| // Copyright (c) 2012 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_PLATFORM_UTIL_H_ |
| #define CHROME_BROWSER_PLATFORM_UTIL_H_ |
| |
| #include <string> |
| |
| #include "base/callback_forward.h" |
| #include "base/strings/string16.h" |
| #include "build/build_config.h" |
| #include "chrome/common/buildflags.h" |
| #include "ui/gfx/native_widget_types.h" |
| |
| class GURL; |
| class Profile; |
| |
| namespace base { |
| class FilePath; |
| } |
| |
| namespace platform_util { |
| |
| // Result of calling OpenFile() or OpenFolder() passed into OpenOperationResult. |
| enum OpenOperationResult { |
| OPEN_SUCCEEDED, |
| OPEN_FAILED_PATH_NOT_FOUND, // Specified path does not exist. |
| OPEN_FAILED_INVALID_TYPE, // Type of object found at path did not match what |
| // was expected. I.e. OpenFile was called on a |
| // folder or OpenFolder called on a file. |
| OPEN_FAILED_NO_HANLDER_FOR_FILE_TYPE, // There was no file handler capable of |
| // opening file. Only returned on |
| // ChromeOS. |
| OPEN_FAILED_FILE_ERROR, // Open operation failed due to some other file |
| // error. |
| }; |
| |
| // Type of item that is the target of the OpenItem() call. |
| enum OpenItemType { |
| OPEN_FILE, |
| OPEN_FOLDER, |
| #if defined(OS_LINUX) |
| SHOW_ITEM_IN_FOLDER |
| #endif |
| }; |
| |
| // Callback used with OpenFile and OpenFolder. |
| typedef base::Callback<void(OpenOperationResult)> OpenOperationCallback; |
| |
| // Opens the item specified by |full_path|, which is expected to be the type |
| // indicated by |item_type| in the desktop's default manner. |
| // |callback| will be invoked on the UI thread with the result of the open |
| // operation. |
| // |
| // It is an error if the object at |full_path| does not match the intended type |
| // specified in |item_type|. This error will be reported to |callback|. |
| // |
| // Note: On all platforms, the user may be shown additional UI if there is no |
| // suitable handler for |full_path|. On Chrome OS, all errors will result in |
| // visible error messages iff |callback| is not specified. |
| // Must be called on the UI thread. |
| void OpenItem(Profile* profile, |
| const base::FilePath& full_path, |
| OpenItemType item_type, |
| const OpenOperationCallback& callback); |
| |
| // Opens the folder containing the item specified by |full_path| in the |
| // desktop's default manner. If possible, the item will be selected. The |
| // |profile| is used to determine the running profile of file manager app in |
| // Chrome OS only. |profile| is not used in platforms other than Chrome OS. Must |
| // be called on the UI thread. |
| void ShowItemInFolder(Profile* profile, const base::FilePath& full_path); |
| |
| // Open the given external protocol URL in the desktop's default manner. |
| // (For example, mailto: URLs in the default mail user agent.) |
| // Must be called from the UI thread. |
| void OpenExternal(Profile* profile, const GURL& url); |
| |
| // Get the top level window for the native view. This can return NULL. |
| gfx::NativeWindow GetTopLevel(gfx::NativeView view); |
| |
| // Returns a NativeView handle for parenting dialogs off |window|. This can be |
| // used to position a dialog using a NativeWindow, when a NativeView (e.g. |
| // browser tab) isn't available. |
| gfx::NativeView GetViewForWindow(gfx::NativeWindow window); |
| |
| // Get the direct parent of |view|, may return NULL. |
| gfx::NativeView GetParent(gfx::NativeView view); |
| |
| // Returns true if |window| is the foreground top level window. |
| bool IsWindowActive(gfx::NativeWindow window); |
| |
| // Activate the window, bringing it to the foreground top level. |
| void ActivateWindow(gfx::NativeWindow window); |
| |
| // Returns true if the view is visible. The exact definition of this is |
| // platform-specific, but it is generally not "visible to the user", rather |
| // whether the view has the visible attribute set. |
| bool IsVisible(gfx::NativeView view); |
| |
| #if defined(OS_MACOSX) |
| // On 10.7+, back and forward swipe gestures can be triggered using a scroll |
| // gesture, if enabled in System Preferences. This function returns true if |
| // the feature is supported and enabled, and false otherwise. |
| bool IsSwipeTrackingFromScrollEventsEnabled(); |
| #endif |
| |
| } // namespace platform_util |
| |
| #endif // CHROME_BROWSER_PLATFORM_UTIL_H_ |