summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/render_view.cc
diff options
context:
space:
mode:
authorkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-21 05:48:22 +0000
committerkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-21 05:48:22 +0000
commit2b06a99e03e8f69171bb3a79f2a9b58aa95345f1 (patch)
tree28b5e796f1150838169619c4febc1095fce1295e /chrome/renderer/render_view.cc
parent65a3b914585cee20f1c8b213c82eaa2a5da0cb25 (diff)
downloadchromium_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.cc53
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);
+}