summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-08 20:33:01 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-08 20:33:01 +0000
commit0fdbf8c361ea8b3a51c9c81b9e90da145d357a3c (patch)
treed9816c6046fab903f2695301e13eded622422626 /webkit
parentf51ffcf1fa06f12c96cc3bcb6c0659c65371fe81 (diff)
downloadchromium_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.h8
-rw-r--r--webkit/glue/plugins/pepper_plugin_instance.cc33
-rw-r--r--webkit/glue/plugins/pepper_plugin_instance.h15
-rw-r--r--webkit/glue/plugins/pepper_webplugin_impl.cc35
-rw-r--r--webkit/glue/plugins/pepper_webplugin_impl.h10
-rw-r--r--webkit/glue/plugins/webplugin_delegate.h12
-rw-r--r--webkit/glue/plugins/webplugin_impl.cc49
-rw-r--r--webkit/glue/plugins/webplugin_impl.h47
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);