summaryrefslogtreecommitdiffstats
path: root/chrome/plugin/webplugin_delegate_stub.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/plugin/webplugin_delegate_stub.cc')
-rw-r--r--chrome/plugin/webplugin_delegate_stub.cc451
1 files changed, 0 insertions, 451 deletions
diff --git a/chrome/plugin/webplugin_delegate_stub.cc b/chrome/plugin/webplugin_delegate_stub.cc
deleted file mode 100644
index b87fe22..0000000
--- a/chrome/plugin/webplugin_delegate_stub.cc
+++ /dev/null
@@ -1,451 +0,0 @@
-// Copyright (c) 2011 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 "chrome/plugin/webplugin_delegate_stub.h"
-
-#include "build/build_config.h"
-
-#include "base/command_line.h"
-#include "chrome/plugin/npobject_stub.h"
-#include "chrome/plugin/plugin_channel.h"
-#include "chrome/plugin/plugin_thread.h"
-#include "chrome/plugin/webplugin_proxy.h"
-#include "content/common/content_client.h"
-#include "content/common/content_switches.h"
-#include "content/common/plugin_messages.h"
-#include "third_party/npapi/bindings/npapi.h"
-#include "third_party/npapi/bindings/npruntime.h"
-#include "skia/ext/platform_device.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebCursorInfo.h"
-#include "webkit/plugins/npapi/webplugin_delegate_impl.h"
-#include "webkit/glue/webcursor.h"
-
-#if defined(OS_WIN)
-#include "base/scoped_ptr.h"
-#include "printing/native_metafile_factory.h"
-#include "printing/native_metafile.h"
-#endif // defined(OS_WIN)
-
-using WebKit::WebBindings;
-using WebKit::WebCursorInfo;
-using webkit::npapi::WebPlugin;
-using webkit::npapi::WebPluginResourceClient;
-
-class FinishDestructionTask : public Task {
- public:
- FinishDestructionTask(webkit::npapi::WebPluginDelegateImpl* delegate,
- WebPlugin* webplugin)
- : delegate_(delegate), webplugin_(webplugin) {
- }
-
- void Run() {
- // WebPlugin must outlive WebPluginDelegate.
- if (delegate_)
- delegate_->PluginDestroyed();
-
- delete webplugin_;
- }
-
- private:
- webkit::npapi::WebPluginDelegateImpl* delegate_;
- webkit::npapi::WebPlugin* webplugin_;
-};
-
-WebPluginDelegateStub::WebPluginDelegateStub(
- const std::string& mime_type, int instance_id, PluginChannel* channel) :
- mime_type_(mime_type),
- instance_id_(instance_id),
- channel_(channel),
- delegate_(NULL),
- webplugin_(NULL),
- in_destructor_(false) {
- DCHECK(channel);
-}
-
-WebPluginDelegateStub::~WebPluginDelegateStub() {
- in_destructor_ = true;
- content::GetContentClient()->SetActiveURL(page_url_);
-
- if (channel_->in_send()) {
- // The delegate or an npobject is in the callstack, so don't delete it
- // right away.
- MessageLoop::current()->PostNonNestableTask(FROM_HERE,
- new FinishDestructionTask(delegate_, webplugin_));
- } else {
- // Safe to delete right away.
- if (delegate_)
- delegate_->PluginDestroyed();
-
- delete webplugin_;
- }
-}
-
-bool WebPluginDelegateStub::OnMessageReceived(const IPC::Message& msg) {
- content::GetContentClient()->SetActiveURL(page_url_);
-
- // A plugin can execute a script to delete itself in any of its NPP methods.
- // Hold an extra reference to ourself so that if this does occur and we're
- // handling a sync message, we don't crash when attempting to send a reply.
- // The exception to this is when we're already in the destructor.
- if (!in_destructor_)
- AddRef();
-
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(WebPluginDelegateStub, msg)
- IPC_MESSAGE_HANDLER(PluginMsg_Init, OnInit)
- IPC_MESSAGE_HANDLER(PluginMsg_WillSendRequest, OnWillSendRequest)
- IPC_MESSAGE_HANDLER(PluginMsg_DidReceiveResponse, OnDidReceiveResponse)
- IPC_MESSAGE_HANDLER(PluginMsg_DidReceiveData, OnDidReceiveData)
- IPC_MESSAGE_HANDLER(PluginMsg_DidFinishLoading, OnDidFinishLoading)
- IPC_MESSAGE_HANDLER(PluginMsg_DidFail, OnDidFail)
- IPC_MESSAGE_HANDLER(PluginMsg_DidFinishLoadWithReason,
- OnDidFinishLoadWithReason)
- IPC_MESSAGE_HANDLER(PluginMsg_SetFocus, OnSetFocus)
- IPC_MESSAGE_HANDLER(PluginMsg_HandleInputEvent, OnHandleInputEvent)
- IPC_MESSAGE_HANDLER(PluginMsg_Paint, OnPaint)
- IPC_MESSAGE_HANDLER(PluginMsg_DidPaint, OnDidPaint)
- IPC_MESSAGE_HANDLER(PluginMsg_Print, OnPrint)
- IPC_MESSAGE_HANDLER(PluginMsg_GetPluginScriptableObject,
- OnGetPluginScriptableObject)
- IPC_MESSAGE_HANDLER(PluginMsg_UpdateGeometry, OnUpdateGeometry)
- IPC_MESSAGE_HANDLER(PluginMsg_UpdateGeometrySync, OnUpdateGeometry)
- IPC_MESSAGE_HANDLER(PluginMsg_SendJavaScriptStream,
- OnSendJavaScriptStream)
- IPC_MESSAGE_HANDLER(PluginMsg_SetContentAreaFocus, OnSetContentAreaFocus)
-#if defined(OS_MACOSX)
- IPC_MESSAGE_HANDLER(PluginMsg_SetWindowFocus, OnSetWindowFocus)
- IPC_MESSAGE_HANDLER(PluginMsg_ContainerHidden, OnContainerHidden)
- IPC_MESSAGE_HANDLER(PluginMsg_ContainerShown, OnContainerShown)
- IPC_MESSAGE_HANDLER(PluginMsg_WindowFrameChanged, OnWindowFrameChanged)
- IPC_MESSAGE_HANDLER(PluginMsg_ImeCompositionCompleted,
- OnImeCompositionCompleted)
-#endif
- IPC_MESSAGE_HANDLER(PluginMsg_DidReceiveManualResponse,
- OnDidReceiveManualResponse)
- IPC_MESSAGE_HANDLER(PluginMsg_DidReceiveManualData, OnDidReceiveManualData)
- IPC_MESSAGE_HANDLER(PluginMsg_DidFinishManualLoading,
- OnDidFinishManualLoading)
- IPC_MESSAGE_HANDLER(PluginMsg_DidManualLoadFail, OnDidManualLoadFail)
- IPC_MESSAGE_HANDLER(PluginMsg_InstallMissingPlugin, OnInstallMissingPlugin)
- IPC_MESSAGE_HANDLER(PluginMsg_HandleURLRequestReply,
- OnHandleURLRequestReply)
- IPC_MESSAGE_HANDLER(PluginMsg_HTTPRangeRequestReply,
- OnHTTPRangeRequestReply)
-#if defined(OS_MACOSX)
- IPC_MESSAGE_HANDLER(PluginMsg_SetFakeAcceleratedSurfaceWindowHandle,
- OnSetFakeAcceleratedSurfaceWindowHandle)
-#endif
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
-
- if (!in_destructor_)
- Release();
-
- DCHECK(handled);
- return handled;
-}
-
-bool WebPluginDelegateStub::Send(IPC::Message* msg) {
- return channel_->Send(msg);
-}
-
-void WebPluginDelegateStub::OnInit(const PluginMsg_Init_Params& params,
- bool* result) {
- page_url_ = params.page_url;
- content::GetContentClient()->SetActiveURL(page_url_);
-
- *result = false;
- if (params.arg_names.size() != params.arg_values.size()) {
- NOTREACHED();
- return;
- }
-
- const CommandLine& command_line = *CommandLine::ForCurrentProcess();
- FilePath path =
- command_line.GetSwitchValuePath(switches::kPluginPath);
-
- gfx::PluginWindowHandle parent = gfx::kNullPluginWindow;
-#if defined(OS_WIN)
- parent = gfx::NativeViewFromId(params.containing_window);
-#elif defined(OS_LINUX)
- // This code is disabled, See issue 17110.
- // The problem is that the XID can change at arbitrary times (e.g. when the
- // tab is detached then reattached), so we need to be able to track these
- // changes, and let the PluginInstance know.
- // PluginThread::current()->Send(new PluginProcessHostMsg_MapNativeViewId(
- // params.containing_window, &parent));
-#endif
-
- webplugin_ = new WebPluginProxy(
- channel_, instance_id_, page_url_, params.containing_window,
- params.host_render_view_routing_id);
- delegate_ = webkit::npapi::WebPluginDelegateImpl::Create(
- path, mime_type_, parent);
- if (delegate_) {
- webplugin_->set_delegate(delegate_);
- *result = delegate_->Initialize(params.url,
- params.arg_names,
- params.arg_values,
- webplugin_,
- params.load_manually);
- }
-}
-
-void WebPluginDelegateStub::OnWillSendRequest(int id, const GURL& url,
- int http_status_code) {
- WebPluginResourceClient* client = webplugin_->GetResourceClient(id);
- if (!client)
- return;
-
- client->WillSendRequest(url, http_status_code);
-}
-
-void WebPluginDelegateStub::OnDidReceiveResponse(
- const PluginMsg_DidReceiveResponseParams& params) {
- WebPluginResourceClient* client = webplugin_->GetResourceClient(params.id);
- if (!client)
- return;
-
- client->DidReceiveResponse(params.mime_type,
- params.headers,
- params.expected_length,
- params.last_modified,
- params.request_is_seekable);
-}
-
-void WebPluginDelegateStub::OnDidReceiveData(int id,
- const std::vector<char>& buffer,
- int data_offset) {
- WebPluginResourceClient* client = webplugin_->GetResourceClient(id);
- if (!client)
- return;
-
- client->DidReceiveData(&buffer.front(), static_cast<int>(buffer.size()),
- data_offset);
-}
-
-void WebPluginDelegateStub::OnDidFinishLoading(int id) {
- WebPluginResourceClient* client = webplugin_->GetResourceClient(id);
- if (!client)
- return;
-
- client->DidFinishLoading();
-}
-
-void WebPluginDelegateStub::OnDidFail(int id) {
- WebPluginResourceClient* client = webplugin_->GetResourceClient(id);
- if (!client)
- return;
-
- client->DidFail();
-}
-
-void WebPluginDelegateStub::OnDidFinishLoadWithReason(
- const GURL& url, int reason, int notify_id) {
- delegate_->DidFinishLoadWithReason(url, reason, notify_id);
-}
-
-void WebPluginDelegateStub::OnSetFocus(bool focused) {
- delegate_->SetFocus(focused);
-}
-
-void WebPluginDelegateStub::OnHandleInputEvent(
- const WebKit::WebInputEvent *event,
- bool* handled,
- WebCursor* cursor) {
- WebCursorInfo cursor_info;
- *handled = delegate_->HandleInputEvent(*event, &cursor_info);
- cursor->InitFromCursorInfo(cursor_info);
-}
-
-void WebPluginDelegateStub::OnPaint(const gfx::Rect& damaged_rect) {
- webplugin_->Paint(damaged_rect);
-}
-
-void WebPluginDelegateStub::OnDidPaint() {
- webplugin_->DidPaint();
-}
-
-void WebPluginDelegateStub::OnPrint(base::SharedMemoryHandle* shared_memory,
- uint32* size) {
-#if defined(OS_WIN)
- scoped_ptr<printing::NativeMetafile> metafile(
- printing::NativeMetafileFactory::CreateMetafile());
- if (!metafile->CreateDc(NULL, NULL)) {
- NOTREACHED();
- return;
- }
- HDC hdc = metafile->context();
- skia::PlatformDevice::InitializeDC(hdc);
- delegate_->Print(hdc);
- if (!metafile->Close()) {
- NOTREACHED();
- return;
- }
-
- *size = metafile->GetDataSize();
- DCHECK(*size);
- base::SharedMemory shared_buf;
- CreateSharedBuffer(*size, &shared_buf, shared_memory);
-
- // Retrieve a copy of the data.
- bool success = metafile->GetData(shared_buf.memory(), *size);
- DCHECK(success);
-#else
- // TODO(port): plugin printing.
- NOTIMPLEMENTED();
-#endif
-}
-
-void WebPluginDelegateStub::OnUpdateGeometry(
- const PluginMsg_UpdateGeometry_Param& param) {
- webplugin_->UpdateGeometry(
- param.window_rect, param.clip_rect,
- param.windowless_buffer, param.background_buffer,
- param.transparent
-#if defined(OS_MACOSX)
- ,
- param.ack_key
-#endif
- );
-}
-
-void WebPluginDelegateStub::OnGetPluginScriptableObject(int* route_id) {
- NPObject* object = delegate_->GetPluginScriptableObject();
- if (!object) {
- *route_id = MSG_ROUTING_NONE;
- return;
- }
-
- *route_id = channel_->GenerateRouteID();
- // The stub will delete itself when the proxy tells it that it's released, or
- // otherwise when the channel is closed.
- new NPObjectStub(
- object, channel_.get(), *route_id, webplugin_->containing_window(),
- page_url_);
-
- // Release ref added by GetPluginScriptableObject (our stub holds its own).
- WebBindings::releaseObject(object);
-}
-
-void WebPluginDelegateStub::OnSendJavaScriptStream(const GURL& url,
- const std::string& result,
- bool success,
- int notify_id) {
- delegate_->SendJavaScriptStream(url, result, success, notify_id);
-}
-
-void WebPluginDelegateStub::OnSetContentAreaFocus(bool has_focus) {
- if (delegate_)
- delegate_->SetContentAreaHasFocus(has_focus);
-}
-
-#if defined(OS_MACOSX)
-void WebPluginDelegateStub::OnSetWindowFocus(bool has_focus) {
- if (delegate_)
- delegate_->SetWindowHasFocus(has_focus);
-}
-
-void WebPluginDelegateStub::OnContainerHidden() {
- if (delegate_)
- delegate_->SetContainerVisibility(false);
-}
-
-void WebPluginDelegateStub::OnContainerShown(gfx::Rect window_frame,
- gfx::Rect view_frame,
- bool has_focus) {
- if (delegate_) {
- delegate_->WindowFrameChanged(window_frame, view_frame);
- delegate_->SetContainerVisibility(true);
- delegate_->SetWindowHasFocus(has_focus);
- }
-}
-
-void WebPluginDelegateStub::OnWindowFrameChanged(const gfx::Rect& window_frame,
- const gfx::Rect& view_frame) {
- if (delegate_)
- delegate_->WindowFrameChanged(window_frame, view_frame);
-}
-
-void WebPluginDelegateStub::OnImeCompositionCompleted(const string16& text) {
- if (delegate_)
- delegate_->ImeCompositionCompleted(text);
-}
-#endif // OS_MACOSX
-
-void WebPluginDelegateStub::OnDidReceiveManualResponse(
- const GURL& url,
- const PluginMsg_DidReceiveResponseParams& params) {
- delegate_->DidReceiveManualResponse(url, params.mime_type, params.headers,
- params.expected_length,
- params.last_modified);
-}
-
-void WebPluginDelegateStub::OnDidReceiveManualData(
- const std::vector<char>& buffer) {
- delegate_->DidReceiveManualData(&buffer.front(),
- static_cast<int>(buffer.size()));
-}
-
-void WebPluginDelegateStub::OnDidFinishManualLoading() {
- delegate_->DidFinishManualLoading();
-}
-
-void WebPluginDelegateStub::OnDidManualLoadFail() {
- delegate_->DidManualLoadFail();
-}
-
-void WebPluginDelegateStub::OnInstallMissingPlugin() {
- delegate_->InstallMissingPlugin();
-}
-
-void WebPluginDelegateStub::CreateSharedBuffer(
- uint32 size,
- base::SharedMemory* shared_buf,
- base::SharedMemoryHandle* remote_handle) {
- if (!shared_buf->CreateAndMapAnonymous(size)) {
- NOTREACHED();
- shared_buf->Close();
- return;
- }
-
-#if defined(OS_WIN)
- BOOL result = DuplicateHandle(GetCurrentProcess(),
- shared_buf->handle(),
- channel_->renderer_handle(),
- remote_handle, 0, FALSE,
- DUPLICATE_SAME_ACCESS);
- DCHECK_NE(result, 0);
-
- // If the calling function's shared_buf is on the stack, its destructor will
- // close the shared memory buffer handle. This is fine since we already
- // duplicated the handle to the renderer process so it will stay "alive".
-#else
- // TODO(port): this should use TransportDIB.
- NOTIMPLEMENTED();
-#endif
-}
-
-void WebPluginDelegateStub::OnHandleURLRequestReply(
- unsigned long resource_id, const GURL& url, int notify_id) {
- WebPluginResourceClient* resource_client =
- delegate_->CreateResourceClient(resource_id, url, notify_id);
- webplugin_->OnResourceCreated(resource_id, resource_client);
-}
-
-void WebPluginDelegateStub::OnHTTPRangeRequestReply(
- unsigned long resource_id, int range_request_id) {
- WebPluginResourceClient* resource_client =
- delegate_->CreateSeekableResourceClient(resource_id, range_request_id);
- webplugin_->OnResourceCreated(resource_id, resource_client);
-}
-
-#if defined(OS_MACOSX)
-void WebPluginDelegateStub::OnSetFakeAcceleratedSurfaceWindowHandle(
- gfx::PluginWindowHandle window) {
- delegate_->set_windowed_handle(window);
-}
-#endif
-