| Index: content/renderer/web_intents_host.cc
|
| diff --git a/content/renderer/web_intents_host.cc b/content/renderer/web_intents_host.cc
|
| deleted file mode 100644
|
| index 944e9c5fed508492ba69b68480dbb5635f7bf517..0000000000000000000000000000000000000000
|
| --- a/content/renderer/web_intents_host.cc
|
| +++ /dev/null
|
| @@ -1,258 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "content/renderer/web_intents_host.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/bind_helpers.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "content/common/intents_messages.h"
|
| -#include "content/public/renderer/v8_value_converter.h"
|
| -#include "content/renderer/render_view_impl.h"
|
| -#include "third_party/WebKit/Source/Platform/chromium/public/WebCString.h"
|
| -#include "third_party/WebKit/Source/Platform/chromium/public/WebFileSystem.h"
|
| -#include "third_party/WebKit/Source/Platform/chromium/public/WebString.h"
|
| -#include "third_party/WebKit/Source/Platform/chromium/public/WebVector.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/WebDeliveredIntentClient.h"
|
| -#include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h"
|
| -#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
|
| -#include "third_party/WebKit/Source/WebKit/chromium/public/WebIntent.h"
|
| -#include "third_party/WebKit/Source/WebKit/chromium/public/WebIntentRequest.h"
|
| -#include "third_party/WebKit/Source/WebKit/chromium/public/WebSerializedScriptValue.h"
|
| -#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
|
| -#include "webkit/fileapi/file_system_util.h"
|
| -#include "webkit/glue/cpp_bound_class.h"
|
| -
|
| -using WebKit::WebBindings;
|
| -using WebKit::WebBlob;
|
| -using WebKit::WebCString;
|
| -using WebKit::WebDeliveredIntentClient;
|
| -using WebKit::WebFrame;
|
| -using WebKit::WebIntent;
|
| -using WebKit::WebIntentRequest;
|
| -using WebKit::WebString;
|
| -using WebKit::WebSerializedScriptValue;
|
| -using WebKit::WebVector;
|
| -
|
| -namespace content {
|
| -
|
| -namespace {
|
| -
|
| -// Reads reply value, either from the data field, or the data_file field.
|
| -WebSerializedScriptValue GetReplyValue(
|
| - const webkit_glue::WebIntentReply& reply) {
|
| - if (reply.data_file_size > -1) {
|
| - // TODO(smckay): seralize the blob value in the web intent script
|
| - // context. We simply don't know how to do this at this time.
|
| - // The following code kills the renderer when we call toV8Value.
|
| - // v8::HandleScope scope;
|
| - // v8::Local<v8::Context> ctx = ....which context?
|
| - // v8::Context::Scope cscope(ctx);
|
| - // WebKit::WebBlob blob = WebBlob::createFromFile(
|
| - // WebString::fromUTF8(reply.data_file.AsUTF8Unsafe()),
|
| - // reply.data_file_size);
|
| - // v8::Handle<v8::Value> value = blob.toV8Value();
|
| - // return WebSerializedScriptValue::serialize(value);
|
| - return WebSerializedScriptValue::fromString(
|
| - ASCIIToUTF16(reply.data_file.AsUTF8Unsafe()));
|
| - } else {
|
| - return WebSerializedScriptValue::fromString(reply.data);
|
| - }
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -class DeliveredIntentClientImpl : public WebDeliveredIntentClient {
|
| - public:
|
| - explicit DeliveredIntentClientImpl(WebIntentsHost* host) : host_(host) {}
|
| - virtual ~DeliveredIntentClientImpl() {}
|
| -
|
| - virtual void postResult(const WebSerializedScriptValue& data) const {
|
| - host_->OnResult(data.toString());
|
| - }
|
| -
|
| - virtual void postFailure(const WebSerializedScriptValue& data) const {
|
| - host_->OnFailure(data.toString());
|
| - }
|
| -
|
| - virtual void destroy() OVERRIDE {
|
| - }
|
| -
|
| - private:
|
| - WebIntentsHost* host_;
|
| -};
|
| -
|
| -WebIntentsHost::WebIntentsHost(RenderViewImpl* render_view)
|
| - : RenderViewObserver(render_view),
|
| - id_counter_(0) {
|
| -}
|
| -
|
| -WebIntentsHost::~WebIntentsHost() {
|
| -}
|
| -
|
| -int WebIntentsHost::RegisterWebIntent(
|
| - const WebIntentRequest& request) {
|
| - int id = id_counter_++;
|
| - intent_requests_[id] = request;
|
| - return id;
|
| -}
|
| -
|
| -bool WebIntentsHost::OnMessageReceived(const IPC::Message& message) {
|
| - bool handled = true;
|
| - IPC_BEGIN_MESSAGE_MAP(WebIntentsHost, message)
|
| - IPC_MESSAGE_HANDLER(IntentsMsg_SetWebIntentData, OnSetIntent)
|
| - IPC_MESSAGE_HANDLER(IntentsMsg_WebIntentReply, OnWebIntentReply);
|
| - IPC_MESSAGE_UNHANDLED(handled = false)
|
| - IPC_END_MESSAGE_MAP()
|
| - return handled;
|
| -}
|
| -
|
| -void WebIntentsHost::OnSetIntent(const webkit_glue::WebIntentData& intent) {
|
| - intent_.reset(new webkit_glue::WebIntentData(intent));
|
| -}
|
| -
|
| -void WebIntentsHost::OnWebIntentReply(
|
| - const webkit_glue::WebIntentReply& reply,
|
| - int intent_id) {
|
| - std::map<int, WebIntentRequest>::iterator request =
|
| - intent_requests_.find(intent_id);
|
| - if (request == intent_requests_.end())
|
| - return;
|
| - WebIntentRequest intent_request = request->second;
|
| - intent_requests_.erase(request);
|
| -
|
| - if (reply.type == webkit_glue::WEB_INTENT_REPLY_SUCCESS) {
|
| - intent_request.postResult(GetReplyValue(reply));
|
| - } else {
|
| - intent_request.postFailure(
|
| - WebSerializedScriptValue::fromString(reply.data));
|
| - }
|
| -}
|
| -
|
| -void WebIntentsHost::OnResult(const WebKit::WebString& data) {
|
| - const webkit_glue::WebIntentReply reply(
|
| - webkit_glue::WEB_INTENT_REPLY_SUCCESS, data);
|
| - Send(new IntentsHostMsg_WebIntentReply(routing_id(), reply));
|
| -}
|
| -
|
| -void WebIntentsHost::OnFailure(const WebKit::WebString& data) {
|
| - const webkit_glue::WebIntentReply reply(
|
| - webkit_glue::WEB_INTENT_REPLY_FAILURE, data);
|
| - Send(new IntentsHostMsg_WebIntentReply(routing_id(), reply));
|
| -}
|
| -
|
| -// We set the intent payload into all top-level frame window objects. This
|
| -// should persist the data through redirects, and not deliver it to any
|
| -// sub-frames.
|
| -void WebIntentsHost::DidCreateScriptContext(WebKit::WebFrame* frame,
|
| - v8::Handle<v8::Context> ctx,
|
| - int extension_group,
|
| - int world_id) {
|
| - if (intent_.get() == NULL || frame->top() != frame)
|
| - return;
|
| -
|
| - if (ctx != frame->mainWorldScriptContext())
|
| - return;
|
| -
|
| - if (!delivered_intent_client_.get()) {
|
| - delivered_intent_client_.reset(new DeliveredIntentClientImpl(this));
|
| - }
|
| -
|
| - WebIntent web_intent = CreateWebIntent(frame, *intent_);
|
| -
|
| - if (!web_intent.action().isEmpty())
|
| - frame->deliverIntent(web_intent, NULL, delivered_intent_client_.get());
|
| -}
|
| -
|
| -WebIntent WebIntentsHost::CreateWebIntent(
|
| - WebFrame* frame, const webkit_glue::WebIntentData& intent_data) {
|
| - // Must be called with v8 scope held.
|
| - DCHECK(v8::Context::InContext());
|
| -
|
| - // TODO(gbillock): Remove this block when we get rid of |extras|.
|
| - WebVector<WebString> extras_keys(intent_data.extra_data.size());
|
| - WebVector<WebString> extras_values(intent_data.extra_data.size());
|
| - std::map<string16, string16>::const_iterator iter =
|
| - intent_data.extra_data.begin();
|
| - for (size_t i = 0; iter != intent_data.extra_data.end(); ++i, ++iter) {
|
| - extras_keys[i] = iter->first;
|
| - extras_values[i] = iter->second;
|
| - }
|
| -
|
| - switch (intent_data.data_type) {
|
| - case webkit_glue::WebIntentData::SERIALIZED: {
|
| - return WebIntent::create(intent_data.action, intent_data.type,
|
| - intent_data.data,
|
| - extras_keys, extras_values);
|
| - }
|
| -
|
| - case webkit_glue::WebIntentData::UNSERIALIZED: {
|
| - v8::Local<v8::String> dataV8 = v8::String::New(
|
| - reinterpret_cast<const uint16_t*>(
|
| - intent_data.unserialized_data.data()),
|
| - static_cast<int>(intent_data.unserialized_data.length()));
|
| - WebSerializedScriptValue serialized_data =
|
| - WebSerializedScriptValue::serialize(dataV8);
|
| -
|
| - return WebIntent::create(intent_data.action, intent_data.type,
|
| - serialized_data.toString(),
|
| - extras_keys, extras_values);
|
| - }
|
| -
|
| - case webkit_glue::WebIntentData::BLOB: {
|
| - web_blob_ = WebBlob::createFromFile(
|
| - WebString::fromUTF8(intent_data.blob_file.AsUTF8Unsafe()),
|
| - intent_data.blob_length);
|
| - WebSerializedScriptValue serialized_data =
|
| - WebSerializedScriptValue::serialize(web_blob_.toV8Value());
|
| - return WebIntent::create(intent_data.action, intent_data.type,
|
| - serialized_data.toString(),
|
| - extras_keys, extras_values);
|
| - }
|
| -
|
| - case webkit_glue::WebIntentData::FILESYSTEM: {
|
| - const GURL origin = GURL(frame->document().securityOrigin().toString());
|
| - const GURL root_url =
|
| - fileapi::GetFileSystemRootURI(origin,
|
| - fileapi::kFileSystemTypeIsolated);
|
| - const std::string url = base::StringPrintf(
|
| - "%s%s/%s/",
|
| - root_url.spec().c_str(),
|
| - intent_data.filesystem_id.c_str(),
|
| - intent_data.root_name.c_str());
|
| - // TODO(kmadhusu): This is a temporary hack to create a serializable file
|
| - // system. Once we have a better way to create a serializable file system,
|
| - // remove this hack.
|
| - v8::Handle<v8::Value> filesystem_V8 = frame->createSerializableFileSystem(
|
| - WebKit::WebFileSystem::TypeIsolated,
|
| - WebKit::WebString::fromUTF8(intent_data.root_name),
|
| - WebKit::WebString::fromUTF8(url));
|
| - WebSerializedScriptValue serialized_data =
|
| - WebSerializedScriptValue::serialize(filesystem_V8);
|
| - return WebIntent::create(intent_data.action, intent_data.type,
|
| - serialized_data.toString(),
|
| - extras_keys, extras_values);
|
| - }
|
| -
|
| - case webkit_glue::WebIntentData::MIME_TYPE: {
|
| - scoped_ptr<V8ValueConverter> converter(
|
| - V8ValueConverter::create());
|
| - v8::Handle<v8::Value> valV8 = converter->ToV8Value(
|
| - &intent_data.mime_data, v8::Context::GetCurrent());
|
| -
|
| - WebSerializedScriptValue serialized_data =
|
| - WebSerializedScriptValue::serialize(valV8);
|
| - return WebIntent::create(intent_data.action, intent_data.type,
|
| - serialized_data.toString(),
|
| - WebVector<WebString>(), WebVector<WebString>());
|
| - }
|
| - }
|
| -
|
| - NOTREACHED();
|
| - return WebIntent();
|
| -}
|
| -
|
| -} // namespace content
|
|
|