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

Unified Diff: content/renderer/web_intents_host.cc

Issue 9651020: Pass content-type resources to web intents. Goes through download, then invokes the p… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move dispatch logic client-side. Created 8 years, 9 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: content/renderer/web_intents_host.cc
diff --git a/content/renderer/web_intents_host.cc b/content/renderer/web_intents_host.cc
index 6f2e05abd5e132e160377bdfd753603610d56a83..1bba7815965e89e1be6eb6098aa29fc0f8aca5fb 100644
--- a/content/renderer/web_intents_host.cc
+++ b/content/renderer/web_intents_host.cc
@@ -10,6 +10,7 @@
#include "content/renderer/render_view_impl.h"
#include "ipc/ipc_message.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebBlob.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebIntentRequest.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
@@ -19,6 +20,7 @@
#include "webkit/glue/cpp_bound_class.h"
using WebKit::WebBindings;
+using WebKit::WebBlob;
using WebKit::WebCString;
using WebKit::WebFrame;
using WebKit::WebIntentRequest;
@@ -31,26 +33,35 @@ using WebKit::WebSerializedScriptValue;
// browser-provided Javascript API objects on |window|.
class WebIntentsHost::BoundDeliveredIntent : public CppBoundClass {
public:
- BoundDeliveredIntent(const string16& action,
- const string16& type,
- const string16& data,
+ BoundDeliveredIntent(const webkit_glue::WebIntentData& intent,
WebIntentsHost* parent,
WebFrame* frame) {
- action_ = WebString(action).utf8();
- type_ = WebString(type).utf8();
+ action_ = WebString(intent.action).utf8();
+ type_ = WebString(intent.type).utf8();
parent_ = parent;
v8::HandleScope scope;
v8::Local<v8::Context> ctx = frame->mainWorldScriptContext();
v8::Context::Scope cscope(ctx);
- WebSerializedScriptValue ssv =
- WebSerializedScriptValue::fromString(WebString(data));
- // TODO(gbillock): use an exception handler instead? Need to
- // pass back error state to caller? This is a pretty unexpected
- // internal error...
- CHECK(!ssv.isNull());
- v8::Local<v8::Value> data_obj =
- v8::Local<v8::Value>::New(ssv.deserialize());
+ v8::Local<v8::Value> data_obj;
+
+ if (intent.data_type == webkit_glue::WebIntentData::SERIALIZED) {
+ WebSerializedScriptValue ssv =
+ WebSerializedScriptValue::fromString(WebString(intent.data));
+ // TODO(gbillock): use an exception handler instead? Need to
+ // pass back error state to caller? This is a pretty unexpected
+ // internal error...
+ CHECK(!ssv.isNull());
+ data_obj = v8::Local<v8::Value>::New(ssv.deserialize());
+ } else if (intent.data_type == webkit_glue::WebIntentData::UNSERIALIZED) {
+ data_obj = v8::String::New(intent.unserialized_data.data(),
+ intent.unserialized_data.length());
+ } else {
+ CHECK(intent.data_type == webkit_glue::WebIntentData::BLOB);
+ WebBlob web_blob = WebBlob::createFromFile(
+ WebString::fromUTF8(intent.blob_file), intent.blob_length);
+ data_obj = v8::Local<v8::Value>::New(web_blob.toV8Value());
+ }
data_val_.reset(new CppVariant);
WebBindings::toNPVariant(data_obj, frame->windowObject(), data_val_.get());
@@ -195,7 +206,7 @@ void WebIntentsHost::DidClearWindowObject(WebFrame* frame) {
if (intent_.get() == NULL || frame->top() != frame)
return;
- delivered_intent_.reset(new BoundDeliveredIntent(
- intent_->action, intent_->type, intent_->data, this, frame));
+ delivered_intent_.reset(
+ new BoundDeliveredIntent(*(intent_.get()), this, frame));
delivered_intent_->BindToJavascript(frame, "intent");
}

Powered by Google App Engine
This is Rietveld 408576698