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

Unified Diff: chrome/renderer/pepper_plugin_delegate_impl.cc

Issue 6685072: Move a bunch more random files from chrome\renderer to content\renderer. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 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
« no previous file with comments | « chrome/renderer/pepper_plugin_delegate_impl.h ('k') | chrome/renderer/render_view.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/pepper_plugin_delegate_impl.cc
===================================================================
--- chrome/renderer/pepper_plugin_delegate_impl.cc (revision 78620)
+++ chrome/renderer/pepper_plugin_delegate_impl.cc (working copy)
@@ -1,959 +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/renderer/pepper_plugin_delegate_impl.h"
-
-#include <cmath>
-#include <queue>
-
-#include "app/surface/transport_dib.h"
-#include "base/callback.h"
-#include "base/file_path.h"
-#include "base/logging.h"
-#include "base/scoped_ptr.h"
-#include "base/string_split.h"
-#include "base/task.h"
-#include "base/time.h"
-#include "chrome/common/pepper_plugin_registry.h"
-#include "chrome/common/render_messages.h"
-#include "chrome/common/render_messages_params.h"
-#include "chrome/renderer/pepper_platform_context_3d_impl.h"
-#include "chrome/renderer/render_thread.h"
-#include "chrome/renderer/render_view.h"
-#include "content/common/child_process_messages.h"
-#include "content/common/child_thread.h"
-#include "content/common/file_system/file_system_dispatcher.h"
-#include "content/common/pepper_file_messages.h"
-#include "content/common/pepper_messages.h"
-#include "content/renderer/audio_message_filter.h"
-#include "content/renderer/command_buffer_proxy.h"
-#include "content/renderer/ggl.h"
-#include "content/renderer/gpu_channel_host.h"
-#include "content/renderer/webgraphicscontext3d_command_buffer_impl.h"
-#include "content/renderer/webplugin_delegate_proxy.h"
-#include "grit/locale_settings.h"
-#include "ipc/ipc_channel_handle.h"
-#include "ppapi/c/dev/pp_video_dev.h"
-#include "ppapi/c/pp_errors.h"
-#include "ppapi/c/private/ppb_flash.h"
-#include "ppapi/c/private/ppb_flash_net_connector.h"
-#include "ppapi/proxy/host_dispatcher.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebFileChooserCompletion.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebFileChooserParams.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/gfx/size.h"
-#include "webkit/fileapi/file_system_callback_dispatcher.h"
-#include "webkit/glue/context_menu.h"
-#include "webkit/plugins/npapi/webplugin.h"
-#include "webkit/plugins/ppapi/file_path.h"
-#include "webkit/plugins/ppapi/ppb_file_io_impl.h"
-#include "webkit/plugins/ppapi/plugin_module.h"
-#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
-#include "webkit/plugins/ppapi/ppb_flash_impl.h"
-#include "webkit/plugins/ppapi/ppb_flash_net_connector_impl.h"
-
-using WebKit::WebView;
-
-namespace {
-
-const int32 kDefaultCommandBufferSize = 1024 * 1024;
-
-// Implements the Image2D using a TransportDIB.
-class PlatformImage2DImpl
- : public webkit::ppapi::PluginDelegate::PlatformImage2D {
- public:
- // This constructor will take ownership of the dib pointer.
- // On Mac, we assume that the dib is cached by the browser, so on destruction
- // we'll tell the browser to free it.
- PlatformImage2DImpl(int width, int height, TransportDIB* dib)
- : width_(width),
- height_(height),
- dib_(dib) {
- }
-
-#if defined(OS_MACOSX)
- // On Mac, we have to tell the browser to free the transport DIB.
- virtual ~PlatformImage2DImpl() {
- if (dib_.get()) {
- RenderThread::current()->Send(
- new ViewHostMsg_FreeTransportDIB(dib_->id()));
- }
- }
-#endif
-
- virtual skia::PlatformCanvas* Map() {
- return dib_->GetPlatformCanvas(width_, height_);
- }
-
- virtual intptr_t GetSharedMemoryHandle(uint32* byte_count) const {
- *byte_count = dib_->size();
-#if defined(OS_WIN)
- return reinterpret_cast<intptr_t>(dib_->handle());
-#elif defined(OS_MACOSX)
- return static_cast<intptr_t>(dib_->handle().fd);
-#elif defined(OS_LINUX)
- return static_cast<intptr_t>(dib_->handle());
-#endif
- }
-
- virtual TransportDIB* GetTransportDIB() const {
- return dib_.get();
- }
-
- private:
- int width_;
- int height_;
- scoped_ptr<TransportDIB> dib_;
-
- DISALLOW_COPY_AND_ASSIGN(PlatformImage2DImpl);
-};
-
-
-class PlatformAudioImpl
- : public webkit::ppapi::PluginDelegate::PlatformAudio,
- public AudioMessageFilter::Delegate,
- public base::RefCountedThreadSafe<PlatformAudioImpl> {
- public:
- explicit PlatformAudioImpl(scoped_refptr<AudioMessageFilter> filter)
- : client_(NULL), filter_(filter), stream_id_(0),
- main_message_loop_(MessageLoop::current()) {
- DCHECK(filter_);
- }
-
- virtual ~PlatformAudioImpl() {
- // Make sure we have been shut down. Warning: this will usually happen on
- // the I/O thread!
- DCHECK_EQ(0, stream_id_);
- DCHECK(!client_);
- }
-
- // Initialize this audio context. StreamCreated() will be called when the
- // stream is created.
- bool Initialize(uint32_t sample_rate, uint32_t sample_count,
- webkit::ppapi::PluginDelegate::PlatformAudio::Client* client);
-
- // PlatformAudio implementation (called on main thread).
- virtual bool StartPlayback();
- virtual bool StopPlayback();
- virtual void ShutDown();
-
- private:
- // I/O thread backends to above functions.
- void InitializeOnIOThread(
- const ViewHostMsg_Audio_CreateStream_Params& params);
- void StartPlaybackOnIOThread();
- void StopPlaybackOnIOThread();
- void ShutDownOnIOThread();
-
- virtual void OnRequestPacket(AudioBuffersState buffers_state) {
- LOG(FATAL) << "Should never get OnRequestPacket in PlatformAudioImpl";
- }
-
- virtual void OnStateChanged(const ViewMsg_AudioStreamState_Params& state) {}
-
- virtual void OnCreated(base::SharedMemoryHandle handle, uint32 length) {
- LOG(FATAL) << "Should never get OnCreated in PlatformAudioImpl";
- }
-
- virtual void OnLowLatencyCreated(base::SharedMemoryHandle handle,
- base::SyncSocket::Handle socket_handle,
- uint32 length);
-
- virtual void OnVolume(double volume) {}
-
- // The client to notify when the stream is created. THIS MUST ONLY BE
- // ACCESSED ON THE MAIN THREAD.
- webkit::ppapi::PluginDelegate::PlatformAudio::Client* client_;
-
- // MessageFilter used to send/receive IPC. THIS MUST ONLY BE ACCESSED ON THE
- // I/O thread except to send messages and get the message loop.
- scoped_refptr<AudioMessageFilter> filter_;
-
- // Our ID on the MessageFilter. THIS MUST ONLY BE ACCESSED ON THE I/O THREAD
- // or else you could race with the initialize function which sets it.
- int32 stream_id_;
-
- MessageLoop* main_message_loop_;
-
- DISALLOW_COPY_AND_ASSIGN(PlatformAudioImpl);
-};
-
-bool PlatformAudioImpl::Initialize(
- uint32_t sample_rate, uint32_t sample_count,
- webkit::ppapi::PluginDelegate::PlatformAudio::Client* client) {
-
- DCHECK(client);
- // Make sure we don't call init more than once.
- DCHECK_EQ(0, stream_id_);
-
- client_ = client;
-
- ViewHostMsg_Audio_CreateStream_Params params;
- params.params.format = AudioParameters::AUDIO_PCM_LINEAR;
- params.params.channels = 2;
- params.params.sample_rate = sample_rate;
- params.params.bits_per_sample = 16;
- params.params.samples_per_packet = sample_count;
-
- filter_->message_loop()->PostTask(FROM_HERE,
- NewRunnableMethod(this, &PlatformAudioImpl::InitializeOnIOThread,
- params));
- return true;
-}
-
-bool PlatformAudioImpl::StartPlayback() {
- if (filter_) {
- filter_->message_loop()->PostTask(FROM_HERE,
- NewRunnableMethod(this, &PlatformAudioImpl::StartPlaybackOnIOThread));
- return true;
- }
- return false;
-}
-
-bool PlatformAudioImpl::StopPlayback() {
- if (filter_) {
- filter_->message_loop()->PostTask(FROM_HERE,
- NewRunnableMethod(this, &PlatformAudioImpl::StopPlaybackOnIOThread));
- return true;
- }
- return false;
-}
-
-void PlatformAudioImpl::ShutDown() {
- // Called on the main thread to stop all audio callbacks. We must only change
- // the client on the main thread, and the delegates from the I/O thread.
- client_ = NULL;
- filter_->message_loop()->PostTask(FROM_HERE,
- NewRunnableMethod(this, &PlatformAudioImpl::ShutDownOnIOThread));
-}
-
-void PlatformAudioImpl::InitializeOnIOThread(
- const ViewHostMsg_Audio_CreateStream_Params& params) {
- stream_id_ = filter_->AddDelegate(this);
- filter_->Send(new ViewHostMsg_CreateAudioStream(0, stream_id_, params, true));
-}
-
-void PlatformAudioImpl::StartPlaybackOnIOThread() {
- if (stream_id_)
- filter_->Send(new ViewHostMsg_PlayAudioStream(0, stream_id_));
-}
-
-void PlatformAudioImpl::StopPlaybackOnIOThread() {
- if (stream_id_)
- filter_->Send(new ViewHostMsg_PauseAudioStream(0, stream_id_));
-}
-
-void PlatformAudioImpl::ShutDownOnIOThread() {
- // Make sure we don't call shutdown more than once.
- if (!stream_id_)
- return;
-
- filter_->Send(new ViewHostMsg_CloseAudioStream(0, stream_id_));
- filter_->RemoveDelegate(stream_id_);
- stream_id_ = 0;
-
- Release(); // Release for the delegate, balances out the reference taken in
- // PepperPluginDelegateImpl::CreateAudio.
-}
-
-void PlatformAudioImpl::OnLowLatencyCreated(
- base::SharedMemoryHandle handle, base::SyncSocket::Handle socket_handle,
- uint32 length) {
-#if defined(OS_WIN)
- DCHECK(handle);
- DCHECK(socket_handle);
-#else
- DCHECK_NE(-1, handle.fd);
- DCHECK_NE(-1, socket_handle);
-#endif
- DCHECK(length);
-
- if (MessageLoop::current() == main_message_loop_) {
- // Must dereference the client only on the main thread. Shutdown may have
- // occurred while the request was in-flight, so we need to NULL check.
- if (client_)
- client_->StreamCreated(handle, length, socket_handle);
- } else {
- main_message_loop_->PostTask(FROM_HERE,
- NewRunnableMethod(this, &PlatformAudioImpl::OnLowLatencyCreated,
- handle, socket_handle, length));
- }
-}
-
-// Implements the VideoDecoder.
-class PlatformVideoDecoderImpl
- : public webkit::ppapi::PluginDelegate::PlatformVideoDecoder {
- public:
- PlatformVideoDecoderImpl()
- : input_buffer_size_(0),
- next_dib_id_(0),
- dib_(NULL) {
- memset(&decoder_config_, 0, sizeof(decoder_config_));
- memset(&flush_callback_, 0, sizeof(flush_callback_));
- }
-
- virtual bool Init(const PP_VideoDecoderConfig_Dev& decoder_config) {
- decoder_config_ = decoder_config;
- input_buffer_size_ = 1024 << 4;
-
- // Allocate the transport DIB.
- TransportDIB* dib = TransportDIB::Create(input_buffer_size_,
- next_dib_id_++);
- if (!dib)
- return false;
-
- // TODO(wjia): Create video decoder in GPU process.
- // Meanwhile, delete |dib| to free the resource.
- delete dib;
-
- return true;
- }
-
- virtual bool Decode(PP_VideoCompressedDataBuffer_Dev& input_buffer) {
- // TODO(wjia): Implement me!
- NOTIMPLEMENTED();
-
- input_buffers_.push(&input_buffer);
-
- // Copy input data to dib_ and send it to GPU video decoder.
-
- return false;
- }
-
- virtual int32_t Flush(PP_CompletionCallback& callback) {
- // TODO(wjia): Implement me!
- NOTIMPLEMENTED();
-
- // Do nothing if there is a flush pending.
- if (flush_callback_.func)
- return PP_ERROR_BADARGUMENT;
-
- flush_callback_ = callback;
-
- // Call GPU video decoder to flush.
-
- return PP_ERROR_WOULDBLOCK;
- }
-
- virtual bool ReturnUncompressedDataBuffer(
- PP_VideoUncompressedDataBuffer_Dev& buffer) {
- // TODO(wjia): Implement me!
- NOTIMPLEMENTED();
-
- // Deliver the buffer to GPU video decoder.
-
- return false;
- }
-
- void OnFlushDone() {
- if (!flush_callback_.func)
- return;
-
- flush_callback_.func(flush_callback_.user_data, PP_OK);
- flush_callback_.func = NULL;
- }
-
- virtual intptr_t GetSharedMemoryHandle() const {
- return reinterpret_cast<intptr_t>(dib_.get());
- }
-
- private:
- size_t input_buffer_size_;
- int next_dib_id_;
- scoped_ptr<TransportDIB> dib_;
- PP_VideoDecoderConfig_Dev decoder_config_;
- std::queue<PP_VideoCompressedDataBuffer_Dev*> input_buffers_;
- PP_CompletionCallback flush_callback_;
-
- DISALLOW_COPY_AND_ASSIGN(PlatformVideoDecoderImpl);
-};
-
-class DispatcherWrapper
- : public webkit::ppapi::PluginDelegate::OutOfProcessProxy {
- public:
- DispatcherWrapper() {}
- virtual ~DispatcherWrapper() {}
-
- bool Init(base::ProcessHandle plugin_process_handle,
- IPC::ChannelHandle channel_handle,
- PP_Module pp_module,
- pp::proxy::Dispatcher::GetInterfaceFunc local_get_interface);
-
- // OutOfProcessProxy implementation.
- virtual const void* GetProxiedInterface(const char* name) {
- return dispatcher_->GetProxiedInterface(name);
- }
- virtual void AddInstance(PP_Instance instance) {
- pp::proxy::HostDispatcher::SetForInstance(instance, dispatcher_.get());
- }
- virtual void RemoveInstance(PP_Instance instance) {
- pp::proxy::HostDispatcher::RemoveForInstance(instance);
- }
-
- private:
- scoped_ptr<pp::proxy::HostDispatcher> dispatcher_;
-};
-
-bool DispatcherWrapper::Init(
- base::ProcessHandle plugin_process_handle,
- IPC::ChannelHandle channel_handle,
- PP_Module pp_module,
- pp::proxy::Dispatcher::GetInterfaceFunc local_get_interface) {
- dispatcher_.reset(new pp::proxy::HostDispatcher(
- plugin_process_handle, pp_module, local_get_interface));
-
- if (!dispatcher_->InitWithChannel(PepperPluginRegistry::GetInstance(),
- channel_handle, true)) {
- dispatcher_.reset();
- return false;
- }
- return true;
-}
-
-} // namespace
-
-PepperPluginDelegateImpl::PepperPluginDelegateImpl(RenderView* render_view)
- : render_view_(render_view),
- has_saved_context_menu_action_(false),
- saved_context_menu_action_(0),
- id_generator_(0) {
-}
-
-PepperPluginDelegateImpl::~PepperPluginDelegateImpl() {
-}
-
-scoped_refptr<webkit::ppapi::PluginModule>
-PepperPluginDelegateImpl::CreatePepperPlugin(const FilePath& path) {
- // See if a module has already been loaded for this plugin.
- scoped_refptr<webkit::ppapi::PluginModule> module =
- PepperPluginRegistry::GetInstance()->GetLiveModule(path);
- if (module)
- return module;
-
- // In-process plugins will have always been created up-front to avoid the
- // sandbox restrictions. So gettin here implies it doesn't exist or should
- // be out of process.
- const PepperPluginInfo* info =
- PepperPluginRegistry::GetInstance()->GetInfoForPlugin(path);
- if (!info || !info->is_out_of_process)
- return module; // Return the NULL module.
-
- // Out of process: have the browser start the plugin process for us.
- base::ProcessHandle plugin_process_handle = base::kNullProcessHandle;
- IPC::ChannelHandle channel_handle;
- render_view_->Send(new ViewHostMsg_OpenChannelToPepperPlugin(
- path, &plugin_process_handle, &channel_handle));
- if (channel_handle.name.empty()) {
- // Couldn't be initialized.
- return scoped_refptr<webkit::ppapi::PluginModule>();
- }
-
- // Create a new HostDispatcher for the proxying, and hook it to a new
- // PluginModule. Note that AddLiveModule must be called before any early
- // returns since the module's destructor will remove itself.
- module = new webkit::ppapi::PluginModule(info->name,
- PepperPluginRegistry::GetInstance());
- PepperPluginRegistry::GetInstance()->AddLiveModule(path, module);
- scoped_ptr<DispatcherWrapper> dispatcher(new DispatcherWrapper);
- if (!dispatcher->Init(
- plugin_process_handle, channel_handle,
- module->pp_module(),
- webkit::ppapi::PluginModule::GetLocalGetInterfaceFunc()))
- return scoped_refptr<webkit::ppapi::PluginModule>();
- module->InitAsProxied(dispatcher.release());
- return module;
-}
-
-void PepperPluginDelegateImpl::ViewInitiatedPaint() {
- // Notify all of our instances that we started painting. This is used for
- // internal bookkeeping only, so we know that the set can not change under
- // us.
- for (std::set<webkit::ppapi::PluginInstance*>::iterator i =
- active_instances_.begin();
- i != active_instances_.end(); ++i)
- (*i)->ViewInitiatedPaint();
-}
-
-void PepperPluginDelegateImpl::ViewFlushedPaint() {
- // Notify all instances that we painted. This will call into the plugin, and
- // we it may ask to close itself as a result. This will, in turn, modify our
- // set, possibly invalidating the iterator. So we iterate on a copy that
- // won't change out from under us.
- std::set<webkit::ppapi::PluginInstance*> plugins = active_instances_;
- for (std::set<webkit::ppapi::PluginInstance*>::iterator i = plugins.begin();
- i != plugins.end(); ++i) {
- // The copy above makes sure our iterator is never invalid if some plugins
- // are destroyed. But some plugin may decide to close all of its views in
- // response to a paint in one of them, so we need to make sure each one is
- // still "current" before using it.
- //
- // It's possible that a plugin was destroyed, but another one was created
- // with the same address. In this case, we'll call ViewFlushedPaint on that
- // new plugin. But that's OK for this particular case since we're just
- // notifying all of our instances that the view flushed, and the new one is
- // one of our instances.
- //
- // What about the case where a new one is created in a callback at a new
- // address and we don't issue the callback? We're still OK since this
- // callback is used for flush callbacks and we could not have possibly
- // started a new paint (ViewInitiatedPaint) for the new plugin while
- // processing a previous paint for an existing one.
- if (active_instances_.find(*i) != active_instances_.end())
- (*i)->ViewFlushedPaint();
- }
-}
-
-webkit::ppapi::PluginInstance*
-PepperPluginDelegateImpl::GetBitmapForOptimizedPluginPaint(
- const gfx::Rect& paint_bounds,
- TransportDIB** dib,
- gfx::Rect* location,
- gfx::Rect* clip) {
- for (std::set<webkit::ppapi::PluginInstance*>::iterator i =
- active_instances_.begin();
- i != active_instances_.end(); ++i) {
- webkit::ppapi::PluginInstance* instance = *i;
- if (instance->GetBitmapForOptimizedPluginPaint(
- paint_bounds, dib, location, clip))
- return *i;
- }
- return NULL;
-}
-
-void PepperPluginDelegateImpl::InstanceCreated(
- webkit::ppapi::PluginInstance* instance) {
- active_instances_.insert(instance);
-
- // Set the initial focus.
- instance->SetContentAreaFocus(render_view_->has_focus());
-}
-
-void PepperPluginDelegateImpl::InstanceDeleted(
- webkit::ppapi::PluginInstance* instance) {
- active_instances_.erase(instance);
-}
-
-webkit::ppapi::PluginDelegate::PlatformImage2D*
-PepperPluginDelegateImpl::CreateImage2D(int width, int height) {
- uint32 buffer_size = width * height * 4;
-
- // Allocate the transport DIB and the PlatformCanvas pointing to it.
-#if defined(OS_MACOSX)
- // On the Mac, shared memory has to be created in the browser in order to
- // work in the sandbox. Do this by sending a message to the browser
- // requesting a TransportDIB (see also
- // chrome/renderer/webplugin_delegate_proxy.cc, method
- // WebPluginDelegateProxy::CreateBitmap() for similar code). The TransportDIB
- // is cached in the browser, and is freed (in typical cases) by the
- // PlatformImage2DImpl's destructor.
- TransportDIB::Handle dib_handle;
- IPC::Message* msg = new ViewHostMsg_AllocTransportDIB(buffer_size,
- true,
- &dib_handle);
- if (!RenderThread::current()->Send(msg))
- return NULL;
- if (!TransportDIB::is_valid(dib_handle))
- return NULL;
-
- TransportDIB* dib = TransportDIB::Map(dib_handle);
-#else
- static int next_dib_id = 0;
- TransportDIB* dib = TransportDIB::Create(buffer_size, next_dib_id++);
- if (!dib)
- return NULL;
-#endif
-
- return new PlatformImage2DImpl(width, height, dib);
-}
-
-webkit::ppapi::PluginDelegate::PlatformContext3D*
- PepperPluginDelegateImpl::CreateContext3D() {
-#ifdef ENABLE_GPU
- // If accelerated compositing of plugins is disabled, fail to create a 3D
- // context, because it won't be visible. This allows graceful fallback in the
- // modules.
- if (!render_view_->webkit_preferences().accelerated_plugins_enabled)
- return NULL;
- WebGraphicsContext3DCommandBufferImpl* context =
- static_cast<WebGraphicsContext3DCommandBufferImpl*>(
- render_view_->webview()->graphicsContext3D());
- if (!context)
- return NULL;
-
- ggl::Context* parent_context = context->context();
- if (!parent_context)
- return NULL;
-
- return new PlatformContext3DImpl(parent_context);
-#else
- return NULL;
-#endif
-}
-
-webkit::ppapi::PluginDelegate::PlatformVideoDecoder*
-PepperPluginDelegateImpl::CreateVideoDecoder(
- const PP_VideoDecoderConfig_Dev& decoder_config) {
- scoped_ptr<PlatformVideoDecoderImpl> decoder(new PlatformVideoDecoderImpl());
-
- if (!decoder->Init(decoder_config))
- return NULL;
-
- return decoder.release();
-}
-
-void PepperPluginDelegateImpl::NumberOfFindResultsChanged(int identifier,
- int total,
- bool final_result) {
- render_view_->reportFindInPageMatchCount(identifier, total, final_result);
-}
-
-void PepperPluginDelegateImpl::SelectedFindResultChanged(int identifier,
- int index) {
- render_view_->reportFindInPageSelection(
- identifier, index + 1, WebKit::WebRect());
-}
-
-webkit::ppapi::PluginDelegate::PlatformAudio*
-PepperPluginDelegateImpl::CreateAudio(
- uint32_t sample_rate, uint32_t sample_count,
- webkit::ppapi::PluginDelegate::PlatformAudio::Client* client) {
- scoped_refptr<PlatformAudioImpl> audio(
- new PlatformAudioImpl(render_view_->audio_message_filter()));
- if (audio->Initialize(sample_rate, sample_count, client)) {
- // Balanced by Release invoked in PlatformAudioImpl::ShutDownOnIOThread().
- return audio.release();
- } else {
- return NULL;
- }
-}
-
-bool PepperPluginDelegateImpl::RunFileChooser(
- const WebKit::WebFileChooserParams& params,
- WebKit::WebFileChooserCompletion* chooser_completion) {
- return render_view_->runFileChooser(params, chooser_completion);
-}
-
-bool PepperPluginDelegateImpl::AsyncOpenFile(const FilePath& path,
- int flags,
- AsyncOpenFileCallback* callback) {
- int message_id = id_generator_++;
- DCHECK(!messages_waiting_replies_.Lookup(message_id));
- messages_waiting_replies_.AddWithID(callback, message_id);
- IPC::Message* msg = new ViewHostMsg_AsyncOpenFile(
- render_view_->routing_id(), path, flags, message_id);
- return render_view_->Send(msg);
-}
-
-void PepperPluginDelegateImpl::OnAsyncFileOpened(
- base::PlatformFileError error_code,
- base::PlatformFile file,
- int message_id) {
- AsyncOpenFileCallback* callback =
- messages_waiting_replies_.Lookup(message_id);
- DCHECK(callback);
- messages_waiting_replies_.Remove(message_id);
- callback->Run(error_code, file);
- delete callback;
-}
-
-void PepperPluginDelegateImpl::OnSetFocus(bool has_focus) {
- for (std::set<webkit::ppapi::PluginInstance*>::iterator i =
- active_instances_.begin();
- i != active_instances_.end(); ++i)
- (*i)->SetContentAreaFocus(has_focus);
-}
-
-bool PepperPluginDelegateImpl::OpenFileSystem(
- const GURL& url,
- fileapi::FileSystemType type,
- long long size,
- fileapi::FileSystemCallbackDispatcher* dispatcher) {
- FileSystemDispatcher* file_system_dispatcher =
- ChildThread::current()->file_system_dispatcher();
- return file_system_dispatcher->OpenFileSystem(
- url, type, size, true /* create */, dispatcher);
-}
-
-bool PepperPluginDelegateImpl::MakeDirectory(
- const FilePath& path,
- bool recursive,
- fileapi::FileSystemCallbackDispatcher* dispatcher) {
- FileSystemDispatcher* file_system_dispatcher =
- ChildThread::current()->file_system_dispatcher();
- return file_system_dispatcher->Create(
- path, false, true, recursive, dispatcher);
-}
-
-bool PepperPluginDelegateImpl::Query(
- const FilePath& path,
- fileapi::FileSystemCallbackDispatcher* dispatcher) {
- FileSystemDispatcher* file_system_dispatcher =
- ChildThread::current()->file_system_dispatcher();
- return file_system_dispatcher->ReadMetadata(path, dispatcher);
-}
-
-bool PepperPluginDelegateImpl::Touch(
- const FilePath& path,
- const base::Time& last_access_time,
- const base::Time& last_modified_time,
- fileapi::FileSystemCallbackDispatcher* dispatcher) {
- FileSystemDispatcher* file_system_dispatcher =
- ChildThread::current()->file_system_dispatcher();
- return file_system_dispatcher->TouchFile(path, last_access_time,
- last_modified_time, dispatcher);
-}
-
-bool PepperPluginDelegateImpl::Delete(
- const FilePath& path,
- fileapi::FileSystemCallbackDispatcher* dispatcher) {
- FileSystemDispatcher* file_system_dispatcher =
- ChildThread::current()->file_system_dispatcher();
- return file_system_dispatcher->Remove(path, false /* recursive */,
- dispatcher);
-}
-
-bool PepperPluginDelegateImpl::Rename(
- const FilePath& file_path,
- const FilePath& new_file_path,
- fileapi::FileSystemCallbackDispatcher* dispatcher) {
- FileSystemDispatcher* file_system_dispatcher =
- ChildThread::current()->file_system_dispatcher();
- return file_system_dispatcher->Move(file_path, new_file_path, dispatcher);
-}
-
-bool PepperPluginDelegateImpl::ReadDirectory(
- const FilePath& directory_path,
- fileapi::FileSystemCallbackDispatcher* dispatcher) {
- FileSystemDispatcher* file_system_dispatcher =
- ChildThread::current()->file_system_dispatcher();
- return file_system_dispatcher->ReadDirectory(directory_path, dispatcher);
-}
-
-base::PlatformFileError PepperPluginDelegateImpl::OpenFile(
- const webkit::ppapi::PepperFilePath& path,
- int flags,
- base::PlatformFile* file) {
- IPC::PlatformFileForTransit transit_file;
- base::PlatformFileError error;
- IPC::Message* msg = new PepperFileMsg_OpenFile(
- path, flags, &error, &transit_file);
- if (!render_view_->Send(msg)) {
- *file = base::kInvalidPlatformFileValue;
- return base::PLATFORM_FILE_ERROR_FAILED;
- }
- *file = IPC::PlatformFileForTransitToPlatformFile(transit_file);
- return error;
-}
-
-base::PlatformFileError PepperPluginDelegateImpl::RenameFile(
- const webkit::ppapi::PepperFilePath& from_path,
- const webkit::ppapi::PepperFilePath& to_path) {
- base::PlatformFileError error;
- IPC::Message* msg = new PepperFileMsg_RenameFile(from_path, to_path, &error);
- if (!render_view_->Send(msg))
- return base::PLATFORM_FILE_ERROR_FAILED;
- return error;
-}
-
-base::PlatformFileError PepperPluginDelegateImpl::DeleteFileOrDir(
- const webkit::ppapi::PepperFilePath& path,
- bool recursive) {
- base::PlatformFileError error;
- IPC::Message* msg = new PepperFileMsg_DeleteFileOrDir(
- path, recursive, &error);
- if (!render_view_->Send(msg))
- return base::PLATFORM_FILE_ERROR_FAILED;
- return error;
-}
-
-base::PlatformFileError PepperPluginDelegateImpl::CreateDir(
- const webkit::ppapi::PepperFilePath& path) {
- base::PlatformFileError error;
- IPC::Message* msg = new PepperFileMsg_CreateDir(path, &error);
- if (!render_view_->Send(msg))
- return base::PLATFORM_FILE_ERROR_FAILED;
- return error;
-}
-
-base::PlatformFileError PepperPluginDelegateImpl::QueryFile(
- const webkit::ppapi::PepperFilePath& path,
- base::PlatformFileInfo* info) {
- base::PlatformFileError error;
- IPC::Message* msg = new PepperFileMsg_QueryFile(path, info, &error);
- if (!render_view_->Send(msg))
- return base::PLATFORM_FILE_ERROR_FAILED;
- return error;
-}
-
-base::PlatformFileError PepperPluginDelegateImpl::GetDirContents(
- const webkit::ppapi::PepperFilePath& path,
- webkit::ppapi::DirContents* contents) {
- base::PlatformFileError error;
- IPC::Message* msg = new PepperFileMsg_GetDirContents(path, contents, &error);
- if (!render_view_->Send(msg))
- return base::PLATFORM_FILE_ERROR_FAILED;
- return error;
-}
-
-scoped_refptr<base::MessageLoopProxy>
-PepperPluginDelegateImpl::GetFileThreadMessageLoopProxy() {
- return RenderThread::current()->GetFileThreadMessageLoopProxy();
-}
-
-int32_t PepperPluginDelegateImpl::ConnectTcp(
- webkit::ppapi::PPB_Flash_NetConnector_Impl* connector,
- const char* host,
- uint16_t port) {
- int request_id = pending_connect_tcps_.Add(
- new scoped_refptr<webkit::ppapi::PPB_Flash_NetConnector_Impl>(connector));
- IPC::Message* msg =
- new PepperMsg_ConnectTcp(render_view_->routing_id(),
- request_id,
- std::string(host),
- port);
- if (!render_view_->Send(msg)) {
- pending_connect_tcps_.Remove(request_id);
- return PP_ERROR_FAILED;
- }
-
- return PP_ERROR_WOULDBLOCK;
-}
-
-int32_t PepperPluginDelegateImpl::ConnectTcpAddress(
- webkit::ppapi::PPB_Flash_NetConnector_Impl* connector,
- const struct PP_Flash_NetAddress* addr) {
- int request_id = pending_connect_tcps_.Add(
- new scoped_refptr<webkit::ppapi::PPB_Flash_NetConnector_Impl>(connector));
- IPC::Message* msg =
- new PepperMsg_ConnectTcpAddress(render_view_->routing_id(),
- request_id,
- *addr);
- if (!render_view_->Send(msg)) {
- pending_connect_tcps_.Remove(request_id);
- return PP_ERROR_FAILED;
- }
-
- return PP_ERROR_WOULDBLOCK;
-}
-
-void PepperPluginDelegateImpl::OnConnectTcpACK(
- int request_id,
- base::PlatformFile socket,
- const PP_Flash_NetAddress& local_addr,
- const PP_Flash_NetAddress& remote_addr) {
- scoped_refptr<webkit::ppapi::PPB_Flash_NetConnector_Impl> connector =
- *pending_connect_tcps_.Lookup(request_id);
- pending_connect_tcps_.Remove(request_id);
-
- connector->CompleteConnectTcp(socket, local_addr, remote_addr);
-}
-
-int32_t PepperPluginDelegateImpl::ShowContextMenu(
- webkit::ppapi::PPB_Flash_Menu_Impl* menu,
- const gfx::Point& position) {
- int request_id = pending_context_menus_.Add(
- new scoped_refptr<webkit::ppapi::PPB_Flash_Menu_Impl>(menu));
-
- ContextMenuParams params;
- params.x = position.x();
- params.y = position.y();
- params.custom_context.is_pepper_menu = true;
- params.custom_context.request_id = request_id;
- params.custom_items = menu->menu_data();
-
- IPC::Message* msg = new ViewHostMsg_ContextMenu(render_view_->routing_id(),
- params);
- if (!render_view_->Send(msg)) {
- pending_context_menus_.Remove(request_id);
- return PP_ERROR_FAILED;
- }
-
- return PP_ERROR_WOULDBLOCK;
-}
-
-void PepperPluginDelegateImpl::OnContextMenuClosed(
- const webkit_glue::CustomContextMenuContext& custom_context) {
- int request_id = custom_context.request_id;
- scoped_refptr<webkit::ppapi::PPB_Flash_Menu_Impl> menu =
- *pending_context_menus_.Lookup(request_id);
- if (!menu) {
- NOTREACHED() << "CompleteShowContextMenu() called twice for the same menu.";
- return;
- }
- pending_context_menus_.Remove(request_id);
-
- if (has_saved_context_menu_action_) {
- menu->CompleteShow(PP_OK, saved_context_menu_action_);
- has_saved_context_menu_action_ = false;
- saved_context_menu_action_ = 0;
- } else {
- menu->CompleteShow(PP_ERROR_USERCANCEL, 0);
- }
-}
-
-void PepperPluginDelegateImpl::OnCustomContextMenuAction(
- const webkit_glue::CustomContextMenuContext& custom_context,
- unsigned action) {
- // Just save the action.
- DCHECK(!has_saved_context_menu_action_);
- has_saved_context_menu_action_ = true;
- saved_context_menu_action_ = action;
-}
-
-webkit::ppapi::FullscreenContainer*
-PepperPluginDelegateImpl::CreateFullscreenContainer(
- webkit::ppapi::PluginInstance* instance) {
- return render_view_->CreatePepperFullscreenContainer(instance);
-}
-
-gfx::Size PepperPluginDelegateImpl::GetScreenSize() {
- WebKit::WebScreenInfo info = render_view_->screenInfo();
- return gfx::Size(info.rect.width, info.rect.height);
-}
-
-std::string PepperPluginDelegateImpl::GetDefaultEncoding() {
- // TODO(brettw) bug 56615: Somehow get the preference for the default
- // encoding here rather than using the global default for the UI language.
- return l10n_util::GetStringUTF8(IDS_DEFAULT_ENCODING);
-}
-
-void PepperPluginDelegateImpl::ZoomLimitsChanged(double minimum_factor,
- double maximum_factor) {
- double minimum_level = WebView::zoomFactorToZoomLevel(minimum_factor);
- double maximum_level = WebView::zoomFactorToZoomLevel(maximum_factor);
- render_view_->webview()->zoomLimitsChanged(minimum_level, maximum_level);
-}
-
-std::string PepperPluginDelegateImpl::ResolveProxy(const GURL& url) {
- int net_error;
- std::string proxy_result;
- RenderThread::current()->Send(
- new ChildProcessHostMsg_ResolveProxy(url, &net_error, &proxy_result));
- return proxy_result;
-}
-
-void PepperPluginDelegateImpl::DidStartLoading() {
- render_view_->DidStartLoadingForPlugin();
-}
-
-void PepperPluginDelegateImpl::DidStopLoading() {
- render_view_->DidStopLoadingForPlugin();
-}
-
-void PepperPluginDelegateImpl::SetContentRestriction(int restrictions) {
- render_view_->Send(new ViewHostMsg_UpdateContentRestrictions(
- render_view_->routing_id(), restrictions));
-}
-
-void PepperPluginDelegateImpl::HasUnsupportedFeature() {
- render_view_->Send(new ViewHostMsg_PDFHasUnsupportedFeature(
- render_view_->routing_id()));
-}
-
-P2PSocketDispatcher* PepperPluginDelegateImpl::GetP2PSocketDispatcher() {
- return render_view_->p2p_socket_dispatcher();
-}
« no previous file with comments | « chrome/renderer/pepper_plugin_delegate_impl.h ('k') | chrome/renderer/render_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698