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