Index: chrome/browser/renderer_host/chrome_render_message_filter.cc |
diff --git a/chrome/browser/renderer_host/chrome_render_message_filter.cc b/chrome/browser/renderer_host/chrome_render_message_filter.cc |
index 2df3e15d3dce55952ee734df11818d126bec3f7b..76c22b4735c0fbefaffef518e2d27f5c09798550 100644 |
--- a/chrome/browser/renderer_host/chrome_render_message_filter.cc |
+++ b/chrome/browser/renderer_host/chrome_render_message_filter.cc |
@@ -200,38 +200,24 @@ void ChromeRenderMessageFilter::OnRequestFileSystemAccessSync( |
const GURL& origin_url, |
const GURL& top_origin_url, |
IPC::Message* reply_msg) { |
- bool allowed = |
- cookie_settings_->IsSettingCookieAllowed(origin_url, top_origin_url); |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ base::Callback<void(bool)> callback = |
+ base::Bind(&ChromeRenderMessageFilter:: |
+ OnRequestFileSystemAccessSyncResponse, |
+ base::Unretained(this), |
+ reply_msg); |
+ OnRequestFileSystemAccess(render_frame_id, |
+ origin_url, |
+ top_origin_url, |
+ callback); |
+} |
-#if defined(ENABLE_EXTENSIONS) |
- bool is_web_view_guest = |
- ExtensionRendererState::GetInstance()->IsWebViewRenderer( |
- render_process_id_); |
- if (is_web_view_guest) { |
- // Record access to file system for potential display in UI. |
- BrowserThread::PostTask(BrowserThread::UI, |
- FROM_HERE, |
- base::Bind(&WebViewGuest::FileSystemAccessedSync, |
- render_process_id_, |
- render_frame_id, |
- origin_url, |
- !allowed, |
- reply_msg)); |
- return; |
- } |
-#endif |
+void ChromeRenderMessageFilter::OnRequestFileSystemAccessSyncResponse( |
+ IPC::Message* reply_msg, |
+ bool allowed) { |
ChromeViewHostMsg_RequestFileSystemAccessSync::WriteReplyParams(reply_msg, |
allowed); |
Send(reply_msg); |
- // Record access to file system for potential display in UI. |
- BrowserThread::PostTask( |
- BrowserThread::UI, |
- FROM_HERE, |
- base::Bind(&TabSpecificContentSettings::FileSystemAccessed, |
- render_process_id_, |
- render_frame_id, |
- origin_url, |
- !allowed)); |
} |
void ChromeRenderMessageFilter::OnRequestFileSystemAccessAsync( |
@@ -240,6 +226,32 @@ void ChromeRenderMessageFilter::OnRequestFileSystemAccessAsync( |
const GURL& origin_url, |
const GURL& top_origin_url) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ base::Callback<void(bool)> callback = |
+ base::Bind(&ChromeRenderMessageFilter:: |
+ OnRequestFileSystemAccessAsyncResponse, |
+ base::Unretained(this), |
Fady Samuel
2014/06/24 18:30:43
This should probably be a scoped_ref_ptr. I think
Xi Han
2014/06/24 20:44:23
Great catch! I also updated the OnRequestFileSyste
|
+ render_frame_id, |
+ request_id); |
+ OnRequestFileSystemAccess(render_frame_id, |
+ origin_url, |
+ top_origin_url, |
+ callback); |
+} |
+ |
+void ChromeRenderMessageFilter::OnRequestFileSystemAccessAsyncResponse( |
+ int render_frame_id, |
+ int request_id, |
+ bool allowed) { |
+ Send(new ChromeViewMsg_RequestFileSystemAccessAsyncResponse( |
+ render_frame_id, request_id, allowed)); |
+} |
+ |
+void ChromeRenderMessageFilter::OnRequestFileSystemAccess( |
+ int render_frame_id, |
+ const GURL& origin_url, |
+ const GURL& top_origin_url, |
+ base::Callback<void(bool)> callback) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
bool allowed = |
cookie_settings_->IsSettingCookieAllowed(origin_url, top_origin_url); |
@@ -250,29 +262,28 @@ void ChromeRenderMessageFilter::OnRequestFileSystemAccessAsync( |
render_process_id_); |
if (is_web_view_guest) { |
// Record access to file system for potential display in UI. |
- BrowserThread::PostTask(BrowserThread::UI, |
- FROM_HERE, |
- base::Bind(&WebViewGuest::FileSystemAccessedAsync, |
- render_process_id_, |
- render_frame_id, |
- request_id, |
- origin_url, |
- !allowed)); |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, |
+ FROM_HERE, |
+ base::Bind(&WebViewGuest::FileSystemAccessed, |
+ render_process_id_, |
+ render_frame_id, |
+ origin_url, |
+ !allowed, |
+ callback)); |
return; |
} |
#endif |
- Send(new ChromeViewMsg_RequestFileSystemAccessAsyncResponse(render_frame_id, |
- request_id, |
- allowed)); |
+ callback.Run(allowed); |
// Record access to file system for potential display in UI. |
BrowserThread::PostTask( |
BrowserThread::UI, |
FROM_HERE, |
base::Bind(&TabSpecificContentSettings::FileSystemAccessed, |
- render_process_id_, |
- render_frame_id, |
- origin_url, |
- !allowed)); |
+ render_process_id_, |
+ render_frame_id, |
+ origin_url, |
+ !allowed)); |
} |
void ChromeRenderMessageFilter::OnAllowIndexedDB(int render_frame_id, |