Chromium Code Reviews| 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..ca7e8fb2281eaf11171b432ead8614b8208352fa 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(intent.blob_url, |
|
michaeln
2012/03/12 21:16:12
i think this method is expecting a full file path
Greg Billock
2012/03/13 17:56:10
Yeah, this was essentially because I didn't know w
|
| + 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"); |
| } |