| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |  | 
| 2 // Use of this source code is governed by a BSD-style license that can be |  | 
| 3 // found in the LICENSE file. |  | 
| 4 |  | 
| 5 #include "webkit/tools/test_shell/test_shell_webkit_init.h" |  | 
| 6 |  | 
| 7 #include "base/metrics/stats_counters.h" |  | 
| 8 #include "base/path_service.h" |  | 
| 9 #include "media/base/media.h" |  | 
| 10 #include "third_party/WebKit/Source/WebKit/chromium/public/WebCache.h" |  | 
| 11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDatabase.h" |  | 
| 12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h" |  | 
| 13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRuntimeFeatures.h" |  | 
| 14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebScriptController.h
     " |  | 
| 15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityPolicy.h" |  | 
| 16 #include "ui/gl/gl_bindings_skia_in_process.h" |  | 
| 17 #include "v8/include/v8.h" |  | 
| 18 #include "webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h" |  | 
| 19 #include "webkit/plugins/npapi/plugin_list.h" |  | 
| 20 #include "webkit/plugins/webplugininfo.h" |  | 
| 21 #include "webkit/tools/test_shell/simple_socket_stream_bridge.h" |  | 
| 22 #include "webkit/tools/test_shell/test_shell.h" |  | 
| 23 |  | 
| 24 #if defined(OS_WIN) |  | 
| 25 #include "webkit/tools/test_shell/test_shell_webthemeengine.h" |  | 
| 26 #endif |  | 
| 27 |  | 
| 28 TestShellWebKitInit::TestShellWebKitInit(bool layout_test_mode) |  | 
| 29     : real_clipboard_(&clipboard_client_) { |  | 
| 30   v8::V8::SetCounterFunction(base::StatsTable::FindLocation); |  | 
| 31 |  | 
| 32   WebKit::initialize(this); |  | 
| 33   WebKit::setLayoutTestMode(layout_test_mode); |  | 
| 34   WebKit::WebSecurityPolicy::registerURLSchemeAsLocal( |  | 
| 35       WebKit::WebString::fromUTF8("test-shell-resource")); |  | 
| 36   WebKit::WebSecurityPolicy::registerURLSchemeAsNoAccess( |  | 
| 37       WebKit::WebString::fromUTF8("test-shell-resource")); |  | 
| 38   WebKit::WebScriptController::enableV8SingleThreadMode(); |  | 
| 39   WebKit::WebRuntimeFeatures::enableApplicationCache(true); |  | 
| 40   WebKit::WebRuntimeFeatures::enableDatabase(true); |  | 
| 41   WebKit::WebRuntimeFeatures::enableNotifications(true); |  | 
| 42   WebKit::WebRuntimeFeatures::enableTouch(true); |  | 
| 43   WebKit::WebRuntimeFeatures::enableIndexedDatabase(true); |  | 
| 44   WebKit::WebRuntimeFeatures::enableSpeechInput(true); |  | 
| 45   WebKit::WebRuntimeFeatures::enableFileSystem(true); |  | 
| 46 |  | 
| 47   // TODO(hwennborg): Enable this once the implementation supports it. |  | 
| 48   WebKit::WebRuntimeFeatures::enableDeviceMotion(false); |  | 
| 49   WebKit::WebRuntimeFeatures::enableDeviceOrientation(true); |  | 
| 50 |  | 
| 51   // Enable experimental I18N API for testing. |  | 
| 52   WebKit::WebRuntimeFeatures::enableJavaScriptI18NAPI(true); |  | 
| 53 |  | 
| 54   // Load libraries for media and enable the media player. |  | 
| 55   base::FilePath module_path; |  | 
| 56   WebKit::WebRuntimeFeatures::enableMediaPlayer( |  | 
| 57       PathService::Get(base::DIR_MODULE, &module_path) && |  | 
| 58       media::InitializeMediaLibrary(module_path)); |  | 
| 59 |  | 
| 60   WebKit::WebRuntimeFeatures::enableGeolocation(true); |  | 
| 61 |  | 
| 62   // Construct and initialize an appcache system for this scope. |  | 
| 63   // A new empty temp directory is created to house any cached |  | 
| 64   // content during the run. Upon exit that directory is deleted. |  | 
| 65   // If we can't create a tempdir, we'll use in-memory storage. |  | 
| 66   if (!appcache_dir_.CreateUniqueTempDir()) { |  | 
| 67     LOG(WARNING) << "Failed to create a temp dir for the appcache, " |  | 
| 68                     "using in-memory storage."; |  | 
| 69     DCHECK(appcache_dir_.path().empty()); |  | 
| 70   } |  | 
| 71   SimpleAppCacheSystem::InitializeOnUIThread(appcache_dir_.path()); |  | 
| 72 |  | 
| 73   WebKit::WebDatabase::setObserver(&database_system_); |  | 
| 74 |  | 
| 75   blob_registry_ = new TestShellWebBlobRegistryImpl(); |  | 
| 76 |  | 
| 77   file_utilities_.set_sandbox_enabled(false); |  | 
| 78 |  | 
| 79   // Restrict the supported media types when running in layout test mode. |  | 
| 80   if (layout_test_mode) |  | 
| 81     mime_registry_.reset(new TestShellWebMimeRegistryImpl()); |  | 
| 82   else |  | 
| 83     mime_registry_.reset(new webkit_glue::SimpleWebMimeRegistryImpl()); |  | 
| 84 |  | 
| 85 #if defined(OS_WIN) |  | 
| 86   // Ensure we pick up the default theme engine. |  | 
| 87   SetThemeEngine(NULL); |  | 
| 88 #endif |  | 
| 89 } |  | 
| 90 |  | 
| 91 TestShellWebKitInit::~TestShellWebKitInit() { |  | 
| 92   if (RunningOnValgrind()) |  | 
| 93     WebKit::WebCache::clear(); |  | 
| 94   WebKit::shutdown(); |  | 
| 95 } |  | 
| 96 |  | 
| 97 WebKit::WebMimeRegistry* TestShellWebKitInit::mimeRegistry() { |  | 
| 98   return mime_registry_.get(); |  | 
| 99 } |  | 
| 100 |  | 
| 101 WebKit::WebClipboard* TestShellWebKitInit::clipboard() { |  | 
| 102   // Mock out clipboard calls in layout test mode so that tests don't mess |  | 
| 103   // with each other's copies/pastes when running in parallel. |  | 
| 104   if (TestShell::layout_test_mode()) { |  | 
| 105     return &mock_clipboard_; |  | 
| 106   } else { |  | 
| 107     return &real_clipboard_; |  | 
| 108   } |  | 
| 109 } |  | 
| 110 |  | 
| 111 WebKit::WebFileUtilities* TestShellWebKitInit::fileUtilities() { |  | 
| 112   return &file_utilities_; |  | 
| 113 } |  | 
| 114 |  | 
| 115 WebKit::WebSandboxSupport* TestShellWebKitInit::sandboxSupport() { |  | 
| 116   return NULL; |  | 
| 117 } |  | 
| 118 |  | 
| 119 WebKit::WebCookieJar* TestShellWebKitInit::cookieJar() { |  | 
| 120   return &cookie_jar_; |  | 
| 121 } |  | 
| 122 |  | 
| 123 WebKit::WebBlobRegistry* TestShellWebKitInit::blobRegistry() { |  | 
| 124   return blob_registry_.get(); |  | 
| 125 } |  | 
| 126 |  | 
| 127 WebKit::WebFileSystem* TestShellWebKitInit::fileSystem() { |  | 
| 128   return &file_system_; |  | 
| 129 } |  | 
| 130 |  | 
| 131 bool TestShellWebKitInit::sandboxEnabled() { |  | 
| 132   return true; |  | 
| 133 } |  | 
| 134 |  | 
| 135 WebKit::Platform::FileHandle |  | 
| 136 TestShellWebKitInit::databaseOpenFile( |  | 
| 137     const WebKit::WebString& vfs_file_name, int desired_flags) { |  | 
| 138   return SimpleDatabaseSystem::GetInstance()->OpenFile( |  | 
| 139       vfs_file_name, desired_flags); |  | 
| 140 } |  | 
| 141 |  | 
| 142 int TestShellWebKitInit::databaseDeleteFile( |  | 
| 143     const WebKit::WebString& vfs_file_name, |  | 
| 144     bool sync_dir) { |  | 
| 145   return SimpleDatabaseSystem::GetInstance()->DeleteFile( |  | 
| 146       vfs_file_name, sync_dir); |  | 
| 147 } |  | 
| 148 |  | 
| 149 long TestShellWebKitInit::databaseGetFileAttributes( |  | 
| 150     const WebKit::WebString& vfs_file_name) { |  | 
| 151   return SimpleDatabaseSystem::GetInstance()->GetFileAttributes( |  | 
| 152       vfs_file_name); |  | 
| 153 } |  | 
| 154 |  | 
| 155 long long TestShellWebKitInit::databaseGetFileSize( |  | 
| 156     const WebKit::WebString& vfs_file_name) { |  | 
| 157   return SimpleDatabaseSystem::GetInstance()->GetFileSize(vfs_file_name); |  | 
| 158 } |  | 
| 159 |  | 
| 160 long long TestShellWebKitInit::databaseGetSpaceAvailableForOrigin( |  | 
| 161     const WebKit::WebString& origin_identifier) { |  | 
| 162   return SimpleDatabaseSystem::GetInstance()->GetSpaceAvailable( |  | 
| 163       origin_identifier); |  | 
| 164 } |  | 
| 165 |  | 
| 166 unsigned long long TestShellWebKitInit::visitedLinkHash( |  | 
| 167     const char* canonicalURL, |  | 
| 168     size_t length) { |  | 
| 169   return 0; |  | 
| 170 } |  | 
| 171 |  | 
| 172 bool TestShellWebKitInit::isLinkVisited(unsigned long long linkHash) { |  | 
| 173   return false; |  | 
| 174 } |  | 
| 175 |  | 
| 176 WebKit::WebMessagePortChannel* TestShellWebKitInit::createMessagePortChannel() { |  | 
| 177   return NULL; |  | 
| 178 } |  | 
| 179 |  | 
| 180 void TestShellWebKitInit::prefetchHostName(const WebKit::WebString&) { |  | 
| 181 } |  | 
| 182 |  | 
| 183 WebKit::WebData TestShellWebKitInit::loadResource(const char* name) { |  | 
| 184   if (!strcmp(name, "deleteButton")) { |  | 
| 185     // Create a red 30x30 square. |  | 
| 186     const char red_square[] = |  | 
| 187         "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52" |  | 
| 188         "\x00\x00\x00\x1e\x00\x00\x00\x1e\x04\x03\x00\x00\x00\xc9\x1e\xb3" |  | 
| 189         "\x91\x00\x00\x00\x30\x50\x4c\x54\x45\x00\x00\x00\x80\x00\x00\x00" |  | 
| 190         "\x80\x00\x80\x80\x00\x00\x00\x80\x80\x00\x80\x00\x80\x80\x80\x80" |  | 
| 191         "\x80\xc0\xc0\xc0\xff\x00\x00\x00\xff\x00\xff\xff\x00\x00\x00\xff" |  | 
| 192         "\xff\x00\xff\x00\xff\xff\xff\xff\xff\x7b\x1f\xb1\xc4\x00\x00\x00" |  | 
| 193         "\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a" |  | 
| 194         "\x9c\x18\x00\x00\x00\x17\x49\x44\x41\x54\x78\x01\x63\x98\x89\x0a" |  | 
| 195         "\x18\x50\xb9\x33\x47\xf9\xa8\x01\x32\xd4\xc2\x03\x00\x33\x84\x0d" |  | 
| 196         "\x02\x3a\x91\xeb\xa5\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60" |  | 
| 197         "\x82"; |  | 
| 198     return WebKit::WebData(red_square, arraysize(red_square)); |  | 
| 199   } |  | 
| 200   return webkit_glue::WebKitPlatformSupportImpl::loadResource(name); |  | 
| 201 } |  | 
| 202 |  | 
| 203 WebKit::WebString TestShellWebKitInit::queryLocalizedString( |  | 
| 204     WebKit::WebLocalizedString::Name name) { |  | 
| 205   switch (name) { |  | 
| 206     case WebKit::WebLocalizedString::ValidationValueMissing: |  | 
| 207     case WebKit::WebLocalizedString::ValidationValueMissingForCheckbox: |  | 
| 208     case WebKit::WebLocalizedString::ValidationValueMissingForFile: |  | 
| 209     case WebKit::WebLocalizedString::ValidationValueMissingForMultipleFile: |  | 
| 210     case WebKit::WebLocalizedString::ValidationValueMissingForRadio: |  | 
| 211     case WebKit::WebLocalizedString::ValidationValueMissingForSelect: |  | 
| 212       return ASCIIToUTF16("value missing"); |  | 
| 213     case WebKit::WebLocalizedString::ValidationTypeMismatch: |  | 
| 214     case WebKit::WebLocalizedString::ValidationTypeMismatchForEmail: |  | 
| 215     case WebKit::WebLocalizedString::ValidationTypeMismatchForMultipleEmail: |  | 
| 216     case WebKit::WebLocalizedString::ValidationTypeMismatchForURL: |  | 
| 217       return ASCIIToUTF16("type mismatch"); |  | 
| 218     case WebKit::WebLocalizedString::ValidationPatternMismatch: |  | 
| 219       return ASCIIToUTF16("pattern mismatch"); |  | 
| 220     case WebKit::WebLocalizedString::ValidationTooLong: |  | 
| 221       return ASCIIToUTF16("too long"); |  | 
| 222     case WebKit::WebLocalizedString::ValidationRangeUnderflow: |  | 
| 223       return ASCIIToUTF16("range underflow"); |  | 
| 224     case WebKit::WebLocalizedString::ValidationRangeOverflow: |  | 
| 225       return ASCIIToUTF16("range overflow"); |  | 
| 226     case WebKit::WebLocalizedString::ValidationStepMismatch: |  | 
| 227       return ASCIIToUTF16("step mismatch"); |  | 
| 228     default: |  | 
| 229       return WebKitPlatformSupportImpl::queryLocalizedString(name); |  | 
| 230   } |  | 
| 231 } |  | 
| 232 |  | 
| 233 WebKit::WebString TestShellWebKitInit::queryLocalizedString( |  | 
| 234     WebKit::WebLocalizedString::Name name, const WebKit::WebString& value) { |  | 
| 235   if (name == WebKit::WebLocalizedString::ValidationRangeUnderflow) |  | 
| 236     return ASCIIToUTF16("range underflow"); |  | 
| 237   if (name == WebKit::WebLocalizedString::ValidationRangeOverflow) |  | 
| 238     return ASCIIToUTF16("range overflow"); |  | 
| 239   return WebKitPlatformSupportImpl::queryLocalizedString(name, value); |  | 
| 240 } |  | 
| 241 |  | 
| 242 WebKit::WebString TestShellWebKitInit::queryLocalizedString( |  | 
| 243     WebKit::WebLocalizedString::Name name, |  | 
| 244     const WebKit::WebString& value1, |  | 
| 245     const WebKit::WebString& value2) { |  | 
| 246   if (name == WebKit::WebLocalizedString::ValidationTooLong) |  | 
| 247     return ASCIIToUTF16("too long"); |  | 
| 248   if (name == WebKit::WebLocalizedString::ValidationStepMismatch) |  | 
| 249     return ASCIIToUTF16("step mismatch"); |  | 
| 250   return WebKitPlatformSupportImpl::queryLocalizedString(name, value1, value2); |  | 
| 251 } |  | 
| 252 |  | 
| 253 WebKit::WebString TestShellWebKitInit::defaultLocale() { |  | 
| 254   return ASCIIToUTF16("en-US"); |  | 
| 255 } |  | 
| 256 |  | 
| 257 WebKit::WebStorageNamespace* TestShellWebKitInit::createLocalStorageNamespace( |  | 
| 258     const WebKit::WebString& path, unsigned quota) { |  | 
| 259   return dom_storage_system_.CreateLocalStorageNamespace(); |  | 
| 260 } |  | 
| 261 |  | 
| 262 WebKit::WebIDBFactory* TestShellWebKitInit::idbFactory() { |  | 
| 263   return WebKit::WebIDBFactory::create(); |  | 
| 264 } |  | 
| 265 |  | 
| 266 WebKit::WebGraphicsContext3D* |  | 
| 267 TestShellWebKitInit::createOffscreenGraphicsContext3D( |  | 
| 268     const WebKit::WebGraphicsContext3D::Attributes& attributes) { |  | 
| 269   using webkit::gpu::WebGraphicsContext3DInProcessCommandBufferImpl; |  | 
| 270   return WebGraphicsContext3DInProcessCommandBufferImpl::CreateOffscreenContext( |  | 
| 271       attributes); |  | 
| 272 } |  | 
| 273 |  | 
| 274 void TestShellWebKitInit::GetPlugins( |  | 
| 275     bool refresh, std::vector<webkit::WebPluginInfo>* plugins) { |  | 
| 276   if (refresh) |  | 
| 277     webkit::npapi::PluginList::Singleton()->RefreshPlugins(); |  | 
| 278   webkit::npapi::PluginList::Singleton()->GetPlugins(plugins); |  | 
| 279 } |  | 
| 280 |  | 
| 281 webkit_glue::ResourceLoaderBridge* |  | 
| 282 TestShellWebKitInit::CreateResourceLoader( |  | 
| 283     const webkit_glue::ResourceLoaderBridge::RequestInfo& request_info) { |  | 
| 284   return SimpleResourceLoaderBridge::Create(request_info); |  | 
| 285 } |  | 
| 286 |  | 
| 287 webkit_glue::WebSocketStreamHandleBridge* |  | 
| 288 TestShellWebKitInit::CreateWebSocketBridge( |  | 
| 289     WebKit::WebSocketStreamHandle* handle, |  | 
| 290     webkit_glue::WebSocketStreamHandleDelegate* delegate) { |  | 
| 291   return SimpleSocketStreamBridge::Create(handle, delegate); |  | 
| 292 } |  | 
| OLD | NEW | 
|---|