| // Copyright 2013 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // This file provides utilities for opening files with the browser. |
| |
| #ifndef CHROME_BROWSER_ASH_FILE_MANAGER_OPEN_WITH_BROWSER_H_ |
| #define CHROME_BROWSER_ASH_FILE_MANAGER_OPEN_WITH_BROWSER_H_ |
| |
| #include <optional> |
| |
| #include "base/files/file_path.h" |
| #include "base/functional/callback.h" |
| #include "base/functional/callback_helpers.h" |
| #include "chrome/browser/apps/app_service/launch_result_type.h" |
| #include "url/gurl.h" |
| |
| class Profile; |
| |
| namespace storage { |
| class FileSystemURL; |
| } |
| |
| namespace file_manager::util { |
| |
| using LaunchAppCallback = |
| base::OnceCallback<void(std::optional<apps::LaunchResult::State>)>; |
| |
| // Opens the file specified by `file_path` with the browser for `profile`. In |
| // the event the `file_path` refers to a hosted document AND the document has an |
| // app installed, it will try to launch the app instead of a browser. |
| |
| // Opens the file specified by |file_path| with the browser for |
| // |profile|. This function takes care of the following intricacies: |
| // |
| // - If there is no active browser window, open it. |
| // - If the file is a Drive hosted document, the hosted document will be |
| // opened in the browser by extracting the right URL for the file. |
| // - If the file is a Drive hosted document, check if there is an installed app |
| // that can handle the document type, if it can launch the app instead. |
| // - If the file is on Drive, the file will be downloaded from Drive as |
| // needed. |
| // |
| // Returns false if failed to open. This happens if the file type is unknown. |
| bool OpenFileWithAppOrBrowser(Profile* profile, |
| const storage::FileSystemURL& file_system_url, |
| const std::string& action_id, |
| LaunchAppCallback callback = base::DoNothing()); |
| |
| // Opens the hosted file specified by `file_path`, and its hosted path |
| // `hosted_url`, with its app if it's installed or in the browser otherwise. |
| bool OpenHostedFileInNewTabOrApp(Profile* profile, |
| const base::FilePath& file_path, |
| LaunchAppCallback callback, |
| const GURL& hosted_url); |
| |
| } // namespace file_manager::util |
| |
| #endif // CHROME_BROWSER_ASH_FILE_MANAGER_OPEN_WITH_BROWSER_H_ |