1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CONTENT_RENDERER_PEPPER_PPEPPER_WEBPLUGIN_IMPL_H_ 6#define CONTENT_RENDERER_PEPPER_PPEPPER_WEBPLUGIN_IMPL_H_ 7 8#include <string> 9#include <vector> 10 11#include "base/memory/scoped_ptr.h" 12#include "base/memory/weak_ptr.h" 13#include "base/sequenced_task_runner_helpers.h" 14#include "ppapi/c/pp_var.h" 15#include "third_party/WebKit/public/web/WebPlugin.h" 16#include "ui/gfx/rect.h" 17 18struct _NPP; 19 20namespace blink { 21struct WebPluginParams; 22struct WebPrintParams; 23} 24 25namespace content { 26 27class PepperPluginInstanceImpl; 28class PluginModule; 29class PPB_URLLoader_Impl; 30class RenderFrameImpl; 31 32class PepperWebPluginImpl : public blink::WebPlugin { 33 public: 34 PepperWebPluginImpl(PluginModule* module, 35 const blink::WebPluginParams& params, 36 RenderFrameImpl* render_frame); 37 38 PepperPluginInstanceImpl* instance() { return instance_.get(); } 39 40 // blink::WebPlugin implementation. 41 virtual blink::WebPluginContainer* container() const; 42 virtual bool initialize(blink::WebPluginContainer* container); 43 virtual void destroy(); 44 virtual v8::Local<v8::Object> v8ScriptableObject( 45 v8::Isolate* isolate) OVERRIDE; 46 virtual bool getFormValue(blink::WebString& value); 47 virtual void paint(blink::WebCanvas* canvas, const blink::WebRect& rect); 48 virtual void updateGeometry( 49 const blink::WebRect& frame_rect, 50 const blink::WebRect& clip_rect, 51 const blink::WebVector<blink::WebRect>& cut_outs_rects, 52 bool is_visible); 53 virtual void updateFocus(bool focused); 54 virtual void updateVisibility(bool visible); 55 virtual bool acceptsInputEvents(); 56 virtual bool handleInputEvent(const blink::WebInputEvent& event, 57 blink::WebCursorInfo& cursor_info); 58 virtual void didReceiveResponse(const blink::WebURLResponse& response); 59 virtual void didReceiveData(const char* data, int data_length); 60 virtual void didFinishLoading(); 61 virtual void didFailLoading(const blink::WebURLError&); 62 virtual void didFinishLoadingFrameRequest(const blink::WebURL& url, 63 void* notify_data); 64 virtual void didFailLoadingFrameRequest(const blink::WebURL& url, 65 void* notify_data, 66 const blink::WebURLError& error); 67 virtual bool hasSelection() const; 68 virtual blink::WebString selectionAsText() const; 69 virtual blink::WebString selectionAsMarkup() const; 70 virtual blink::WebURL linkAtPosition(const blink::WebPoint& position) const; 71 virtual void setZoomLevel(double level, bool text_only); 72 virtual bool startFind(const blink::WebString& search_text, 73 bool case_sensitive, 74 int identifier); 75 virtual void selectFindResult(bool forward); 76 virtual void stopFind(); 77 virtual bool supportsPaginatedPrint() OVERRIDE; 78 virtual bool isPrintScalingDisabled() OVERRIDE; 79 80 virtual int printBegin(const blink::WebPrintParams& print_params) OVERRIDE; 81 virtual bool printPage(int page_number, blink::WebCanvas* canvas) OVERRIDE; 82 virtual void printEnd() OVERRIDE; 83 84 virtual bool canRotateView() OVERRIDE; 85 virtual void rotateView(RotationType type) OVERRIDE; 86 virtual bool isPlaceholder() OVERRIDE; 87 88 private: 89 friend class base::DeleteHelper<PepperWebPluginImpl>; 90 91 virtual ~PepperWebPluginImpl(); 92 struct InitData; 93 94 scoped_ptr<InitData> init_data_; // Cleared upon successful initialization. 95 // True if the instance represents the entire document in a frame instead of 96 // being an embedded resource. 97 bool full_frame_; 98 scoped_refptr<PepperPluginInstanceImpl> instance_; 99 gfx::Rect plugin_rect_; 100 PP_Var instance_object_; 101 blink::WebPluginContainer* container_; 102 103 DISALLOW_COPY_AND_ASSIGN(PepperWebPluginImpl); 104}; 105 106} // namespace content 107 108#endif // CONTENT_RENDERER_PEPPER_PPEPPER_WEBPLUGIN_IMPL_H_ 109