summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authordarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-28 01:13:47 +0000
committerdarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-28 01:13:47 +0000
commit90a3fbb1723ba60bcf557121b7bbe80817a7533f (patch)
tree28d845ed0f1d64cdfa418f4561af4536de6f3c40 /chrome/renderer
parent41fb1d7d262e44d8561a5c4d6d7e353f638b56e8 (diff)
downloadchromium_src-90a3fbb1723ba60bcf557121b7bbe80817a7533f.zip
chromium_src-90a3fbb1723ba60bcf557121b7bbe80817a7533f.tar.gz
chromium_src-90a3fbb1723ba60bcf557121b7bbe80817a7533f.tar.bz2
Chrome side to pick up new WebKit API changes.
WebKit API now provides: - layoutTestMode - support for registering extra local URL schemes - access to the current WebKitClient WebKitClient was extended to include: - access to the default locale - access to the current time - methods to start/stop the shared timer - method to get work scheduled on the main thread - methods to access cookies - method to prefetch hostnames R=dglazkov Review URL: http://codereview.chromium.org/27276 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10665 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/chrome_plugin_host.cc6
-rw-r--r--chrome/renderer/render_thread.cc23
-rw-r--r--chrome/renderer/render_thread.h5
-rw-r--r--chrome/renderer/render_view_unittest.cc8
-rw-r--r--chrome/renderer/renderer.scons5
-rw-r--r--chrome/renderer/renderer_glue.cc29
-rw-r--r--chrome/renderer/renderer_webkitclient_impl.cc37
-rw-r--r--chrome/renderer/renderer_webkitclient_impl.h7
8 files changed, 91 insertions, 29 deletions
diff --git a/chrome/renderer/chrome_plugin_host.cc b/chrome/renderer/chrome_plugin_host.cc
index 9d437c0..9b3fea9 100644
--- a/chrome/renderer/chrome_plugin_host.cc
+++ b/chrome/renderer/chrome_plugin_host.cc
@@ -262,7 +262,11 @@ void STDCALL CPB_SetKeepProcessAlive(CPID id, CPBool keep_alive) {
CPError STDCALL CPB_GetCookies(CPID id, CPBrowsingContext context,
const char* url, char** cookies) {
CHECK(ChromePluginLib::IsPluginThread());
- std::string cookies_str = webkit_glue::GetCookies(GURL(url), GURL(url));
+
+ std::string cookies_str;
+ RenderThread::current()->Send(
+ new ViewHostMsg_GetCookies(GURL(url), GURL(url), &cookies_str));
+
*cookies = CPB_StringDup(CPB_Alloc, cookies_str);
return CPERR_SUCCESS;
}
diff --git a/chrome/renderer/render_thread.cc b/chrome/renderer/render_thread.cc
index fb8082b..f77686b 100644
--- a/chrome/renderer/render_thread.cc
+++ b/chrome/renderer/render_thread.cc
@@ -16,6 +16,7 @@
#include "chrome/common/chrome_plugin_lib.h"
#include "chrome/common/render_messages.h"
#include "chrome/common/notification_service.h"
+#include "chrome/common/url_constants.h"
#include "chrome/plugin/npobject_util.h"
// TODO(port)
#if defined(OS_WIN)
@@ -35,6 +36,7 @@
#include "webkit/glue/cache_manager.h"
#include "WebKit.h"
+#include "WebString.h"
static const unsigned int kCacheStatsDelayMS = 2000 /* milliseconds */;
@@ -95,9 +97,6 @@ void RenderThread::Init() {
cache_stats_factory_.reset(
new ScopedRunnableMethodFactory<RenderThread>(this));
- webkit_client_impl_.reset(new RendererWebKitClientImpl);
- WebKit::initialize(webkit_client_impl_.get());
-
visited_link_slave_.reset(new VisitedLinkSlave());
user_script_slave_.reset(new UserScriptSlave());
dns_master_.reset(new RenderDnsMaster());
@@ -112,7 +111,10 @@ void RenderThread::CleanUp() {
user_script_slave_.reset();
visited_link_slave_.reset();
- WebKit::shutdown();
+ if (webkit_client_.get()) {
+ WebKit::shutdown();
+ webkit_client_.reset();
+ }
notification_service_.reset();
@@ -185,6 +187,8 @@ void RenderThread::OnCreateNewView(gfx::NativeViewId parent_hwnd,
ModalDialogEvent modal_dialog_event,
const WebPreferences& webkit_prefs,
int32 view_id) {
+ EnsureWebKitInitialized();
+
// When bringing in render_view, also bring in webkit's glue and jsbindings.
base::WaitableEvent* waitable_event = new base::WaitableEvent(
#if defined(OS_WIN)
@@ -203,6 +207,7 @@ void RenderThread::OnCreateNewView(gfx::NativeViewId parent_hwnd,
void RenderThread::OnSetCacheCapacities(size_t min_dead_capacity,
size_t max_dead_capacity,
size_t capacity) {
+ EnsureWebKitInitialized();
#if defined(OS_WIN) || defined(OS_LINUX)
CacheManager::SetCapacities(min_dead_capacity, max_dead_capacity, capacity);
#else
@@ -212,6 +217,7 @@ void RenderThread::OnSetCacheCapacities(size_t min_dead_capacity,
}
void RenderThread::OnGetCacheResourceStats() {
+ EnsureWebKitInitialized();
#if defined(OS_WIN) || defined(OS_LINUX)
CacheManager::ResourceTypeStats stats;
CacheManager::GetResourceTypeStats(&stats);
@@ -227,6 +233,7 @@ void RenderThread::OnGetRendererHistograms() {
}
void RenderThread::InformHostOfCacheStats() {
+ EnsureWebKitInitialized();
#if defined(OS_WIN) || defined(OS_LINUX)
CacheManager::UsageStats stats;
CacheManager::GetUsageStats(&stats);
@@ -247,3 +254,11 @@ void RenderThread::InformHostOfCacheStatsLater() {
&RenderThread::InformHostOfCacheStats),
kCacheStatsDelayMS);
}
+
+void RenderThread::EnsureWebKitInitialized() {
+ if (webkit_client_.get())
+ return;
+ webkit_client_.reset(new RendererWebKitClientImpl);
+ WebKit::initialize(webkit_client_.get());
+ WebKit::registerURLSchemeAsLocal(ASCIIToUTF16(chrome::kChromeUIScheme));
+}
diff --git a/chrome/renderer/render_thread.h b/chrome/renderer/render_thread.h
index 8f41cce..2ae157f 100644
--- a/chrome/renderer/render_thread.h
+++ b/chrome/renderer/render_thread.h
@@ -129,6 +129,9 @@ class RenderThread : public RenderThreadBase,
// decisions about how to allocation resources using current information.
void InformHostOfCacheStats();
+ // We initialize WebKit as late as possible.
+ void EnsureWebKitInitialized();
+
// These objects live solely on the render thread.
scoped_ptr<VisitedLinkSlave> visited_link_slave_;
@@ -142,7 +145,7 @@ class RenderThread : public RenderThreadBase,
scoped_ptr<NotificationService> notification_service_;
- scoped_ptr<RendererWebKitClientImpl> webkit_client_impl_;
+ scoped_ptr<RendererWebKitClientImpl> webkit_client_;
DISALLOW_COPY_AND_ASSIGN(RenderThread);
};
diff --git a/chrome/renderer/render_view_unittest.cc b/chrome/renderer/render_view_unittest.cc
index 6778eb9..31a5348 100644
--- a/chrome/renderer/render_view_unittest.cc
+++ b/chrome/renderer/render_view_unittest.cc
@@ -7,11 +7,14 @@
#include "chrome/renderer/mock_render_process.h"
#include "chrome/renderer/mock_render_thread.h"
#include "chrome/renderer/render_view.h"
+#include "chrome/renderer/renderer_webkitclient_impl.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "webkit/glue/webframe.h"
#include "webkit/glue/weburlrequest.h"
#include "webkit/glue/webview.h"
+#include "WebKit.h"
+
namespace {
const int32 kRouteId = 5;
@@ -60,6 +63,8 @@ class RenderViewTest : public testing::Test {
// testing::Test
virtual void SetUp() {
+ WebKit::initialize(&webkitclient_);
+
mock_process_.reset(new MockProcess());
render_thread_.set_routing_id(kRouteId);
@@ -78,6 +83,8 @@ class RenderViewTest : public testing::Test {
view_ = NULL;
mock_process_.reset();
+ WebKit::shutdown();
+
msg_loop_.RunAllPending();
}
@@ -85,6 +92,7 @@ class RenderViewTest : public testing::Test {
MockRenderThread render_thread_;
scoped_ptr<MockProcess> mock_process_;
scoped_refptr<RenderView> view_;
+ RendererWebKitClientImpl webkitclient_;
};
diff --git a/chrome/renderer/renderer.scons b/chrome/renderer/renderer.scons
index 81da02e..e8dfddd 100644
--- a/chrome/renderer/renderer.scons
+++ b/chrome/renderer/renderer.scons
@@ -13,15 +13,12 @@ env.SConscript([
'$MEDIA_DIR/using_media.scons',
'$NPAPI_DIR/using_npapi.scons',
'$SKIA_DIR/using_skia.scons',
+ '$WEBKIT_DIR/build/WebKit/using_webkit.scons',
], {'env':env})
env.Prepend(
- CPPDEFINES = [
- 'WEBKIT_USING_SKIA'
- ],
CPPPATH = [
'$CHROME_SRC_DIR',
- '$THIRD_PARTY_WEBKIT_DIR/WebKit/chromium/public',
],
)
diff --git a/chrome/renderer/renderer_glue.cc b/chrome/renderer/renderer_glue.cc
index 1058698..97a26ff 100644
--- a/chrome/renderer/renderer_glue.cc
+++ b/chrome/renderer/renderer_glue.cc
@@ -28,6 +28,10 @@
#include "webkit/glue/webframe.h"
#include "webkit/glue/webkit_glue.h"
+#include "WebKit.h"
+#include "WebKitClient.h"
+#include "WebString.h"
+
#include <vector>
#include "SkBitmap.h"
@@ -156,16 +160,14 @@ bool IsMediaPlayerAvailable() {
return g_media_player_available;
}
-void PrefetchDns(const std::string& hostname) {
- if (!hostname.empty())
- DnsPrefetchCString(hostname.c_str(), hostname.length());
-}
-
void PrecacheUrl(const wchar_t* url, int url_length) {
// TBD: jar: Need implementation that loads the targetted URL into our cache.
// For now, at least prefetch DNS lookup
- GURL parsed_url(WideToUTF8(std::wstring(url, url_length)));
- PrefetchDns(parsed_url.host());
+ std::string url_string;
+ WideToUTF8(url, url_length, &url_string);
+ const std::string host = GURL(url_string).host();
+ if (!host.empty())
+ DnsPrefetchCString(host.data(), host.length());
}
void AppendToLog(const char* file, int line, const char* msg) {
@@ -226,7 +228,7 @@ GURL GetInspectorURL() {
}
std::string GetUIResourceProtocol() {
- return "chrome";
+ return "chrome-ui";
}
bool GetPlugins(bool refresh, std::vector<WebPluginInfo>* plugins) {
@@ -300,17 +302,6 @@ ResourceLoaderBridge* ResourceLoaderBridge::Create(
mixed_content, 0);
}
-void SetCookie(const GURL& url, const GURL& policy_url,
- const std::string& cookie) {
- RenderThread::current()->Send(new ViewHostMsg_SetCookie(url, policy_url, cookie));
-}
-
-std::string GetCookies(const GURL& url, const GURL& policy_url) {
- std::string cookies;
- RenderThread::current()->Send(new ViewHostMsg_GetCookies(url, policy_url, &cookies));
- return cookies;
-}
-
void NotifyCacheStats() {
// Update the browser about our cache
// NOTE: Since this can be called from the plugin process, we might not have
diff --git a/chrome/renderer/renderer_webkitclient_impl.cc b/chrome/renderer/renderer_webkitclient_impl.cc
index b33d12e..5511a9b 100644
--- a/chrome/renderer/renderer_webkitclient_impl.cc
+++ b/chrome/renderer/renderer_webkitclient_impl.cc
@@ -5,13 +5,50 @@
#include "chrome/renderer/renderer_webkitclient_impl.h"
#include "WebString.h"
+#include "WebURL.h"
+#include "base/command_line.h"
+#include "chrome/common/chrome_switches.h"
#include "chrome/common/render_messages.h"
#include "chrome/plugin/npobject_util.h"
+#include "chrome/renderer/net/render_dns_master.h"
#include "chrome/renderer/render_thread.h"
#include "webkit/glue/glue_util.h"
+#include "webkit/glue/webkit_glue.h"
using WebKit::WebString;
+using WebKit::WebURL;
+
+//------------------------------------------------------------------------------
+
+void RendererWebKitClientImpl::setCookies(
+ const WebURL& url, const WebURL& policy_url, const WebString& value) {
+ RenderThread::current()->Send(
+ new ViewHostMsg_SetCookie(url, policy_url, UTF16ToUTF8(value)));
+}
+
+WebKit::WebString RendererWebKitClientImpl::cookies(
+ const WebKit::WebURL& url, const WebKit::WebURL& policy_url) {
+ std::string value;
+ RenderThread::current()->Send(
+ new ViewHostMsg_GetCookies(url, policy_url, &value));
+ return UTF8ToUTF16(value);
+}
+
+void RendererWebKitClientImpl::prefetchHostName(
+ const WebKit::WebString& hostname) {
+ if (!hostname.isEmpty()) {
+ const std::string& hostname_utf8 = UTF16ToUTF8(hostname);
+ DnsPrefetchCString(hostname_utf8.data(), hostname_utf8.length());
+ }
+}
+
+WebKit::WebString RendererWebKitClientImpl::defaultLocale() {
+ // TODO(darin): Eliminate this webkit_glue call.
+ return WideToUTF16(webkit_glue::GetWebKitLocale());
+}
+
+//------------------------------------------------------------------------------
WebString RendererWebKitClientImpl::MimeRegistry::mimeTypeForExtension(
const WebString& file_extension) {
diff --git a/chrome/renderer/renderer_webkitclient_impl.h b/chrome/renderer/renderer_webkitclient_impl.h
index 2e85234..9a7fe1d 100644
--- a/chrome/renderer/renderer_webkitclient_impl.h
+++ b/chrome/renderer/renderer_webkitclient_impl.h
@@ -14,6 +14,13 @@ class RendererWebKitClientImpl : public webkit_glue::WebKitClientImpl {
virtual WebKit::WebMimeRegistry* mimeRegistry() {
return &mime_registry_;
}
+ virtual void setCookies(
+ const WebKit::WebURL& url, const WebKit::WebURL& policy_url,
+ const WebKit::WebString&);
+ virtual WebKit::WebString cookies(
+ const WebKit::WebURL& url, const WebKit::WebURL& policy_url);
+ virtual void prefetchHostName(const WebKit::WebString&);
+ virtual WebKit::WebString defaultLocale();
private:
class MimeRegistry : public webkit_glue::SimpleWebMimeRegistryImpl {