diff options
author | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-21 05:48:22 +0000 |
---|---|---|
committer | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-21 05:48:22 +0000 |
commit | 2b06a99e03e8f69171bb3a79f2a9b58aa95345f1 (patch) | |
tree | 28b5e796f1150838169619c4febc1095fce1295e /chrome/renderer/render_view.cc | |
parent | 65a3b914585cee20f1c8b213c82eaa2a5da0cb25 (diff) | |
download | chromium_src-2b06a99e03e8f69171bb3a79f2a9b58aa95345f1.zip chromium_src-2b06a99e03e8f69171bb3a79f2a9b58aa95345f1.tar.gz chromium_src-2b06a99e03e8f69171bb3a79f2a9b58aa95345f1.tar.bz2 |
Add 1st cut of IPC plumbing code for FileSystem API's openFileSystem
The dispatcher host code is just a stub.
BUG=32277
TESTS=none; will be added later
Review URL: http://codereview.chromium.org/3107026
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@56984 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/render_view.cc')
-rw-r--r-- | chrome/renderer/render_view.cc | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 34a0cdb..2e66fc7 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -98,6 +98,8 @@ #include "third_party/WebKit/WebKit/chromium/public/WebDragData.h" #include "third_party/WebKit/WebKit/chromium/public/WebFileChooserParams.h" #include "third_party/WebKit/WebKit/chromium/public/WebFindOptions.h" +#include "third_party/WebKit/WebKit/chromium/public/WebFileSystem.h" +#include "third_party/WebKit/WebKit/chromium/public/WebFileSystemCallbacks.h" #include "third_party/WebKit/WebKit/chromium/public/WebFormControlElement.h" #include "third_party/WebKit/WebKit/chromium/public/WebFormElement.h" #include "third_party/WebKit/WebKit/chromium/public/WebFrame.h" @@ -192,6 +194,8 @@ using WebKit::WebDragOperation; using WebKit::WebDragOperationsMask; using WebKit::WebEditingAction; using WebKit::WebFileChooserCompletion; +using WebKit::WebFileSystem; +using WebKit::WebFileSystemCallbacks; using WebKit::WebFindOptions; using WebKit::WebFormControlElement; using WebKit::WebFormElement; @@ -406,6 +410,17 @@ static std::string DetermineTextLanguage(const string16& text) { return language; } +// Holds pending openFileSystem callbacks. +struct RenderView::PendingOpenFileSystem { + explicit PendingOpenFileSystem(WebFileSystemCallbacks* c) : callbacks(c) { + } + ~PendingOpenFileSystem() { + if (callbacks) + callbacks->didFail(WebKit::WebFileErrorAbort); + } + WebFileSystemCallbacks* callbacks; +}; + /////////////////////////////////////////////////////////////////////////////// int32 RenderView::next_page_id_ = 1; @@ -780,6 +795,8 @@ void RenderView::OnMessageReceived(const IPC::Message& message) { IPC_MESSAGE_HANDLER(ViewMsg_SetAccessibilityFocus, OnSetAccessibilityFocus) IPC_MESSAGE_HANDLER(ViewMsg_AccessibilityDoDefaultAction, OnAccessibilityDoDefaultAction) + IPC_MESSAGE_HANDLER(ViewMsg_OpenFileSystemRequest_Complete, + OnOpenFileSystemRequestComplete) // Have the super handle all other messages. IPC_MESSAGE_UNHANDLED(RenderWidget::OnMessageReceived(message)) @@ -3366,6 +3383,28 @@ void RenderView::reportFindInPageSelection(int request_id, false)); } +void RenderView::openFileSystem( + WebFrame* frame, + WebFileSystem::Type type, + long long size, + WebFileSystemCallbacks* callbacks) { + scoped_ptr<PendingOpenFileSystem> request( + new PendingOpenFileSystem(callbacks)); + + WebSecurityOrigin origin = frame->securityOrigin(); + if (origin.isEmpty()) + return; // Uninitialized document? + + ViewHostMsg_OpenFileSystemRequest_Params params; + params.routing_id = routing_id_; + params.request_id = pending_file_system_requests_.Add(request.release()); + params.origin_url = GURL(origin.toString()); + params.type = type; + params.requested_size = size; + + Send(new ViewHostMsg_OpenFileSystemRequest(params)); +} + // webkit_glue::WebPluginPageDelegate ----------------------------------------- webkit_glue::WebPluginDelegate* RenderView::CreatePluginDelegate( @@ -5503,3 +5542,17 @@ bool RenderView::IsNonLocalTopLevelNavigation( } return false; } + +void RenderView::OnOpenFileSystemRequestComplete( + int request_id, bool accepted, const string16& name, + const string16& root_path) { + PendingOpenFileSystem* request = pending_file_system_requests_.Lookup( + request_id); + DCHECK(request); + if (accepted) + request->callbacks->didOpenFileSystem(name, root_path); + else + request->callbacks->didFail(WebKit::WebFileErrorSecurity); + request->callbacks = NULL; + pending_file_system_requests_.Remove(request_id); +} |