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

Unified Diff: webkit/glue/plugins/webplugin_delegate_pepper_impl.cc

Issue 291001: Moved Pepper delegate definition to chrome\renderer to allow it to use... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 2 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
« no previous file with comments | « webkit/glue/plugins/webplugin_delegate_pepper_impl.h ('k') | webkit/glue/webplugin.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/glue/plugins/webplugin_delegate_pepper_impl.cc
===================================================================
--- webkit/glue/plugins/webplugin_delegate_pepper_impl.cc (revision 29377)
+++ webkit/glue/plugins/webplugin_delegate_pepper_impl.cc (working copy)
@@ -1,395 +0,0 @@
-// Copyright (c) 2006-2008 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.
-
-#define PEPPER_APIS_ENABLED 1
-
-#include "webkit/glue/plugins/webplugin_delegate_pepper_impl.h"
-
-#include <string>
-#include <vector>
-
-#include "base/file_util.h"
-#include "base/message_loop.h"
-#include "base/process_util.h"
-#include "base/scoped_ptr.h"
-#include "base/stats_counters.h"
-#include "base/string_util.h"
-#include "webkit/api/public/WebInputEvent.h"
-#include "webkit/glue/glue_util.h"
-#include "webkit/glue/plugins/plugin_constants_win.h"
-#include "webkit/glue/plugins/plugin_instance.h"
-#include "webkit/glue/plugins/plugin_lib.h"
-#include "webkit/glue/plugins/plugin_list.h"
-#include "webkit/glue/plugins/plugin_stream_url.h"
-#include "webkit/glue/webkit_glue.h"
-
-using webkit_glue::WebPlugin;
-using webkit_glue::WebPluginDelegate;
-using webkit_glue::WebPluginResourceClient;
-using WebKit::WebCursorInfo;
-using WebKit::WebKeyboardEvent;
-using WebKit::WebInputEvent;
-using WebKit::WebMouseEvent;
-using WebKit::WebMouseWheelEvent;
-
-
-WebPluginDelegatePepperImpl* WebPluginDelegatePepperImpl::Create(
- const FilePath& filename,
- const std::string& mime_type,
- gfx::PluginWindowHandle containing_view) {
- scoped_refptr<NPAPI::PluginLib> plugin_lib =
- NPAPI::PluginLib::CreatePluginLib(filename);
- if (plugin_lib.get() == NULL)
- return NULL;
-
- NPError err = plugin_lib->NP_Initialize();
- if (err != NPERR_NO_ERROR)
- return NULL;
-
- scoped_refptr<NPAPI::PluginInstance> instance =
- plugin_lib->CreateInstance(mime_type);
- return new WebPluginDelegatePepperImpl(containing_view, instance.get());
-}
-
-bool WebPluginDelegatePepperImpl::Initialize(
- const GURL& url,
- const std::vector<std::string>& arg_names,
- const std::vector<std::string>& arg_values,
- WebPlugin* plugin,
- bool load_manually) {
- plugin_ = plugin;
-
- instance_->set_web_plugin(plugin_);
- int argc = 0;
- scoped_array<char*> argn(new char*[arg_names.size()]);
- scoped_array<char*> argv(new char*[arg_names.size()]);
- for (size_t i = 0; i < arg_names.size(); ++i) {
- argn[argc] = const_cast<char*>(arg_names[i].c_str());
- argv[argc] = const_cast<char*>(arg_values[i].c_str());
- argc++;
- }
-
- bool start_result = instance_->Start(
- url, argn.get(), argv.get(), argc, load_manually);
- if (!start_result)
- return false;
-
- // For windowless plugins we should set the containing window handle
- // as the instance window handle. This is what Safari does. Not having
- // a valid window handle causes subtle bugs with plugins which retreive
- // the window handle and validate the same. The window handle can be
- // retreived via NPN_GetValue of NPNVnetscapeWindow.
- instance_->set_window_handle(parent_);
-
- plugin_url_ = url.spec();
-
- return true;
-}
-
-void WebPluginDelegatePepperImpl::DestroyInstance() {
- if (instance_ && (instance_->npp()->ndata != NULL)) {
- // Shutdown all streams before destroying so that
- // no streams are left "in progress". Need to do
- // this before calling set_web_plugin(NULL) because the
- // instance uses the helper to do the download.
- instance_->CloseStreams();
-
- window_.window = NULL;
- instance_->NPP_SetWindow(&window_);
-
- instance_->NPP_Destroy();
-
- instance_->set_web_plugin(NULL);
-
- instance_ = 0;
- }
-}
-
-void WebPluginDelegatePepperImpl::UpdateGeometry(
- const gfx::Rect& window_rect,
- const gfx::Rect& clip_rect) {
- WindowlessUpdateGeometry(window_rect, clip_rect);
-}
-
-NPObject* WebPluginDelegatePepperImpl::GetPluginScriptableObject() {
- return instance_->GetPluginScriptableObject();
-}
-
-void WebPluginDelegatePepperImpl::DidFinishLoadWithReason(
- const GURL& url,
- NPReason reason,
- intptr_t notify_data) {
- instance()->DidFinishLoadWithReason(
- url, reason, reinterpret_cast<void*>(notify_data));
-}
-
-int WebPluginDelegatePepperImpl::GetProcessId() {
- // We are in process, so the plugin pid is this current process pid.
- return base::GetCurrentProcId();
-}
-
-void WebPluginDelegatePepperImpl::SendJavaScriptStream(
- const GURL& url,
- const std::string& result,
- bool success,
- bool notify_needed,
- intptr_t notify_data) {
- instance()->SendJavaScriptStream(url, result, success, notify_needed,
- notify_data);
-}
-
-void WebPluginDelegatePepperImpl::DidReceiveManualResponse(
- const GURL& url, const std::string& mime_type,
- const std::string& headers, uint32 expected_length, uint32 last_modified) {
- instance()->DidReceiveManualResponse(url, mime_type, headers,
- expected_length, last_modified);
-}
-
-void WebPluginDelegatePepperImpl::DidReceiveManualData(const char* buffer,
- int length) {
- instance()->DidReceiveManualData(buffer, length);
-}
-
-void WebPluginDelegatePepperImpl::DidFinishManualLoading() {
- instance()->DidFinishManualLoading();
-}
-
-void WebPluginDelegatePepperImpl::DidManualLoadFail() {
- instance()->DidManualLoadFail();
-}
-
-FilePath WebPluginDelegatePepperImpl::GetPluginPath() {
- return instance()->plugin_lib()->plugin_info().path;
-}
-
-WebPluginResourceClient* WebPluginDelegatePepperImpl::CreateResourceClient(
- int resource_id, const GURL& url, bool notify_needed,
- intptr_t notify_data, intptr_t existing_stream) {
- // Stream already exists. This typically happens for range requests
- // initiated via NPN_RequestRead.
- if (existing_stream) {
- NPAPI::PluginStream* plugin_stream =
- reinterpret_cast<NPAPI::PluginStream*>(existing_stream);
-
- return plugin_stream->AsResourceClient();
- }
-
- std::string mime_type;
- NPAPI::PluginStreamUrl *stream = instance()->CreateStream(
- resource_id, url, mime_type, notify_needed,
- reinterpret_cast<void*>(notify_data));
- return stream;
-}
-
-bool WebPluginDelegatePepperImpl::IsPluginDelegateWindow(
- gfx::NativeWindow window) {
- return false;
-}
-
-bool WebPluginDelegatePepperImpl::GetPluginNameFromWindow(
- gfx::NativeWindow window, std::wstring *plugin_name) {
- return false;
-}
-
-bool WebPluginDelegatePepperImpl::IsDummyActivationWindow(
- gfx::NativeWindow window) {
- return false;
-}
-
-WebPluginDelegatePepperImpl::WebPluginDelegatePepperImpl(
- gfx::PluginWindowHandle containing_view,
- NPAPI::PluginInstance *instance)
- : plugin_(NULL),
- instance_(instance),
- parent_(containing_view) {
- memset(&window_, 0, sizeof(window_));
-}
-
-WebPluginDelegatePepperImpl::~WebPluginDelegatePepperImpl() {
- DestroyInstance();
-}
-
-void WebPluginDelegatePepperImpl::PluginDestroyed() {
- delete this;
-}
-
-void WebPluginDelegatePepperImpl::Paint(gfx::NativeDrawingContext context, const gfx::Rect& rect) {
- NOTIMPLEMENTED();
-}
-
-void WebPluginDelegatePepperImpl::Print(gfx::NativeDrawingContext context) {
- NOTIMPLEMENTED();
-}
-
-void WebPluginDelegatePepperImpl::InstallMissingPlugin() {
- NOTIMPLEMENTED();
-}
-
-void WebPluginDelegatePepperImpl::WindowlessUpdateGeometry(
- const gfx::Rect& window_rect,
- const gfx::Rect& clip_rect) {
- // Only resend to the instance if the geometry has changed.
- if (window_rect == window_rect_ && clip_rect == clip_rect_)
- return;
-
- // We will inform the instance of this change when we call NPP_SetWindow.
- clip_rect_ = clip_rect;
- cutout_rects_.clear();
-
- if (window_rect_ != window_rect) {
- window_rect_ = window_rect;
- WindowlessSetWindow(true);
- // TODO(sehr): update the context here?
- }
-}
-
-void WebPluginDelegatePepperImpl::WindowlessPaint(
- gfx::NativeDrawingContext context,
- const gfx::Rect& damage_rect) {
- static StatsRate plugin_paint("Plugin.Paint");
- StatsScope<StatsRate> scope(plugin_paint);
- // TODO(sehr): save the context here?
-}
-
-void WebPluginDelegatePepperImpl::WindowlessSetWindow(bool force_set_window) {
- if (!instance())
- return;
-
- if (window_rect_.IsEmpty()) // wait for geometry to be set.
- return;
-
- window_.clipRect.top = clip_rect_.y();
- window_.clipRect.left = clip_rect_.x();
- window_.clipRect.bottom = clip_rect_.y() + clip_rect_.height();
- window_.clipRect.right = clip_rect_.x() + clip_rect_.width();
- window_.height = window_rect_.height();
- window_.width = window_rect_.width();
- window_.x = window_rect_.x();
- window_.y = window_rect_.y();
- window_.type = NPWindowTypeDrawable;
-
- NPError err = instance()->NPP_SetWindow(&window_);
- DCHECK(err == NPERR_NO_ERROR);
-}
-
-void WebPluginDelegatePepperImpl::SetFocus() {
- NPEvent npevent;
-
- npevent.type = NPEventType_Focus;
- npevent.size = sizeof(NPEvent);
- // TODO(sehr): what timestamp should this have?
- npevent.timeStampSeconds = 0.0;
- // Currently this API only supports gaining focus.
- npevent.u.focus.value = 1;
- instance()->NPP_HandleEvent(&npevent);
-}
-
-// Anonymous namespace for functions converting WebInputEvents to NPAPI types.
-namespace {
-NPEventTypes ConvertEventTypes(WebInputEvent::Type wetype) {
- switch (wetype) {
- case WebInputEvent::MouseDown:
- return NPEventType_MouseDown;
- case WebInputEvent::MouseUp:
- return NPEventType_MouseUp;
- case WebInputEvent::MouseMove:
- return NPEventType_MouseMove;
- case WebInputEvent::MouseEnter:
- return NPEventType_MouseEnter;
- case WebInputEvent::MouseLeave:
- return NPEventType_MouseLeave;
- case WebInputEvent::MouseWheel:
- return NPEventType_MouseWheel;
- case WebInputEvent::RawKeyDown:
- return NPEventType_RawKeyDown;
- case WebInputEvent::KeyDown:
- return NPEventType_KeyDown;
- case WebInputEvent::KeyUp:
- return NPEventType_KeyUp;
- case WebInputEvent::Char:
- return NPEventType_Char;
- case WebInputEvent::Undefined:
- default:
- return NPEventType_Undefined;
- }
-}
-
-void BuildKeyEvent(const WebInputEvent* event, NPEvent* npevent) {
- const WebKeyboardEvent* key_event =
- reinterpret_cast<const WebKeyboardEvent*>(event);
- npevent->u.key.modifier = key_event->modifiers;
- npevent->u.key.normalizedKeyCode = key_event->windowsKeyCode;
-}
-
-void BuildCharEvent(const WebInputEvent* event, NPEvent* npevent) {
- const WebKeyboardEvent* key_event =
- reinterpret_cast<const WebKeyboardEvent*>(event);
- npevent->u.character.modifier = key_event->modifiers;
- // For consistency, check that the sizes of the texts agree.
- DCHECK(sizeof(npevent->u.character.text) == sizeof(key_event->text));
- DCHECK(sizeof(npevent->u.character.unmodifiedText) ==
- sizeof(key_event->unmodifiedText));
- for (size_t i = 0; i < WebKeyboardEvent::textLengthCap; ++i) {
- npevent->u.character.text[i] = key_event->text[i];
- npevent->u.character.unmodifiedText[i] = key_event->unmodifiedText[i];
- }
-}
-
-void BuildMouseEvent(const WebInputEvent* event, NPEvent* npevent) {
- const WebMouseEvent* mouse_event =
- reinterpret_cast<const WebMouseEvent*>(event);
- npevent->u.mouse.modifier = mouse_event->modifiers;
- npevent->u.mouse.button = mouse_event->button;
- npevent->u.mouse.x = mouse_event->x;
- npevent->u.mouse.y = mouse_event->y;
- npevent->u.mouse.clickCount = mouse_event->clickCount;
-}
-
-void BuildMouseWheelEvent(const WebInputEvent* event, NPEvent* npevent) {
- const WebMouseWheelEvent* mouse_wheel_event =
- reinterpret_cast<const WebMouseWheelEvent*>(event);
- npevent->u.wheel.modifier = mouse_wheel_event->modifiers;
- npevent->u.wheel.deltaX = mouse_wheel_event->deltaX;
- npevent->u.wheel.deltaY = mouse_wheel_event->deltaY;
- npevent->u.wheel.wheelTicksX = mouse_wheel_event->wheelTicksX;
- npevent->u.wheel.wheelTicksY = mouse_wheel_event->wheelTicksY;
- npevent->u.wheel.scrollByPage = mouse_wheel_event->scrollByPage;
-}
-} // namespace
-
-bool WebPluginDelegatePepperImpl::HandleInputEvent(const WebInputEvent& event,
- WebCursorInfo* cursor_info) {
- NPEvent npevent;
-
- npevent.type = ConvertEventTypes(event.type);
- npevent.size = sizeof(NPEvent);
- npevent.timeStampSeconds = event.timeStampSeconds;
- switch (npevent.type) {
- case NPEventType_Undefined:
- return false;
- case NPEventType_MouseDown:
- case NPEventType_MouseUp:
- case NPEventType_MouseMove:
- case NPEventType_MouseEnter:
- case NPEventType_MouseLeave:
- BuildMouseEvent(&event, &npevent);
- break;
- case NPEventType_MouseWheel:
- BuildMouseWheelEvent(&event, &npevent);
- break;
- case NPEventType_RawKeyDown:
- case NPEventType_KeyDown:
- case NPEventType_KeyUp:
- BuildKeyEvent(&event, &npevent);
- case NPEventType_Char:
- BuildCharEvent(&event, &npevent);
- break;
- case NPEventType_Minimize:
- case NPEventType_Focus:
- case NPEventType_Device:
- NOTIMPLEMENTED();
- break;
- }
- return instance()->NPP_HandleEvent(&npevent) != 0;
-}
« no previous file with comments | « webkit/glue/plugins/webplugin_delegate_pepper_impl.h ('k') | webkit/glue/webplugin.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698