Home | History | Annotate | Download | only in file_manager
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 //
      5 // This file provides utility functions for file browser handlers.
      6 // https://developer.chrome.com/extensions/fileBrowserHandler.html
      7 
      8 #ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_FILE_BROWSER_HANDLERS_H_
      9 #define CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_FILE_BROWSER_HANDLERS_H_
     10 
     11 #include <string>
     12 #include <vector>
     13 
     14 #include "base/basictypes.h"
     15 #include "base/callback_forward.h"
     16 #include "chrome/browser/chromeos/extensions/file_manager/file_tasks.h"
     17 
     18 class FileBrowserHandler;
     19 class GURL;
     20 class Profile;
     21 
     22 namespace base {
     23 class FilePath;
     24 }
     25 
     26 namespace extensions {
     27 class Extension;
     28 }
     29 
     30 namespace fileapi {
     31 class FileSystemURL;
     32 }
     33 
     34 namespace file_manager {
     35 namespace file_browser_handlers {
     36 
     37 // Tasks are stored as a vector in order of priorities.
     38 typedef std::vector<const FileBrowserHandler*> FileBrowserHandlerList;
     39 
     40 // Returns true if the given file browser handler should be used as a
     41 // fallback. Such handlers are Files.app's internal handlers as well as quick
     42 // office extensions.
     43 bool IsFallbackFileBrowserHandler(const FileBrowserHandler* handler);
     44 
     45 // Finds file browser handlers set as default from |common_tasks| for
     46 // |file_list|. If no handlers are set as default, choose the the firstly
     47 // found fallback handler as default.
     48 FileBrowserHandlerList FindDefaultFileBrowserHandlers(
     49     Profile* profile,
     50     const std::vector<base::FilePath>& file_list,
     51     const FileBrowserHandlerList& common_tasks);
     52 
     53 // Returns the list of file browser handlers that can open all files in
     54 // |file_list|.
     55 FileBrowserHandlerList FindCommonFileBrowserHandlers(
     56     Profile* profile,
     57     const std::vector<GURL>& file_list);
     58 
     59 // Finds a file browser handler for a file whose URL is |url| and whose path
     60 // is |path|. Returns the default handler if one is defined (The default
     61 // handler is the one that is assigned to the file manager task button by
     62 // default). If the default handler is not found, tries to match the url with
     63 // one of the file browser handlers.
     64 const FileBrowserHandler* FindFileBrowserHandlerForURLAndPath(
     65     Profile* profile,
     66     const GURL& url,
     67     const base::FilePath& path);
     68 
     69 // Executes a file browser handler specified by |extension| of the given
     70 // action ID for |file_urls|. Returns false if undeclared handlers are
     71 // found. |done| is on completion. See also the comment at ExecuteFileTask()
     72 // for other parameters.
     73 bool ExecuteFileBrowserHandler(
     74     Profile* profile,
     75     const extensions::Extension* extension,
     76     int32 tab_id,
     77     const std::string& action_id,
     78     const std::vector<fileapi::FileSystemURL>& file_urls,
     79     const file_tasks::FileTaskFinishedCallback& done);
     80 
     81 }  // namespace file_browser_handlers
     82 }  // namespace file_manager
     83 
     84 #endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_FILE_BROWSER_HANDLERS_H_
     85