123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- /*
- * Copyright (C) 2009, 2012 Google Inc. All rights reserved.
- * Copyright (C) 2014 Opera Software ASA. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_PLUGIN_H_
- #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_PLUGIN_H_
- #include "cc/paint/paint_canvas.h"
- #include "third_party/blink/public/common/page/drag_operation.h"
- #include "third_party/blink/public/mojom/input/focus_type.mojom-shared.h"
- #include "third_party/blink/public/platform/web_string.h"
- #include "third_party/blink/public/platform/web_url.h"
- #include "third_party/blink/public/web/web_drag_status.h"
- #include "third_party/blink/public/web/web_input_method_controller.h"
- #include "v8/include/v8.h"
- namespace gfx {
- class PointF;
- } // namespace gfx
- namespace ui {
- class Cursor;
- struct ImeTextSpan;
- }
- namespace blink {
- class WebCoalescedInputEvent;
- class WebDragData;
- class WebPluginContainer;
- class WebURLResponse;
- struct WebPrintParams;
- struct WebPrintPresetOptions;
- struct WebRect;
- struct WebURLError;
- template <typename T>
- class WebVector;
- class WebPlugin {
- public:
- // Initializes the plugin using |container| to communicate with the renderer
- // code. |container| must own this plugin. |container| must not be nullptr.
- //
- // Returns true if a plugin (not necessarily this one) has been successfully
- // initialized into |container|.
- //
- // NOTE: This method is subtle. This plugin may be marked for deletion via
- // destroy() during initialization. When this occurs, container() will
- // return nullptr. Because deletions during initialize() must be
- // asynchronous, this object is still alive immediately after initialize().
- // 1) If container() == nullptr and this method returns true, this plugin
- // has been replaced by another during initialization. This new plugin
- // may be accessed via container->plugin().
- // 2) If container() == nullptr and this method returns false, this plugin
- // and the container have both been marked for deletion.
- virtual bool Initialize(WebPluginContainer*) = 0;
- // Plugins must arrange for themselves to be deleted sometime during or after
- // this method is called. This method is only called by the owning
- // WebPluginContainer.
- // The exception is if the plugin has been detached by a WebPluginContainer,
- // i.e. been replaced by another plugin. Then it must be destroyed separately.
- // Once this method has been called, container() must return nullptr.
- virtual void Destroy() = 0;
- // Returns the container that this plugin has been initialized with.
- // Must return nullptr if this plugin is scheduled for deletion.
- //
- // NOTE: This container doesn't necessarily own this plugin. For example,
- // if the container has been assigned a new plugin, then the container will
- // own the new plugin, not this old plugin.
- virtual WebPluginContainer* Container() const { return nullptr; }
- virtual v8::Local<v8::Object> V8ScriptableObject(v8::Isolate*) {
- return v8::Local<v8::Object>();
- }
- virtual bool SupportsKeyboardFocus() const { return false; }
- // Returns true if this plugin supports input method, which implements
- // setComposition(), commitText() and finishComposingText() below.
- virtual bool SupportsInputMethod() const { return false; }
- virtual bool CanProcessDrag() const { return false; }
- virtual void UpdateAllLifecyclePhases(blink::DocumentUpdateReason) = 0;
- virtual void Paint(cc::PaintCanvas*, const WebRect&) = 0;
- // Coordinates are relative to the containing window.
- virtual void UpdateGeometry(const WebRect& window_rect,
- const WebRect& clip_rect,
- const WebRect& unobscured_rect,
- bool is_visible) = 0;
- virtual void UpdateFocus(bool focused, mojom::FocusType) = 0;
- virtual void UpdateVisibility(bool) = 0;
- virtual WebInputEventResult HandleInputEvent(const WebCoalescedInputEvent&,
- ui::Cursor*) = 0;
- virtual bool HandleDragStatusUpdate(WebDragStatus,
- const WebDragData&,
- DragOperationsMask,
- const gfx::PointF& position,
- const gfx::PointF& screen_position) {
- return false;
- }
- virtual void DidReceiveResponse(const WebURLResponse&) = 0;
- virtual void DidReceiveData(const char* data, size_t data_length) = 0;
- virtual void DidFinishLoading() = 0;
- virtual void DidFailLoading(const WebURLError&) = 0;
- // Printing interface.
- // Whether the plugin supports its own paginated print. The other print
- // interface methods are called only if this method returns true.
- virtual bool SupportsPaginatedPrint() { return false; }
- // Returns true on success and sets the out parameter to the print preset
- // options for the document.
- virtual bool GetPrintPresetOptionsFromDocument(WebPrintPresetOptions*) {
- return false;
- }
- // Returns true if the plugin is a PDF plugin.
- virtual bool IsPdfPlugin() { return false; }
- // Sets up printing with the specified printParams. Returns the number of
- // pages to be printed at these settings.
- virtual int PrintBegin(const WebPrintParams& print_params) { return 0; }
- virtual void PrintPage(int page_number, cc::PaintCanvas* canvas) {}
- // Ends the print operation.
- virtual void PrintEnd() {}
- virtual bool HasSelection() const { return false; }
- virtual WebString SelectionAsText() const { return WebString(); }
- virtual WebString SelectionAsMarkup() const { return WebString(); }
- virtual bool CanEditText() const { return false; }
- virtual bool HasEditableText() const { return false; }
- virtual bool CanUndo() const { return false; }
- virtual bool CanRedo() const { return false; }
- virtual bool ExecuteEditCommand(const WebString& name) { return false; }
- virtual bool ExecuteEditCommand(const WebString& name,
- const WebString& value) {
- return false;
- }
- // Sets composition text from input method, and returns true if the
- // composition is set successfully. If |replacementRange| is not null, the
- // text inside |replacementRange| will be replaced by |text|
- virtual bool SetComposition(const WebString& text,
- const WebVector<ui::ImeTextSpan>& ime_text_spans,
- const WebRange& replacement_range,
- int selection_start,
- int selection_end) {
- return false;
- }
- // Deletes the ongoing composition if any, inserts the specified text, and
- // moves the caret according to relativeCaretPosition. If |replacementRange|
- // is not null, the text inside |replacementRange| will be replaced by |text|.
- virtual bool CommitText(const WebString& text,
- const WebVector<ui::ImeTextSpan>& ime_text_spans,
- const WebRange& replacement_range,
- int relative_caret_position) {
- return false;
- }
- // Confirms an ongoing composition; holds or moves selections accroding to
- // selectionBehavior.
- virtual bool FinishComposingText(
- WebInputMethodController::ConfirmCompositionBehavior selection_behavior) {
- return false;
- }
- // Deletes the current selection plus the specified number of characters
- // before and after the selection or caret.
- virtual void ExtendSelectionAndDelete(int before, int after) {}
- // Deletes text before and after the current cursor position, excluding the
- // selection. The lengths are supplied in UTF-16 Code Unit, not in code points
- // or in glyphs.
- virtual void DeleteSurroundingText(int before, int after) {}
- // Deletes text before and after the current cursor position, excluding the
- // selection. The lengths are supplied in code points, not in UTF-16 Code Unit
- // or in glyphs. Do nothing if there are one or more invalid surrogate pairs
- // in the requested range.
- virtual void DeleteSurroundingTextInCodePoints(int before, int after) {}
- // If the given position is over a link, returns the absolute url.
- // Otherwise an empty url is returned.
- virtual WebURL LinkAtPosition(const gfx::Point& position) const {
- return WebURL();
- }
- // Find interface.
- // Start a new search. The plugin should search for a little bit at a time so
- // that it doesn't block the thread in case of a large document. The results,
- // along with the find's identifier, should be sent asynchronously to
- // WebLocalFrameClient's reportFindInPage* methods.
- // Returns true if the search started, or false if the plugin doesn't support
- // search.
- virtual bool StartFind(const WebString& search_text,
- bool case_sensitive,
- int identifier) {
- return false;
- }
- // Tells the plugin to jump forward or backward in the list of find results.
- virtual void SelectFindResult(bool forward, int identifier) {}
- // Tells the plugin that the user has stopped the find operation.
- virtual void StopFind() {}
- // View rotation types.
- enum RotationType {
- kRotationType90Clockwise,
- kRotationType90Counterclockwise
- };
- // Whether the plugin can rotate the view of its content.
- virtual bool CanRotateView() { return false; }
- // Rotates the plugin's view of its content.
- virtual void RotateView(RotationType type) {}
- // Check whether a plugin can be interacted with. A positive return value
- // means the plugin has not loaded and hence cannot be interacted with.
- // The plugin could, however, load successfully later.
- virtual bool IsPlaceholder() { return true; }
- // Check whether a plugin failed to load, with there being no possibility of
- // it loading later.
- virtual bool IsErrorPlaceholder() { return false; }
- protected:
- virtual ~WebPlugin() = default;
- };
- } // namespace blink
- #endif // THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_PLUGIN_H_
|