diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-08 20:33:01 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-08 20:33:01 +0000 |
commit | 0fdbf8c361ea8b3a51c9c81b9e90da145d357a3c (patch) | |
tree | d9816c6046fab903f2695301e13eded622422626 /webkit | |
parent | f51ffcf1fa06f12c96cc3bcb6c0659c65371fe81 (diff) | |
download | chromium_src-0fdbf8c361ea8b3a51c9c81b9e90da145d357a3c.zip chromium_src-0fdbf8c361ea8b3a51c9c81b9e90da145d357a3c.tar.gz chromium_src-0fdbf8c361ea8b3a51c9c81b9e90da145d357a3c.tar.bz2 |
Chrome side of making RenderView not special case PluginDocument and making the WebPlugin API more like WebView.
Review URL: http://codereview.chromium.org/2827047
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51886 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/glue/plugins/pepper_plugin_delegate.h | 8 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_plugin_instance.cc | 33 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_plugin_instance.h | 15 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_webplugin_impl.cc | 35 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_webplugin_impl.h | 10 | ||||
-rw-r--r-- | webkit/glue/plugins/webplugin_delegate.h | 12 | ||||
-rw-r--r-- | webkit/glue/plugins/webplugin_impl.cc | 49 | ||||
-rw-r--r-- | webkit/glue/plugins/webplugin_impl.h | 47 |
8 files changed, 175 insertions, 34 deletions
diff --git a/webkit/glue/plugins/pepper_plugin_delegate.h b/webkit/glue/plugins/pepper_plugin_delegate.h index c00a9b3..ffc9d52 100644 --- a/webkit/glue/plugins/pepper_plugin_delegate.h +++ b/webkit/glue/plugins/pepper_plugin_delegate.h @@ -44,6 +44,14 @@ class PluginDelegate { // The caller will own the pointer returned from this. virtual PlatformImage2D* CreateImage2D(int width, int height) = 0; + + // Notifies that the number of find results has changed. + virtual void DidChangeNumberOfFindResults(int identifier, + int total, + bool final_result) = 0; + + // Notifies that the index of the currently selected item has been updated. + virtual void DidChangeSelectedFindResult(int identifier, int index) = 0; }; } // namespace pepper diff --git a/webkit/glue/plugins/pepper_plugin_instance.cc b/webkit/glue/plugins/pepper_plugin_instance.cc index 65863f1..7ddbcaf 100644 --- a/webkit/glue/plugins/pepper_plugin_instance.cc +++ b/webkit/glue/plugins/pepper_plugin_instance.cc @@ -86,7 +86,8 @@ PluginInstance::PluginInstance(PluginDelegate* delegate, module_(module), instance_interface_(instance_interface), container_(NULL), - full_frame_(false) { + full_frame_(false), + find_identifier_(-1) { DCHECK(delegate); module_->InstanceCreated(this); delegate_->InstanceCreated(this); @@ -245,4 +246,34 @@ void PluginInstance::ViewFlushedPaint() { device_context_2d_->ViewFlushedPaint(); } +string16 PluginInstance::GetSelectedText(bool html) { + // TODO: implement me + return string16(); +} + +void PluginInstance::Zoom(float factor, bool text_only) { + // TODO: implement me +} + +bool PluginInstance::SupportsFind() { + // TODO: implement me + return false; +} + +void PluginInstance::StartFind(const string16& search_text, + bool case_sensitive, + int identifier) { + find_identifier_ = identifier; + // TODO: implement me +} + +void PluginInstance::SelectFindResult(bool forward) { + // TODO: implement me +} + +void PluginInstance::StopFind() { + find_identifier_ = -1; + // TODO: implement me +} + } // namespace pepper diff --git a/webkit/glue/plugins/pepper_plugin_instance.h b/webkit/glue/plugins/pepper_plugin_instance.h index 017a1e8..8de9090 100644 --- a/webkit/glue/plugins/pepper_plugin_instance.h +++ b/webkit/glue/plugins/pepper_plugin_instance.h @@ -10,6 +10,7 @@ #include "base/basictypes.h" #include "base/ref_counted.h" +#include "base/string16.h" #include "gfx/rect.h" #include "third_party/ppapi/c/pp_instance.h" #include "third_party/ppapi/c/pp_resource.h" @@ -56,6 +57,8 @@ class PluginInstance : public base::RefCounted<PluginInstance> { const gfx::Rect& position() const { return position_; } const gfx::Rect& clip() const { return clip_; } + int find_identifier() const { return find_identifier_; } + PP_Instance GetPPInstance(); // Paints the current backing store to the web page. @@ -93,6 +96,15 @@ class PluginInstance : public base::RefCounted<PluginInstance> { void ViewInitiatedPaint(); void ViewFlushedPaint(); + string16 GetSelectedText(bool html); + void Zoom(float factor, bool text_only); + bool SupportsFind(); + void StartFind(const string16& search_text, + bool case_sensitive, + int identifier); + void SelectFindResult(bool forward); + void StopFind(); + private: PluginDelegate* delegate_; scoped_refptr<PluginModule> module_; @@ -118,6 +130,9 @@ class PluginInstance : public base::RefCounted<PluginInstance> { // The current device context for painting in 2D. scoped_refptr<DeviceContext2D> device_context_2d_; + // The id of the current find operation, or -1 if none is in process. + int find_identifier_; + DISALLOW_COPY_AND_ASSIGN(PluginInstance); }; diff --git a/webkit/glue/plugins/pepper_webplugin_impl.cc b/webkit/glue/plugins/pepper_webplugin_impl.cc index 2bddcc0..c2cae30 100644 --- a/webkit/glue/plugins/pepper_webplugin_impl.cc +++ b/webkit/glue/plugins/pepper_webplugin_impl.cc @@ -18,6 +18,7 @@ using WebKit::WebCanvas; using WebKit::WebPluginContainer; using WebKit::WebPluginParams; using WebKit::WebRect; +using WebKit::WebString; using WebKit::WebVector; namespace pepper { @@ -144,4 +145,38 @@ void WebPluginImpl::didFailLoadingFrameRequest( const WebKit::WebURLError& error) { } +bool WebPluginImpl::hasSelection() const { + return !selectionAsText().isEmpty(); +} + +WebKit::WebString WebPluginImpl::selectionAsText() const { + return instance_->GetSelectedText(false); +} + +WebKit::WebString WebPluginImpl::selectionAsMarkup() const { + return instance_->GetSelectedText(true); +} + +void WebPluginImpl::setZoomFactor(float scale, bool text_only) { + instance_->Zoom(scale, text_only); +} + +bool WebPluginImpl::supportsFind() { + return instance_->SupportsFind(); +} + +void WebPluginImpl::startFind(const WebString& search_text, + bool case_sensitive, + int identifier) { + instance_->StartFind(search_text, case_sensitive, identifier); +} + +void WebPluginImpl::selectFindResult(bool forward) { + instance_->SelectFindResult(forward); +} + +void WebPluginImpl::stopFind() { + instance_->StopFind(); +} + } // namespace pepper diff --git a/webkit/glue/plugins/pepper_webplugin_impl.h b/webkit/glue/plugins/pepper_webplugin_impl.h index 040a67b..0b1827d 100644 --- a/webkit/glue/plugins/pepper_webplugin_impl.h +++ b/webkit/glue/plugins/pepper_webplugin_impl.h @@ -60,6 +60,16 @@ class WebPluginImpl : public WebKit::WebPlugin { virtual void didFailLoadingFrameRequest(const WebKit::WebURL& url, void* notify_data, const WebKit::WebURLError& error); + virtual bool hasSelection() const; + virtual WebKit::WebString selectionAsText() const; + virtual WebKit::WebString selectionAsMarkup() const; + virtual void setZoomFactor(float scale, bool text_only); + virtual bool supportsFind(); + virtual void startFind(const WebKit::WebString& search_text, + bool case_sensitive, + int identifier); + virtual void selectFindResult(bool forward); + virtual void stopFind(); struct InitData { scoped_refptr<PluginModule> module; diff --git a/webkit/glue/plugins/webplugin_delegate.h b/webkit/glue/plugins/webplugin_delegate.h index f496d52..3b04d24 100644 --- a/webkit/glue/plugins/webplugin_delegate.h +++ b/webkit/glue/plugins/webplugin_delegate.h @@ -143,7 +143,7 @@ class WebPluginDelegate : public WebPlugin2DDeviceDelegate, // See WebPluginContainerImpl's description of the interface. virtual bool SupportsFind() { return false; } - virtual void StartFind(const std::string& search_text, + virtual void StartFind(const string16& search_text, bool case_sensitive, int identifier) {} virtual void SelectFindResult(bool forward) {} @@ -156,11 +156,11 @@ class WebPluginDelegate : public WebPlugin2DDeviceDelegate, // Used for zooming of full page plugins. 0 means reset, while -1 means zoom // out and +1 means zoom in. - virtual void Zoom(int factor) {} - // Copy the selected text. - virtual void Copy() {} - // Gets the selected UTF8 text, if any. - virtual string16 GetSelectedText() { return string16(); } + virtual void SetZoomFactor(float scale, bool text_only) {} + // Gets the selected text, if any. + virtual bool HasSelection() const { return false; } + virtual string16 GetSelectionAsText() const { return string16(); } + virtual string16 GetSelectionAsMarkup() const { return string16(); } }; } // namespace webkit_glue diff --git a/webkit/glue/plugins/webplugin_impl.cc b/webkit/glue/plugins/webplugin_impl.cc index 96f7b4b..d7ba1a4 100644 --- a/webkit/glue/plugins/webplugin_impl.cc +++ b/webkit/glue/plugins/webplugin_impl.cc @@ -2,11 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "webkit/glue/plugins/webplugin_impl.h" + #include "base/logging.h" #include "base/message_loop.h" #include "base/string_util.h" #include "base/utf_string_conversions.h" #include "gfx/rect.h" +#include "googleurl/src/gurl.h" #include "net/base/escape.h" #include "net/base/net_errors.h" #include "skia/ext/platform_canvas.h" @@ -35,9 +38,7 @@ #include "webkit/glue/plugins/plugin_host.h" #include "webkit/glue/plugins/plugin_instance.h" #include "webkit/glue/plugins/webplugin_delegate.h" -#include "webkit/glue/plugins/webplugin_impl.h" #include "webkit/glue/plugins/webplugin_page_delegate.h" -#include "googleurl/src/gurl.h" using WebKit::WebCanvas; using WebKit::WebConsoleMessage; @@ -422,11 +423,51 @@ void WebPluginImpl::printEnd() { delegate_->PrintEnd(); } -WebString WebPluginImpl::selectedText() { +bool WebPluginImpl::hasSelection() const { + if (!delegate_) + return false; + + return delegate_->HasSelection(); +} + +WebKit::WebString WebPluginImpl::selectionAsText() const { + if (!delegate_) + return WebString(); + + return delegate_->GetSelectionAsText(); +} + +WebKit::WebString WebPluginImpl::selectionAsMarkup() const { if (!delegate_) return WebString(); - return delegate_->GetSelectedText(); + return delegate_->GetSelectionAsMarkup(); +} + +void WebPluginImpl::setZoomFactor(float scale, bool text_only) { + if (delegate_) + delegate_->SetZoomFactor(scale, text_only); +} + +bool WebPluginImpl::supportsFind() { + return delegate_ && delegate_->SupportsFind(); +} + +void WebPluginImpl::startFind(const WebString& search_text, + bool case_sensitive, + int identifier) { + if (delegate_) + delegate_->StartFind(search_text, case_sensitive, identifier); +} + +void WebPluginImpl::selectFindResult(bool forward) { + if (delegate_) + delegate_->SelectFindResult(forward); +} + +void WebPluginImpl::stopFind() { + if (delegate_) + delegate_->StopFind(); } diff --git a/webkit/glue/plugins/webplugin_impl.h b/webkit/glue/plugins/webplugin_impl.h index 8436ae7..033dcb3 100644 --- a/webkit/glue/plugins/webplugin_impl.h +++ b/webkit/glue/plugins/webplugin_impl.h @@ -93,20 +93,40 @@ class WebPluginImpl : public WebPlugin, int printer_dpi); virtual bool printPage(int page_number, WebKit::WebCanvas* canvas); virtual void printEnd(); - virtual WebKit::WebString selectedText(); + virtual bool hasSelection() const; + virtual WebKit::WebString selectionAsText() const; + virtual WebKit::WebString selectionAsMarkup() const; + virtual void setZoomFactor(float scale, bool text_only); + virtual bool supportsFind(); + virtual void startFind(const WebKit::WebString& search_text, + bool case_sensitive, + int identifier); + virtual void selectFindResult(bool forward); + virtual void stopFind(); // WebPlugin implementation: void SetWindow(gfx::PluginWindowHandle window); - - // Whether input events should be sent to the delegate. virtual void SetAcceptsInputEvents(bool accepts) { accepts_input_events_ = accepts; } - void WillDestroyWindow(gfx::PluginWindowHandle window); #if defined(OS_WIN) void SetWindowlessPumpEvent(HANDLE pump_messages_event) { } #endif + virtual void CancelResource(unsigned long id); + virtual void Invalidate(); + virtual void InvalidateRect(const gfx::Rect& rect); + virtual NPObject* GetWindowScriptNPObject(); + virtual NPObject* GetPluginElement(); + virtual void SetCookie(const GURL& url, + const GURL& first_party_for_cookies, + const std::string& cookie); + virtual std::string GetCookies(const GURL& url, + const GURL& first_party_for_cookies); + virtual void ShowModalHTMLDialog(const GURL& url, int width, int height, + const std::string& json_arguments, + std::string* json_retval); + virtual void OnMissingPluginStatus(int status); // Given a (maybe partial) url, completes using the base url. GURL CompleteURL(const char* url); @@ -147,9 +167,6 @@ class WebPluginImpl : public WebPlugin, int notify_id, Referrer referrer_flag); - // Cancels a pending request. - void CancelResource(unsigned long id); - // Returns the next avaiable resource id. Returns 0 if the operation fails. // It may fail if the page has already been closed. unsigned long GetNextResourceId(); @@ -167,22 +184,6 @@ class WebPluginImpl : public WebPlugin, gfx::Rect GetWindowClipRect(const gfx::Rect& rect); - NPObject* GetWindowScriptNPObject(); - NPObject* GetPluginElement(); - - void SetCookie(const GURL& url, - const GURL& first_party_for_cookies, - const std::string& cookie); - std::string GetCookies(const GURL& url, - const GURL& first_party_for_cookies); - - void ShowModalHTMLDialog(const GURL& url, int width, int height, - const std::string& json_arguments, - std::string* json_retval); - void OnMissingPluginStatus(int status); - void Invalidate(); - void InvalidateRect(const gfx::Rect& rect); - // Sets the actual Widget for the plugin. void SetContainer(WebKit::WebPluginContainer* container); |