diff options
author | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-28 01:13:47 +0000 |
---|---|---|
committer | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-28 01:13:47 +0000 |
commit | 90a3fbb1723ba60bcf557121b7bbe80817a7533f (patch) | |
tree | 28d845ed0f1d64cdfa418f4561af4536de6f3c40 /chrome/renderer | |
parent | 41fb1d7d262e44d8561a5c4d6d7e353f638b56e8 (diff) | |
download | chromium_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.cc | 6 | ||||
-rw-r--r-- | chrome/renderer/render_thread.cc | 23 | ||||
-rw-r--r-- | chrome/renderer/render_thread.h | 5 | ||||
-rw-r--r-- | chrome/renderer/render_view_unittest.cc | 8 | ||||
-rw-r--r-- | chrome/renderer/renderer.scons | 5 | ||||
-rw-r--r-- | chrome/renderer/renderer_glue.cc | 29 | ||||
-rw-r--r-- | chrome/renderer/renderer_webkitclient_impl.cc | 37 | ||||
-rw-r--r-- | chrome/renderer/renderer_webkitclient_impl.h | 7 |
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 { |