Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5518)

Unified Diff: chrome/browser/chromeos/extensions/file_handler_util.h

Issue 10067021: Postpone setting up file handler's file permissions if handler is running lazy background page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/extensions/file_handler_util.h
diff --git a/chrome/browser/chromeos/extensions/file_handler_util.h b/chrome/browser/chromeos/extensions/file_handler_util.h
index 899f36bf98017f3101804cd624e4977638209141..369ac68a69291a5ffb84c74e7bf14d0ff185485b 100644
--- a/chrome/browser/chromeos/extensions/file_handler_util.h
+++ b/chrome/browser/chromeos/extensions/file_handler_util.h
@@ -6,9 +6,13 @@
#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_HANDLER_UTIL_H_
#pragma once
+#include <vector>
+
#include "base/platform_file.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/url_pattern_set.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
class Browser;
class FileBrowserHandler;
@@ -60,7 +64,8 @@ bool GetDefaultTask(Profile* profile,
const FileBrowserHandler** handler);
// Helper class for executing file browser file action.
-class FileTaskExecutor : public base::RefCountedThreadSafe<FileTaskExecutor> {
+class FileTaskExecutor : public base::RefCountedThreadSafe<FileTaskExecutor>,
+ public content::NotificationObserver {
public:
FileTaskExecutor(Profile* profile,
@@ -89,6 +94,7 @@ class FileTaskExecutor : public base::RefCountedThreadSafe<FileTaskExecutor> {
FilePath absolute_path;
bool is_directory;
};
+
typedef std::vector<FileDefinition> FileDefinitionList;
class ExecuteTasksFileSystemCallbackDispatcher;
void RequestFileEntryOnFileThread(
@@ -96,20 +102,43 @@ class FileTaskExecutor : public base::RefCountedThreadSafe<FileTaskExecutor> {
const scoped_refptr<const Extension>& handler,
int handler_pid,
const std::vector<GURL>& file_urls);
- void SetupFileAccessPermissionsForGDataCache(
- const FileDefinitionList& file_list,
- int handler_pid);
- void RespondFailedOnUIThread(base::PlatformFileError error_code);
+
+ void ExecuteFailedOnUIThread();
void ExecuteFileActionsOnUIThread(const std::string& file_system_name,
const GURL& file_system_root,
const FileDefinitionList& file_list,
int handler_id);
- void ExecuteFailedOnUIThread();
+
+ // Populates |handler_host_permissions| with file path-permissions pairs that
+ // will be given to the handler extension host process.
+ void InitHandlerHostFileAccessPermissions(
+ const FileDefinitionList& file_list,
+ const Extension* handler_extension,
+ const std::string& action_id);
+ // Registers file permissions from |handler_host_permissions| with
dgozman 2012/04/13 12:41:04 Did you mean private |handler_host_permissions_| ?
tbarzic 2012/04/13 16:07:58 yes, I did
+ // ChildProcessSecurityPolicy for process with id |handler_pid|.
+ void SetupHandlerHostFileAccessPermissions(int handler_pid);
+
+ // If the handler has lazy background page, we'll have to wait until the
+ // extension host is loaded until we can setup file access permissions. To do
+ // that, we'll have to listen for notifications.
+ // Registers notifications we listen to.
+ void RegisterNotificationObservers();
+
+ // content::NotificationObserver interface.
+ // Called when observed notification is detected.
+ virtual void Observe(int type,
+ const content::NotificationSource& source,
+ const content::NotificationDetails& details) OVERRIDE;
Profile* profile_;
const GURL source_url_;
const std::string extension_id_;
const std::string action_id_;
+
+ // (File path, permission for file path) pairs for the handler.
+ std::vector<std::pair<FilePath, int> > handler_host_permissions_;
+ content::NotificationRegistrar registrar_;
};
} // namespace file_handler_util

Powered by Google App Engine
This is Rietveld 408576698