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 |