| Index: chrome/browser/chromeos/extensions/file_manager/file_tasks.h
|
| diff --git a/chrome/browser/chromeos/extensions/file_manager/file_tasks.h b/chrome/browser/chromeos/extensions/file_manager/file_tasks.h
|
| deleted file mode 100644
|
| index d9ec2a9dc397e01e416a117183ed0887b3bc39a6..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/extensions/file_manager/file_tasks.h
|
| +++ /dev/null
|
| @@ -1,313 +0,0 @@
|
| -// 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.
|
| -//
|
| -// This file provides utility functions for "file tasks".
|
| -//
|
| -// WHAT ARE FILE TASKS?
|
| -//
|
| -// File tasks are representatiosn of actions that can be performed over the
|
| -// currently selected files from Files.app. A task can be either of:
|
| -//
|
| -// 1) Chrome extension or app, registered via "file_handlers" or
|
| -// "file_browser_handlers" in manifest.json (ex. Text.app). This information
|
| -// comes from FileBrowserHandler::GetHandlers()
|
| -//
|
| -// See also:
|
| -// https://developer.chrome.com/extensions/manifest.html#file_handlers
|
| -// https://developer.chrome.com/extensions/fileBrowserHandler.html
|
| -//
|
| -// 2) Built-in handlers provided from Files.app. Files.app provides lots of
|
| -// file_browser_handlers, such as "play", "watch", "mount-archive". These
|
| -// built-in handlers are often handled in special manners inside Files.app.
|
| -// This information also comes from FileBrowserHandler::GetHandlers().
|
| -//
|
| -// See also:
|
| -// chrome/browser/resources/file_manager/manifest.json
|
| -//
|
| -// 3) Drive app, which is a hosted app (i.e. just web site), that can work
|
| -// with Drive (ex. Pixlr Editor). This information comes from
|
| -// drive::DriveAppRegistry.
|
| -//
|
| -// See also:
|
| -// https://chrome.google.com/webstore/category/collection/drive_apps
|
| -//
|
| -// For example, if the user is now selecting a JPEG file, Files.app will
|
| -// receive file tasks represented as a JSON object via
|
| -// chrome.fileBrowserPrivate.getFileTasks() API, which look like:
|
| -//
|
| -// [
|
| -// {
|
| -// "driveApp": true,
|
| -// "iconUrl": "<app_icon_url>",
|
| -// "isDefault": false,
|
| -// "taskId": "<drive_app_id>|drive|open-with",
|
| -// "title": "Drive App Name (ex. Pixlr Editor)"
|
| -// },
|
| -// {
|
| -// "driveApp": false,
|
| -// "iconUrl": "chrome://extension-icon/hhaomjibdihmijegdhdafkllkbggdgoj/16/1",
|
| -// "isDefault": true,
|
| -// "taskId": "hhaomjibdihmijegdhdafkllkbggdgoj|file|gallery",
|
| -// "title": "__MSG_OPEN_ACTION__"
|
| -// }
|
| -// ]
|
| -//
|
| -// The first file task is a Drive app. The second file task is a built-in
|
| -// handler from Files.app.
|
| -//
|
| -// WHAT ARE TASK IDS?
|
| -//
|
| -// You may have noticed that "taskId" fields in the above example look
|
| -// awakard. Apparently "taskId" encodes three types of information delimited
|
| -// by "|". This is a weird format for something called as an ID.
|
| -//
|
| -// 1) Why are the three types information encoded in this way?
|
| -//
|
| -// It's just a historical reason. The reason is that a simple string can be
|
| -// easily stored in user's preferences. We should stop doing this, by storing
|
| -// this information in chrome.storage instead. crbug.com/267359.
|
| -//
|
| -// 2) OK, then what are the three types of information encoded here?
|
| -//
|
| -// The task ID encodes the folloing structure:
|
| -//
|
| -// <app-id>|<task-type>|<task-action-id>
|
| -//
|
| -// <app-id> is either of Chrome Extension/App ID or Drive App ID. For some
|
| -// reason, Chrome Extension/App IDs and Drive App IDs look differently. As of
|
| -// writing, the fomer looks like "hhaomjibdihmijegdhdafkllkbggdgoj"
|
| -// (Files.app) and the latter looks like "419782477519" (Pixlr Editor).
|
| -//
|
| -// <task-type> is either of
|
| -// - "file" - File browser handler - app/extension declaring
|
| -// "file_browser_handlers" in manifest.
|
| -// - "app" - File handler - app declaring "file_handlers" in manifest.json.
|
| -// - "drive" - Drive App
|
| -//
|
| -// <task-action-id> is an ID string used for identifying actions provided
|
| -// from a single Chrome Extension/App. In other words, a single
|
| -// Chrome/Extension can provide multiple file handlers hence each of them
|
| -// needs to have a unique action ID. For Drive apps, <task-action-id> is
|
| -// always "open-with".
|
| -//
|
| -// HOW TASKS ARE EXECUTED?
|
| -//
|
| -// chrome.fileBrowserPrivate.viewFiles() is used to open a file in a browser,
|
| -// without any handler. Browser will take care of handling the file (ex. PDF).
|
| -//
|
| -// chrome.fileBrowserPrivate.executeTasks() is used to open a file with a
|
| -// handler (Chrome Extension/App or Drive App).
|
| -//
|
| -// Some built-in handlers such as "play" and "watch" are handled internally
|
| -// in Files.app. "mount-archive" is handled very differently. The task
|
| -// execution business should be simplified: crbug.com/267313
|
| -//
|
| -// See also:
|
| -// chrome/browser/resources/file_manager/js/file_tasks.js
|
| -//
|
| -
|
| -#ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_FILE_TASKS_H_
|
| -#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_FILE_TASKS_H_
|
| -
|
| -#include <set>
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/callback_forward.h"
|
| -#include "chrome/browser/extensions/api/file_handlers/app_file_handler_util.h"
|
| -#include "url/gurl.h"
|
| -
|
| -class PrefService;
|
| -class Profile;
|
| -
|
| -namespace drive {
|
| -class DriveAppRegistry;
|
| -}
|
| -
|
| -namespace fileapi {
|
| -class FileSystemURL;
|
| -}
|
| -
|
| -namespace file_manager {
|
| -namespace file_tasks {
|
| -
|
| -// Task types as explained in the comment above. Search for <task-type>.
|
| -enum TaskType {
|
| - TASK_TYPE_FILE_BROWSER_HANDLER,
|
| - TASK_TYPE_FILE_HANDLER,
|
| - TASK_TYPE_DRIVE_APP,
|
| - TASK_TYPE_UNKNOWN, // Used only for handling errors.
|
| -};
|
| -
|
| -// Describes a task.
|
| -// See the comment above for <app-id>, <task-type>, and <action-id>.
|
| -struct TaskDescriptor {
|
| - TaskDescriptor(const std::string& in_app_id,
|
| - TaskType in_task_type,
|
| - const std::string& in_action_id)
|
| - : app_id(in_app_id),
|
| - task_type(in_task_type),
|
| - action_id(in_action_id) {
|
| - }
|
| - TaskDescriptor() {
|
| - }
|
| -
|
| - std::string app_id;
|
| - TaskType task_type;
|
| - std::string action_id;
|
| -};
|
| -
|
| -// Describes a task with extra information such as icon URL.
|
| -class FullTaskDescriptor {
|
| - public:
|
| - FullTaskDescriptor(const TaskDescriptor& task_descriptor,
|
| - const std::string& task_title,
|
| - const GURL& icon_url,
|
| - bool is_default);
|
| - const TaskDescriptor& task_descriptor() const { return task_descriptor_; }
|
| -
|
| - // The title of the task.
|
| - const std::string& task_title() { return task_title_; }
|
| - // The icon URL for the task (ex. app icon)
|
| - const GURL& icon_url() const { return icon_url_; }
|
| -
|
| - // True if this task is set as default.
|
| - bool is_default() const { return is_default_; }
|
| - void set_is_default(bool is_default) { is_default_ = is_default; }
|
| -
|
| - // Returns a DictionaryValue representation, which looks like:
|
| - //
|
| - // {
|
| - // "iconUrl": "<app_icon_url>",
|
| - // "isDefault": false,
|
| - // "taskId": "<drive_app_id>|drive|open-with",
|
| - // "title": "Drive App Name (ex. Pixlr Editor)"
|
| - // },
|
| - //
|
| - // "iconUrl" is omitted if icon_url_ is empty.
|
| - //
|
| - // This representation will be used to send task info to the JavaScript.
|
| - scoped_ptr<base::DictionaryValue> AsDictionaryValue() const;
|
| -
|
| - private:
|
| - TaskDescriptor task_descriptor_;
|
| - std::string task_title_;
|
| - GURL icon_url_;
|
| - bool is_default_;
|
| -};
|
| -
|
| -// Update the default file handler for the given sets of suffixes and MIME
|
| -// types.
|
| -void UpdateDefaultTask(PrefService* pref_service,
|
| - const std::string& task_id,
|
| - const std::set<std::string>& suffixes,
|
| - const std::set<std::string>& mime_types);
|
| -
|
| -// Returns the task ID of the default task for the given |mime_type|/|suffix|
|
| -// combination. If it finds a MIME type match, then it prefers that over a
|
| -// suffix match. If it a default can't be found, then it returns the empty
|
| -// string.
|
| -std::string GetDefaultTaskIdFromPrefs(const PrefService& pref_service,
|
| - const std::string& mime_type,
|
| - const std::string& suffix);
|
| -
|
| -// Generates task id for the task specified by |app_id|, |task_type| and
|
| -// |action_id|.
|
| -//
|
| -// |app_id| is either of Chrome Extension/App ID or Drive App ID.
|
| -// |action_id| is a free-form string ID for the action.
|
| -std::string MakeTaskID(const std::string& app_id,
|
| - TaskType task_type,
|
| - const std::string& action_id);
|
| -
|
| -// Returns a task id for the Drive app with |app_id|.
|
| -// TODO(gspencer): For now, the action id is always "open-with", but we
|
| -// could add any actions that the drive app supports.
|
| -std::string MakeDriveAppTaskId(const std::string& app_id);
|
| -
|
| -// Converts |task_descriptor| to a task ID.
|
| -std::string TaskDescriptorToId(const TaskDescriptor& task_descriptor);
|
| -
|
| -// Parses the task ID and extracts app ID, task type, and action ID into
|
| -// |task|. On failure, returns false, and the contents of |task| are
|
| -// undefined.
|
| -//
|
| -// See also the comment at the beginning of the file for details for how
|
| -// "task_id" looks like.
|
| -bool ParseTaskID(const std::string& task_id, TaskDescriptor* task);
|
| -
|
| -// The callback is used for ExecuteFileTask(). Will be called with true if
|
| -// the file task execution is successful, or false if unsuccessful.
|
| -typedef base::Callback<void(bool success)> FileTaskFinishedCallback;
|
| -
|
| -// Executes file handler task for each element of |file_urls|.
|
| -// Returns |false| if the execution cannot be initiated. Otherwise returns
|
| -// |true| and then eventually calls |done| when all the files have been handled.
|
| -// |done| can be a null callback.
|
| -//
|
| -// Parameters:
|
| -// profile - The profile used for making this function call.
|
| -// app_id - The ID of the app requesting the file task execution.
|
| -// source_url - The source URL which originates this function call.
|
| -// tab_id - The ID of the tab which originates this function call.
|
| -// This can be 0 if no tab is associated.
|
| -// task - See the comment at TaskDescriptor struct.
|
| -// file_urls - URLs of the target files.
|
| -// done - The callback which will be called on completion.
|
| -// The callback won't be called if the function returns
|
| -// false.
|
| -bool ExecuteFileTask(Profile* profile,
|
| - const GURL& source_url,
|
| - const std::string& app_id,
|
| - int32 tab_id,
|
| - const TaskDescriptor& task,
|
| - const std::vector<fileapi::FileSystemURL>& file_urls,
|
| - const FileTaskFinishedCallback& done);
|
| -
|
| -typedef extensions::app_file_handler_util::PathAndMimeTypeSet
|
| - PathAndMimeTypeSet;
|
| -
|
| -// Finds the Drive app tasks that can be used with the given |path_mime_set|
|
| -// from |drive_app_registry|, and append them to the |result_list|.
|
| -// Drive app tasks will be found only if all of the files are on Drive.
|
| -void FindDriveAppTasks(const drive::DriveAppRegistry& drive_app_registry,
|
| - const PathAndMimeTypeSet& path_mime_set,
|
| - std::vector<FullTaskDescriptor>* result_list);
|
| -
|
| -// Finds the file handler tasks (apps declaring "file_handlers" in
|
| -// manifest.json) that can be used with the given files, appending them to
|
| -// the |result_list|.
|
| -void FindFileHandlerTasks(Profile* profile,
|
| - const PathAndMimeTypeSet& path_mime_set,
|
| - std::vector<FullTaskDescriptor>* result_list);
|
| -
|
| -// Finds the file browser handler tasks (app/extensions declaring
|
| -// "file_browser_handlers" in manifest.json) that can be used with the
|
| -// given files, appending them to the |result_list|.
|
| -void FindFileBrowserHandlerTasks(
|
| - Profile* profile,
|
| - const std::vector<GURL>& file_urls,
|
| - std::vector<FullTaskDescriptor>* result_list);
|
| -
|
| -// Finds all types (drive, file handlers, file browser handlers) of
|
| -// tasks. See the comment at FindDriveAppTasks() about |result_list|.
|
| -// Drive app tasks will be found only if all of the files are on Drive.
|
| -void FindAllTypesOfTasks(
|
| - Profile* profile,
|
| - const PathAndMimeTypeSet& path_mime_set,
|
| - const std::vector<GURL>& file_urls,
|
| - std::vector<FullTaskDescriptor>* result_list);
|
| -
|
| -// Chooses the default task in |tasks| and sets it as default, if the default
|
| -// task is found (i.e. the default task may not exist in |tasks|). No tasks
|
| -// should be set as default before calling this function.
|
| -void ChooseAndSetDefaultTask(const PrefService& pref_service,
|
| - const PathAndMimeTypeSet& path_mime_set,
|
| - std::vector<FullTaskDescriptor>* tasks);
|
| -
|
| -} // namespace file_tasks
|
| -} // namespace file_manager
|
| -
|
| -#endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_FILE_TASKS_H_
|
|
|