| Index: chrome/renderer/worker_permission_client_proxy.cc
|
| diff --git a/chrome/renderer/worker_permission_client_proxy.cc b/chrome/renderer/worker_permission_client_proxy.cc
|
| index 7d8a65e87ea92419838ee79d97a2ed33ebdd0744..52573aa5bd0e51c433d59325ea00e7c93f112e79 100644
|
| --- a/chrome/renderer/worker_permission_client_proxy.cc
|
| +++ b/chrome/renderer/worker_permission_client_proxy.cc
|
| @@ -7,6 +7,7 @@
|
| #include "content/public/renderer/render_frame.h"
|
| #include "content/public/renderer/render_thread.h"
|
| #include "ipc/ipc_sync_message_filter.h"
|
| +#include "third_party/WebKit/public/platform/WebPermissionCallbacks.h"
|
| #include "third_party/WebKit/public/web/WebDocument.h"
|
| #include "third_party/WebKit/public/web/WebFrame.h"
|
| #include "third_party/WebKit/public/web/WebSecurityOrigin.h"
|
| @@ -46,11 +47,41 @@ bool WorkerPermissionClientProxy::allowFileSystem() {
|
| return false;
|
|
|
| bool result = false;
|
| - sync_message_filter_->Send(new ChromeViewHostMsg_AllowFileSystem(
|
| + sync_message_filter_->Send(new ChromeViewHostMsg_RequestFileSystemAccessSync(
|
| routing_id_, document_origin_url_, top_frame_origin_url_, &result));
|
| return result;
|
| }
|
|
|
| +bool WorkerPermissionClientProxy::requestFileSystemAccessSync() {
|
| + if (is_unique_origin_)
|
| + return false;
|
| +
|
| + bool result = false;
|
| + sync_message_filter_->Send(new ChromeViewHostMsg_RequestFileSystemAccessSync(
|
| + routing_id_, document_origin_url_, top_frame_origin_url_, &result));
|
| + return result;
|
| +}
|
| +
|
| +void WorkerPermissionClientProxy::requestFileSystemAccessAsync(
|
| + const blink::WebPermissionCallbacks& callbacks) {
|
| + bool result = false;
|
| +
|
| + // There are two reasons the we still send a synchronized message here:
|
| + // 1. This function is called in blink's worker thread. Therefore, sending
|
| + // synchronized message will only block the worker's thread, but won't block
|
| + // the main thread.
|
| + // 2. The sync filesystem API requires blocking. Using an asynchronous IPC
|
| + // would introduce additional complexity to block the worker thread.
|
| + sync_message_filter_->Send(new ChromeViewHostMsg_RequestFileSystemAccessSync(
|
| + routing_id_, document_origin_url_, top_frame_origin_url_, &result));
|
| + blink::WebPermissionCallbacks permission_callbacks(callbacks);
|
| + if (result) {
|
| + permission_callbacks.doAllow();
|
| + return;
|
| + }
|
| + permission_callbacks.doDeny();
|
| +}
|
| +
|
| bool WorkerPermissionClientProxy::allowIndexedDB(
|
| const blink::WebString& name) {
|
| if (is_unique_origin_)
|
|
|