summaryrefslogtreecommitdiffstats
path: root/webkit/glue/webkitclient_impl.cc
diff options
context:
space:
mode:
authornsylvain@chromium.org <nsylvain@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-11 04:03:41 +0000
committernsylvain@chromium.org <nsylvain@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-11 04:03:41 +0000
commit85c4eafd31af67b19e55fbb2ed8bc17b1f068ddd (patch)
tree621753f01944b97fa288e15cda185ac3dffb921e /webkit/glue/webkitclient_impl.cc
parent3d392a6fd21a84a4eae5cc340242219f5062b46d (diff)
downloadchromium_src-85c4eafd31af67b19e55fbb2ed8bc17b1f068ddd.zip
chromium_src-85c4eafd31af67b19e55fbb2ed8bc17b1f068ddd.tar.gz
chromium_src-85c4eafd31af67b19e55fbb2ed8bc17b1f068ddd.tar.bz2
Modify our webkit code to make sure it does not call into
glue directly. Everything now goes through webkitclient. This is the first step to be able to split webkit in its own dll. Review URL: http://codereview.chromium.org/196051 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25967 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/webkitclient_impl.cc')
-rw-r--r--webkit/glue/webkitclient_impl.cc155
1 files changed, 154 insertions, 1 deletions
diff --git a/webkit/glue/webkitclient_impl.cc b/webkit/glue/webkitclient_impl.cc
index ddd213d..4dce4df 100644
--- a/webkit/glue/webkitclient_impl.cc
+++ b/webkit/glue/webkitclient_impl.cc
@@ -2,6 +2,13 @@
// source code is governed by a BSD-style license that can be found in the
// LICENSE file.
+#include "config.h"
+
+#include "FrameView.h"
+#include "ScrollView.h"
+#include <wtf/Assertions.h>
+#undef LOG
+
#include "webkit/glue/webkitclient_impl.h"
#include "base/file_path.h"
@@ -13,21 +20,59 @@
#include "base/trace_event.h"
#include "grit/webkit_resources.h"
#include "grit/webkit_strings.h"
+#include "webkit/api/public/WebCursorInfo.h"
#include "webkit/api/public/WebData.h"
+#include "webkit/api/public/WebFrameClient.h"
#include "webkit/api/public/WebPluginListBuilder.h"
+#include "webkit/api/public/WebScreenInfo.h"
#include "webkit/api/public/WebString.h"
+#include "webkit/glue/chrome_client_impl.h"
+#include "webkit/glue/glue_util.h"
+#include "webkit/glue/plugins/plugin_instance.h"
#include "webkit/glue/webkit_glue.h"
#include "webkit/glue/webplugininfo.h"
#include "webkit/glue/weburlloader_impl.h"
+#include "webkit/glue/webview_impl.h"
+#include "webkit/glue/webworkerclient_impl.h"
using WebKit::WebApplicationCacheHost;
using WebKit::WebApplicationCacheHostClient;
+using WebKit::WebCursorInfo;
using WebKit::WebData;
using WebKit::WebLocalizedString;
using WebKit::WebPluginListBuilder;
using WebKit::WebString;
using WebKit::WebThemeEngine;
using WebKit::WebURLLoader;
+using WebKit::WebWidgetClient;
+
+namespace {
+
+ChromeClientImpl* ToChromeClient(WebCore::Widget* widget) {
+ WebCore::FrameView* view;
+ if (widget->isFrameView()) {
+ view = static_cast<WebCore::FrameView*>(widget);
+ } else if (widget->parent() && widget->parent()->isFrameView()) {
+ view = static_cast<WebCore::FrameView*>(widget->parent());
+ } else {
+ return NULL;
+ }
+
+ WebCore::Page* page = view->frame() ? view->frame()->page() : NULL;
+ if (!page)
+ return NULL;
+
+ return static_cast<ChromeClientImpl*>(page->chrome()->client());
+}
+
+WebWidgetClient* ToWebWidgetClient(WebCore::Widget* widget) {
+ ChromeClientImpl* chrome_client = ToChromeClient(widget);
+ if (!chrome_client || !chrome_client->webview())
+ return NULL;
+ return chrome_client->webview()->delegate();
+}
+
+}
namespace webkit_glue {
@@ -309,4 +354,112 @@ bool WebKitClientImpl::makeAllDirectories(
return file_util::CreateDirectory(FilePath(file_path));
}
-} // namespace webkit_glue
+//--------------------------------------------------------------------------
+
+// These are temporary methods that the WebKit layer can use to call to the
+// Glue layer. Once the Glue layer moves entirely into the WebKit layer, these
+// methods will be deleted.
+
+WebKit::WebMediaPlayer* WebKitClientImpl::createWebMediaPlayer(
+ WebKit::WebMediaPlayerClient* client, WebCore::Frame* frame) {
+ WebFrameImpl* webframe = WebFrameImpl::FromFrame(frame);
+ if (!webframe->client())
+ return NULL;
+
+ return webframe->client()->createMediaPlayer(webframe, client);
+}
+
+void WebKitClientImpl::setCursorForPlugin(
+ const WebKit::WebCursorInfo& cursor_info, WebCore::Frame* frame) {
+ WebCore::Page* page = frame->page();
+ if (!page)
+ return;
+
+ ChromeClientImpl* chrome_client =
+ static_cast<ChromeClientImpl*>(page->chrome()->client());
+
+ // A windowless plugin can change the cursor in response to the WM_MOUSEMOVE
+ // event. We need to reflect the changed cursor in the frame view as the
+ // mouse is moved in the boundaries of the windowless plugin.
+ chrome_client->SetCursorForPlugin(cursor_info);
+}
+
+void WebKitClientImpl::notifyJSOutOfMemory(WebCore::Frame* frame) {
+ if (!frame)
+ return;
+
+ WebFrameImpl* webframe = WebFrameImpl::FromFrame(frame);
+ if (!webframe->client())
+ return;
+ webframe->client()->didExhaustMemoryAvailableForScript(webframe);
+}
+
+bool WebKitClientImpl::popupsAllowed(NPP npp) {
+ bool popups_allowed = false;
+ if (npp) {
+ NPAPI::PluginInstance* plugin_instance =
+ reinterpret_cast<NPAPI::PluginInstance*>(npp->ndata);
+ if (plugin_instance)
+ popups_allowed = plugin_instance->popups_allowed();
+ }
+ return popups_allowed;
+}
+
+WebCore::String WebKitClientImpl::uiResourceProtocol() {
+ return StdStringToString(webkit_glue::GetUIResourceProtocol());
+}
+
+int WebKitClientImpl::screenDepth(WebCore::Widget* widget) {
+ WebKit::WebWidgetClient* client = ToWebWidgetClient(widget);
+ if (!client)
+ return 0;
+ return client->screenInfo().depth;
+}
+
+int WebKitClientImpl::screenDepthPerComponent(WebCore::Widget* widget) {
+ WebKit::WebWidgetClient* client = ToWebWidgetClient(widget);
+ if (!client)
+ return 0;
+ return client->screenInfo().depthPerComponent;
+}
+
+bool WebKitClientImpl::screenIsMonochrome(WebCore::Widget* widget) {
+ WebKit::WebWidgetClient* client = ToWebWidgetClient(widget);
+ if (!client)
+ return false;
+ return client->screenInfo().isMonochrome;
+}
+
+WebCore::IntRect WebKitClientImpl::screenRect(WebCore::Widget* widget) {
+ WebKit::WebWidgetClient* client = ToWebWidgetClient(widget);
+ if (!client)
+ return WebCore::IntRect();
+ return ToIntRect(client->screenInfo().rect);
+}
+
+WebCore::IntRect WebKitClientImpl::screenAvailableRect(
+ WebCore::Widget* widget) {
+ WebKit::WebWidgetClient* client = ToWebWidgetClient(widget);
+ if (!client)
+ return WebCore::IntRect();
+ return ToIntRect(client->screenInfo().availableRect);
+}
+
+void WebKitClientImpl::widgetSetCursor(WebCore::Widget* widget,
+ const WebCore::Cursor& cursor) {
+ ChromeClientImpl* chrome_client = ToChromeClient(widget);
+ if (chrome_client)
+ chrome_client->SetCursor(CursorToWebCursorInfo(cursor));
+}
+
+void WebKitClientImpl::widgetSetFocus(WebCore::Widget* widget) {
+ ChromeClientImpl* chrome_client = ToChromeClient(widget);
+ if (chrome_client)
+ chrome_client->focus();
+}
+
+WebCore::WorkerContextProxy* WebKitClientImpl::createWorkerContextProxy(
+ WebCore::Worker* worker) {
+ return WebWorkerClientImpl::createWorkerContextProxy(worker);
+}
+} // namespace webkit_glue \ No newline at end of file