OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/renderer_blink_platform_impl.h" | 5 #include "content/renderer/renderer_blink_platform_impl.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 #include "base/synchronization/lock.h" | 104 #include "base/synchronization/lock.h" |
105 #include "content/common/child_process_sandbox_support_impl_linux.h" | 105 #include "content/common/child_process_sandbox_support_impl_linux.h" |
106 #include "third_party/WebKit/public/platform/linux/WebFallbackFont.h" | 106 #include "third_party/WebKit/public/platform/linux/WebFallbackFont.h" |
107 #include "third_party/WebKit/public/platform/linux/WebSandboxSupport.h" | 107 #include "third_party/WebKit/public/platform/linux/WebSandboxSupport.h" |
108 #include "third_party/icu/source/common/unicode/utf16.h" | 108 #include "third_party/icu/source/common/unicode/utf16.h" |
109 #endif | 109 #endif |
110 #endif | 110 #endif |
111 | 111 |
112 #if defined(OS_WIN) | 112 #if defined(OS_WIN) |
113 #include "content/common/child_process_messages.h" | 113 #include "content/common/child_process_messages.h" |
114 #include "third_party/WebKit/public/platform/win/WebSandboxSupport.h" | |
115 #endif | 114 #endif |
116 | 115 |
117 #if defined(USE_AURA) | 116 #if defined(USE_AURA) |
118 #include "content/renderer/webscrollbarbehavior_impl_gtkoraura.h" | 117 #include "content/renderer/webscrollbarbehavior_impl_gtkoraura.h" |
119 #elif !defined(OS_MACOSX) | 118 #elif !defined(OS_MACOSX) |
120 #include "third_party/WebKit/public/platform/WebScrollbarBehavior.h" | 119 #include "third_party/WebKit/public/platform/WebScrollbarBehavior.h" |
121 #define WebScrollbarBehaviorImpl blink::WebScrollbarBehavior | 120 #define WebScrollbarBehaviorImpl blink::WebScrollbarBehavior |
122 #endif | 121 #endif |
123 | 122 |
124 #if defined(ENABLE_WEBRTC) | 123 #if defined(ENABLE_WEBRTC) |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 class RendererBlinkPlatformImpl::FileUtilities : public WebFileUtilitiesImpl { | 180 class RendererBlinkPlatformImpl::FileUtilities : public WebFileUtilitiesImpl { |
182 public: | 181 public: |
183 explicit FileUtilities(ThreadSafeSender* sender) | 182 explicit FileUtilities(ThreadSafeSender* sender) |
184 : thread_safe_sender_(sender) {} | 183 : thread_safe_sender_(sender) {} |
185 virtual bool getFileInfo(const WebString& path, WebFileInfo& result); | 184 virtual bool getFileInfo(const WebString& path, WebFileInfo& result); |
186 private: | 185 private: |
187 bool SendSyncMessageFromAnyThread(IPC::SyncMessage* msg) const; | 186 bool SendSyncMessageFromAnyThread(IPC::SyncMessage* msg) const; |
188 scoped_refptr<ThreadSafeSender> thread_safe_sender_; | 187 scoped_refptr<ThreadSafeSender> thread_safe_sender_; |
189 }; | 188 }; |
190 | 189 |
191 #if defined(OS_ANDROID) | 190 #if !defined(OS_ANDROID) && !defined(OS_WIN) |
192 // WebKit doesn't use WebSandboxSupport on android so we don't need to | |
193 // implement anything here. | |
194 class RendererBlinkPlatformImpl::SandboxSupport {}; | |
195 #else | |
196 class RendererBlinkPlatformImpl::SandboxSupport | 191 class RendererBlinkPlatformImpl::SandboxSupport |
197 : public blink::WebSandboxSupport { | 192 : public blink::WebSandboxSupport { |
198 public: | 193 public: |
199 virtual ~SandboxSupport() {} | 194 virtual ~SandboxSupport() {} |
200 | 195 |
201 #if defined(OS_WIN) | 196 #if defined(OS_MACOSX) |
202 virtual bool ensureFontLoaded(HFONT); | |
203 #elif defined(OS_MACOSX) | |
204 virtual bool loadFont( | 197 virtual bool loadFont( |
205 NSFont* src_font, | 198 NSFont* src_font, |
206 CGFontRef* container, | 199 CGFontRef* container, |
207 uint32* font_id); | 200 uint32* font_id); |
208 #elif defined(OS_POSIX) | 201 #elif defined(OS_POSIX) |
209 virtual void getFallbackFontForCharacter( | 202 virtual void getFallbackFontForCharacter( |
210 blink::WebUChar32 character, | 203 blink::WebUChar32 character, |
211 const char* preferred_locale, | 204 const char* preferred_locale, |
212 blink::WebFallbackFont* fallbackFont); | 205 blink::WebFallbackFont* fallbackFont); |
213 virtual void getRenderStyleForStrike( | 206 virtual void getRenderStyleForStrike( |
214 const char* family, int sizeAndStyle, blink::WebFontRenderStyle* out); | 207 const char* family, int sizeAndStyle, blink::WebFontRenderStyle* out); |
215 | 208 |
216 private: | 209 private: |
217 // WebKit likes to ask us for the correct font family to use for a set of | 210 // WebKit likes to ask us for the correct font family to use for a set of |
218 // unicode code points. It needs this information frequently so we cache it | 211 // unicode code points. It needs this information frequently so we cache it |
219 // here. | 212 // here. |
220 base::Lock unicode_font_families_mutex_; | 213 base::Lock unicode_font_families_mutex_; |
221 std::map<int32_t, blink::WebFallbackFont> unicode_font_families_; | 214 std::map<int32_t, blink::WebFallbackFont> unicode_font_families_; |
222 #endif | 215 #endif |
223 }; | 216 }; |
224 #endif // defined(OS_ANDROID) | 217 #endif // !defined(OS_ANDROID) && !defined(OS_WIN) |
225 | 218 |
226 //------------------------------------------------------------------------------ | 219 //------------------------------------------------------------------------------ |
227 | 220 |
228 RendererBlinkPlatformImpl::RendererBlinkPlatformImpl( | 221 RendererBlinkPlatformImpl::RendererBlinkPlatformImpl( |
229 RendererScheduler* renderer_scheduler) | 222 RendererScheduler* renderer_scheduler) |
230 : BlinkPlatformImpl(renderer_scheduler->DefaultTaskRunner()), | 223 : BlinkPlatformImpl(renderer_scheduler->DefaultTaskRunner()), |
231 web_scheduler_(new WebSchedulerImpl(renderer_scheduler)), | 224 web_scheduler_(new WebSchedulerImpl(renderer_scheduler)), |
232 main_thread_(new WebThreadImplForScheduler(renderer_scheduler)), | 225 main_thread_(new WebThreadImplForScheduler(renderer_scheduler)), |
233 clipboard_delegate_(new RendererClipboardDelegate), | 226 clipboard_delegate_(new RendererClipboardDelegate), |
234 clipboard_(new WebClipboardImpl(clipboard_delegate_.get())), | 227 clipboard_(new WebClipboardImpl(clipboard_delegate_.get())), |
235 mime_registry_(new RendererBlinkPlatformImpl::MimeRegistry), | 228 mime_registry_(new RendererBlinkPlatformImpl::MimeRegistry), |
236 sudden_termination_disables_(0), | 229 sudden_termination_disables_(0), |
237 plugin_refresh_allowed_(true), | 230 plugin_refresh_allowed_(true), |
238 default_task_runner_(renderer_scheduler->DefaultTaskRunner()), | 231 default_task_runner_(renderer_scheduler->DefaultTaskRunner()), |
239 web_scrollbar_behavior_(new WebScrollbarBehaviorImpl) { | 232 web_scrollbar_behavior_(new WebScrollbarBehaviorImpl) { |
| 233 #if !defined(OS_ANDROID) && !defined(OS_WIN) |
240 if (g_sandbox_enabled && sandboxEnabled()) { | 234 if (g_sandbox_enabled && sandboxEnabled()) { |
241 sandbox_support_.reset(new RendererBlinkPlatformImpl::SandboxSupport); | 235 sandbox_support_.reset(new RendererBlinkPlatformImpl::SandboxSupport); |
242 } else { | 236 } else { |
243 DVLOG(1) << "Disabling sandbox support for testing."; | 237 DVLOG(1) << "Disabling sandbox support for testing."; |
244 } | 238 } |
| 239 #endif |
245 | 240 |
246 // ChildThread may not exist in some tests. | 241 // ChildThread may not exist in some tests. |
247 if (ChildThreadImpl::current()) { | 242 if (ChildThreadImpl::current()) { |
248 sync_message_filter_ = ChildThreadImpl::current()->sync_message_filter(); | 243 sync_message_filter_ = ChildThreadImpl::current()->sync_message_filter(); |
249 thread_safe_sender_ = ChildThreadImpl::current()->thread_safe_sender(); | 244 thread_safe_sender_ = ChildThreadImpl::current()->thread_safe_sender(); |
250 quota_message_filter_ = ChildThreadImpl::current()->quota_message_filter(); | 245 quota_message_filter_ = ChildThreadImpl::current()->quota_message_filter(); |
251 blob_registry_.reset(new WebBlobRegistryImpl(thread_safe_sender_.get())); | 246 blob_registry_.reset(new WebBlobRegistryImpl(thread_safe_sender_.get())); |
252 web_idb_factory_.reset(new WebIDBFactoryImpl(thread_safe_sender_.get())); | 247 web_idb_factory_.reset(new WebIDBFactoryImpl(thread_safe_sender_.get())); |
253 web_database_observer_impl_.reset( | 248 web_database_observer_impl_.reset( |
254 new WebDatabaseObserverImpl(sync_message_filter_.get())); | 249 new WebDatabaseObserverImpl(sync_message_filter_.get())); |
(...skipping 30 matching lines...) Expand all Loading... |
285 | 280 |
286 blink::WebFileUtilities* RendererBlinkPlatformImpl::fileUtilities() { | 281 blink::WebFileUtilities* RendererBlinkPlatformImpl::fileUtilities() { |
287 if (!file_utilities_) { | 282 if (!file_utilities_) { |
288 file_utilities_.reset(new FileUtilities(thread_safe_sender_.get())); | 283 file_utilities_.reset(new FileUtilities(thread_safe_sender_.get())); |
289 file_utilities_->set_sandbox_enabled(sandboxEnabled()); | 284 file_utilities_->set_sandbox_enabled(sandboxEnabled()); |
290 } | 285 } |
291 return file_utilities_.get(); | 286 return file_utilities_.get(); |
292 } | 287 } |
293 | 288 |
294 blink::WebSandboxSupport* RendererBlinkPlatformImpl::sandboxSupport() { | 289 blink::WebSandboxSupport* RendererBlinkPlatformImpl::sandboxSupport() { |
295 #if defined(OS_ANDROID) | 290 #if defined(OS_ANDROID) || defined(OS_WIN) |
296 // WebKit doesn't use WebSandboxSupport on android. | 291 // These platforms do not require sandbox support. |
297 return NULL; | 292 return NULL; |
298 #else | 293 #else |
299 return sandbox_support_.get(); | 294 return sandbox_support_.get(); |
300 #endif | 295 #endif |
301 } | 296 } |
302 | 297 |
303 blink::WebCookieJar* RendererBlinkPlatformImpl::cookieJar() { | 298 blink::WebCookieJar* RendererBlinkPlatformImpl::cookieJar() { |
304 NOTREACHED() << "Use WebFrameClient::cookieJar() instead!"; | 299 NOTREACHED() << "Use WebFrameClient::cookieJar() instead!"; |
305 return NULL; | 300 return NULL; |
306 } | 301 } |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
512 IPC::SyncMessage* msg) const { | 507 IPC::SyncMessage* msg) const { |
513 base::TimeTicks begin = base::TimeTicks::Now(); | 508 base::TimeTicks begin = base::TimeTicks::Now(); |
514 const bool success = thread_safe_sender_->Send(msg); | 509 const bool success = thread_safe_sender_->Send(msg); |
515 base::TimeDelta delta = base::TimeTicks::Now() - begin; | 510 base::TimeDelta delta = base::TimeTicks::Now() - begin; |
516 UMA_HISTOGRAM_TIMES("RendererSyncIPC.ElapsedTime", delta); | 511 UMA_HISTOGRAM_TIMES("RendererSyncIPC.ElapsedTime", delta); |
517 return success; | 512 return success; |
518 } | 513 } |
519 | 514 |
520 //------------------------------------------------------------------------------ | 515 //------------------------------------------------------------------------------ |
521 | 516 |
522 #if defined(OS_WIN) | 517 #if defined(OS_MACOSX) |
523 | |
524 bool RendererBlinkPlatformImpl::SandboxSupport::ensureFontLoaded(HFONT font) { | |
525 LOGFONT logfont; | |
526 GetObject(font, sizeof(LOGFONT), &logfont); | |
527 RenderThread::Get()->PreCacheFont(logfont); | |
528 return true; | |
529 } | |
530 | |
531 #elif defined(OS_MACOSX) | |
532 | 518 |
533 bool RendererBlinkPlatformImpl::SandboxSupport::loadFont(NSFont* src_font, | 519 bool RendererBlinkPlatformImpl::SandboxSupport::loadFont(NSFont* src_font, |
534 CGFontRef* out, | 520 CGFontRef* out, |
535 uint32* font_id) { | 521 uint32* font_id) { |
536 uint32 font_data_size; | 522 uint32 font_data_size; |
537 FontDescriptor src_font_descriptor(src_font); | 523 FontDescriptor src_font_descriptor(src_font); |
538 base::SharedMemoryHandle font_data; | 524 base::SharedMemoryHandle font_data; |
539 if (!RenderThread::Get()->Send(new ViewHostMsg_LoadFont( | 525 if (!RenderThread::Get()->Send(new ViewHostMsg_LoadFont( |
540 src_font_descriptor, &font_data_size, &font_data, font_id))) { | 526 src_font_descriptor, &font_data_size, &font_data, font_id))) { |
541 *out = NULL; | 527 *out = NULL; |
(...skipping 10 matching lines...) Expand all Loading... |
552 return false; | 538 return false; |
553 } | 539 } |
554 | 540 |
555 // TODO(jeremy): Need to call back into WebKit to make sure that the font | 541 // TODO(jeremy): Need to call back into WebKit to make sure that the font |
556 // isn't already activated, based on the font id. If it's already | 542 // isn't already activated, based on the font id. If it's already |
557 // activated, don't reactivate it here - crbug.com/72727 . | 543 // activated, don't reactivate it here - crbug.com/72727 . |
558 | 544 |
559 return FontLoader::CGFontRefFromBuffer(font_data, font_data_size, out); | 545 return FontLoader::CGFontRefFromBuffer(font_data, font_data_size, out); |
560 } | 546 } |
561 | 547 |
562 #elif defined(OS_ANDROID) | 548 #elif defined(OS_POSIX) && !defined(OS_ANDROID) |
563 | |
564 // WebKit doesn't use WebSandboxSupport on android so we don't need to | |
565 // implement anything here. This is cleaner to support than excluding the | |
566 // whole class for android. | |
567 | |
568 #elif defined(OS_POSIX) | |
569 | 549 |
570 void RendererBlinkPlatformImpl::SandboxSupport::getFallbackFontForCharacter( | 550 void RendererBlinkPlatformImpl::SandboxSupport::getFallbackFontForCharacter( |
571 blink::WebUChar32 character, | 551 blink::WebUChar32 character, |
572 const char* preferred_locale, | 552 const char* preferred_locale, |
573 blink::WebFallbackFont* fallbackFont) { | 553 blink::WebFallbackFont* fallbackFont) { |
574 base::AutoLock lock(unicode_font_families_mutex_); | 554 base::AutoLock lock(unicode_font_families_mutex_); |
575 const std::map<int32_t, blink::WebFallbackFont>::const_iterator iter = | 555 const std::map<int32_t, blink::WebFallbackFont>::const_iterator iter = |
576 unicode_font_families_.find(character); | 556 unicode_font_families_.find(character); |
577 if (iter != unicode_font_families_.end()) { | 557 if (iter != unicode_font_families_.end()) { |
578 fallbackFont->name = iter->second.name; | 558 fallbackFont->name = iter->second.name; |
(...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1221 //------------------------------------------------------------------------------ | 1201 //------------------------------------------------------------------------------ |
1222 | 1202 |
1223 void RendererBlinkPlatformImpl::MockBatteryStatusChangedForTesting( | 1203 void RendererBlinkPlatformImpl::MockBatteryStatusChangedForTesting( |
1224 const blink::WebBatteryStatus& status) { | 1204 const blink::WebBatteryStatus& status) { |
1225 if (!g_test_battery_status_listener) | 1205 if (!g_test_battery_status_listener) |
1226 return; | 1206 return; |
1227 g_test_battery_status_listener->updateBatteryStatus(status); | 1207 g_test_battery_status_listener->updateBatteryStatus(status); |
1228 } | 1208 } |
1229 | 1209 |
1230 } // namespace content | 1210 } // namespace content |
OLD | NEW |