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

Unified Diff: chrome/renderer/content_settings_observer.cc

Issue 170733004: Avoid sync IPCs for FileSystem API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Async File System permission Created 6 years, 10 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/renderer/content_settings_observer.cc
diff --git a/chrome/renderer/content_settings_observer.cc b/chrome/renderer/content_settings_observer.cc
index f5489a07f70d2ccaa399358f20f14dfad50041af..0e0012977f05c9f70483b1c92d8ff1c7f247d3cb 100644
--- a/chrome/renderer/content_settings_observer.cc
+++ b/chrome/renderer/content_settings_observer.cc
@@ -10,11 +10,13 @@
#include "chrome/common/render_messages.h"
#include "chrome/common/url_constants.h"
#include "chrome/renderer/extensions/dispatcher.h"
+#include "chrome/renderer/permission_request_map.h"
#include "content/public/renderer/document_state.h"
#include "content/public/renderer/navigation_state.h"
#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_view.h"
#include "extensions/common/constants.h"
+#include "third_party/WebKit/public/platform/WebPermissionCallbacks.h"
#include "third_party/WebKit/public/platform/WebURL.h"
#include "third_party/WebKit/public/web/WebDataSource.h"
#include "third_party/WebKit/public/web/WebDocument.h"
@@ -28,6 +30,7 @@ using blink::WebDataSource;
using blink::WebDocument;
using blink::WebFrame;
using blink::WebFrameClient;
+using blink::WebPermissionCallbacks;
using blink::WebSecurityOrigin;
using blink::WebString;
using blink::WebURL;
@@ -194,6 +197,8 @@ bool ContentSettingsObserver::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(ChromeViewMsg_SetAllowRunningInsecureContent,
OnSetAllowRunningInsecureContent)
IPC_MESSAGE_HANDLER(ChromeViewMsg_ReloadFrame, OnReloadFrame);
+ IPC_MESSAGE_HANDLER(ChromeViewMsg_RequestFileSystemAccess_ACK,
+ OnRequestFileSystemAccessACK)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
if (handled)
@@ -261,6 +266,19 @@ bool ContentSettingsObserver::allowFileSystem(WebFrame* frame) {
return result;
}
+void ContentSettingsObserver::requestFileSystemAccess(
+ WebFrame* frame, const WebPermissionCallbacks& callbacks) {
+ int request_id =
+ content::PermissionRequestMap::GetOrCreate()->
+ RegisterPermissionCallbacks(callbacks);
kinuko 2014/03/05 08:35:44 If you don't call this on worker thread you don't
Fady Samuel 2014/03/06 18:38:25 Done.
+
+ Send(new ChromeViewHostMsg_RequestFileSystemAccess(
+ routing_id(),
+ request_id,
+ GURL(frame->document().securityOrigin().toString()),
+ GURL(frame->top()->document().securityOrigin().toString())));
+}
+
bool ContentSettingsObserver::allowImage(WebFrame* frame,
bool enabled_per_settings,
const WebURL& image_url) {
@@ -589,6 +607,18 @@ void ContentSettingsObserver::OnReloadFrame() {
render_frame()->GetWebFrame()->reload();
}
+void ContentSettingsObserver::OnRequestFileSystemAccessACK(int request_id,
+ bool allowed) {
+ scoped_ptr<WebPermissionCallbacks> callbacks(
+ content::PermissionRequestMap::Get()->GetAndUnregisterCallbacks(
+ request_id));
+ if (allowed) {
+ callbacks->doAllow();
+ } else {
+ callbacks->doDeny();
+ }
kinuko 2014/03/05 08:35:44 nit: no need of { } for one-line body
Fady Samuel 2014/03/06 18:38:25 I prefer having them when the if statement has an
+}
+
void ContentSettingsObserver::ClearBlockedContentSettings() {
for (size_t i = 0; i < arraysize(content_blocked_); ++i)
content_blocked_[i] = false;

Powered by Google App Engine
This is Rietveld 408576698