15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#ifndef CONTENT_RENDERER_PEPPER_PPEPPER_WEBPLUGIN_IMPL_H_ 658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#define CONTENT_RENDERER_PEPPER_PPEPPER_WEBPLUGIN_IMPL_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/sequenced_task_runner_helpers.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_var.h" 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebPlugin.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)struct _NPP; 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct WebPluginParams; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct WebPrintParams; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochnamespace content { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochclass PepperPluginInstanceImpl; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PluginModule; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PPB_URLLoader_Impl; 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class RenderFrameImpl; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class PepperWebPluginImpl : public blink::WebPlugin { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 343240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch PepperWebPluginImpl(PluginModule* module, 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebPluginParams& params, 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RenderFrameImpl* render_frame); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch PepperPluginInstanceImpl* instance() { return instance_.get(); } 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // blink::WebPlugin implementation. 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual blink::WebPluginContainer* container() const; 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual bool initialize(blink::WebPluginContainer* container); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void destroy(); 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual v8::Local<v8::Object> v8ScriptableObject( 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci v8::Isolate* isolate) OVERRIDE; 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual bool getFormValue(blink::WebString& value); 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void paint(blink::WebCanvas* canvas, const blink::WebRect& rect); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void updateGeometry( 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebRect& frame_rect, 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebRect& clip_rect, 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebVector<blink::WebRect>& cut_outs_rects, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_visible); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void updateFocus(bool focused); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void updateVisibility(bool visible); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool acceptsInputEvents(); 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual bool handleInputEvent(const blink::WebInputEvent& event, 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebCursorInfo& cursor_info); 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void didReceiveResponse(const blink::WebURLResponse& response); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void didReceiveData(const char* data, int data_length); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void didFinishLoading(); 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void didFailLoading(const blink::WebURLError&); 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void didFinishLoadingFrameRequest(const blink::WebURL& url, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* notify_data); 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void didFailLoadingFrameRequest(const blink::WebURL& url, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* notify_data, 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebURLError& error); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool hasSelection() const; 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual blink::WebString selectionAsText() const; 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual blink::WebString selectionAsMarkup() const; 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual blink::WebURL linkAtPosition(const blink::WebPoint& position) const; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void setZoomLevel(double level, bool text_only); 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual bool startFind(const blink::WebString& search_text, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool case_sensitive, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int identifier); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void selectFindResult(bool forward); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void stopFind(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool supportsPaginatedPrint() OVERRIDE; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool isPrintScalingDisabled() OVERRIDE; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual int printBegin(const blink::WebPrintParams& print_params) OVERRIDE; 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual bool printPage(int page_number, blink::WebCanvas* canvas) OVERRIDE; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void printEnd() OVERRIDE; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool canRotateView() OVERRIDE; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void rotateView(RotationType type) OVERRIDE; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool isPlaceholder() OVERRIDE; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 8958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch friend class base::DeleteHelper<PepperWebPluginImpl>; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch virtual ~PepperWebPluginImpl(); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct InitData; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<InitData> init_data_; // Cleared upon successful initialization. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if the instance represents the entire document in a frame instead of 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // being an embedded resource. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool full_frame_; 9858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch scoped_refptr<PepperPluginInstanceImpl> instance_; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect plugin_rect_; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Var instance_object_; 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebPluginContainer* container_; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch DISALLOW_COPY_AND_ASSIGN(PepperWebPluginImpl); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch} // namespace content 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#endif // CONTENT_RENDERER_PEPPER_PPEPPER_WEBPLUGIN_IMPL_H_ 109