chrome/browser/extensions: Remove use of MessageLoopProxy and deprecated MessageLoop...
[chromium-blink-merge.git] / content / child / blink_platform_impl.h
blob178bfb6a11251bb3c3d9a2db1b07503f4ea90516
1 // Copyright 2014 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.
5 #ifndef CONTENT_CHILD_BLINK_PLATFORM_IMPL_H_
6 #define CONTENT_CHILD_BLINK_PLATFORM_IMPL_H_
8 #include "base/compiler_specific.h"
9 #include "base/containers/scoped_ptr_hash_map.h"
10 #include "base/threading/thread_local_storage.h"
11 #include "base/timer/timer.h"
12 #include "base/trace_event/trace_event.h"
13 #include "components/webcrypto/webcrypto_impl.h"
14 #include "content/child/webfallbackthemeengine_impl.h"
15 #include "content/common/content_export.h"
16 #include "third_party/WebKit/public/platform/Platform.h"
17 #include "third_party/WebKit/public/platform/WebGestureDevice.h"
18 #include "third_party/WebKit/public/platform/WebURLError.h"
19 #include "ui/base/layout.h"
21 #if defined(USE_DEFAULT_RENDER_THEME)
22 #include "content/child/webthemeengine_impl_default.h"
23 #elif defined(OS_WIN)
24 #include "content/child/webthemeengine_impl_win.h"
25 #elif defined(OS_MACOSX)
26 #include "content/child/webthemeengine_impl_mac.h"
27 #elif defined(OS_ANDROID)
28 #include "content/child/webthemeengine_impl_android.h"
29 #endif
31 namespace base {
32 class MessageLoop;
35 namespace content {
36 class BackgroundSyncProvider;
37 class FlingCurveConfiguration;
38 class NotificationDispatcher;
39 class PermissionDispatcher;
40 class PushDispatcher;
41 class ThreadSafeSender;
42 class WebBluetoothImpl;
43 class WebCryptoImpl;
44 class WebGeofencingProviderImpl;
45 class WebMemoryDumpProviderAdapter;
47 class CONTENT_EXPORT BlinkPlatformImpl
48 : NON_EXPORTED_BASE(public blink::Platform) {
49 public:
50 BlinkPlatformImpl();
51 explicit BlinkPlatformImpl(
52 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner);
53 virtual ~BlinkPlatformImpl();
55 // Platform methods (partial implementation):
56 virtual blink::WebThemeEngine* themeEngine();
57 virtual blink::WebFallbackThemeEngine* fallbackThemeEngine();
58 virtual blink::Platform::FileHandle databaseOpenFile(
59 const blink::WebString& vfs_file_name, int desired_flags);
60 virtual int databaseDeleteFile(const blink::WebString& vfs_file_name,
61 bool sync_dir);
62 virtual long databaseGetFileAttributes(
63 const blink::WebString& vfs_file_name);
64 virtual long long databaseGetFileSize(const blink::WebString& vfs_file_name);
65 virtual long long databaseGetSpaceAvailableForOrigin(
66 const blink::WebString& origin_identifier);
67 virtual bool databaseSetFileSize(
68 const blink::WebString& vfs_file_name, long long size);
69 virtual blink::WebString signedPublicKeyAndChallengeString(
70 unsigned key_size_index, const blink::WebString& challenge,
71 const blink::WebURL& url);
72 virtual size_t memoryUsageMB();
73 virtual size_t actualMemoryUsageMB();
74 virtual size_t physicalMemoryMB();
75 virtual size_t virtualMemoryLimitMB();
76 virtual size_t numberOfProcessors();
78 virtual bool processMemorySizesInBytes(size_t* private_bytes,
79 size_t* shared_bytes);
80 virtual bool memoryAllocatorWasteInBytes(size_t* size);
81 virtual blink::WebDiscardableMemory* allocateAndLockDiscardableMemory(
82 size_t bytes);
83 virtual size_t maxDecodedImageBytes();
84 virtual blink::WebURLLoader* createURLLoader();
85 virtual blink::WebSocketHandle* createWebSocketHandle();
86 virtual blink::WebString userAgent();
87 virtual blink::WebData parseDataURL(
88 const blink::WebURL& url, blink::WebString& mimetype,
89 blink::WebString& charset);
90 virtual blink::WebURLError cancelledError(const blink::WebURL& url) const;
91 virtual bool isReservedIPAddress(const blink::WebString& host) const;
92 virtual bool portAllowed(const blink::WebURL& url) const;
93 virtual blink::WebThread* createThread(const char* name);
94 virtual blink::WebThread* currentThread();
95 virtual void yieldCurrentThread();
96 virtual blink::WebWaitableEvent* createWaitableEvent();
97 virtual blink::WebWaitableEvent* waitMultipleEvents(
98 const blink::WebVector<blink::WebWaitableEvent*>& events);
99 virtual void decrementStatsCounter(const char* name);
100 virtual void incrementStatsCounter(const char* name);
101 virtual void histogramCustomCounts(
102 const char* name, int sample, int min, int max, int bucket_count);
103 virtual void histogramEnumeration(
104 const char* name, int sample, int boundary_value);
105 virtual void histogramSparse(const char* name, int sample);
106 virtual const unsigned char* getTraceCategoryEnabledFlag(
107 const char* category_name);
108 virtual TraceEventAPIAtomicWord* getTraceSamplingState(
109 const unsigned thread_bucket);
110 virtual TraceEventHandle addTraceEvent(
111 char phase,
112 const unsigned char* category_group_enabled,
113 const char* name,
114 unsigned long long id,
115 double timestamp,
116 int num_args,
117 const char** arg_names,
118 const unsigned char* arg_types,
119 const unsigned long long* arg_values,
120 unsigned char flags);
121 virtual TraceEventHandle addTraceEvent(
122 char phase,
123 const unsigned char* category_group_enabled,
124 const char* name,
125 unsigned long long id,
126 double timestamp,
127 int num_args,
128 const char** arg_names,
129 const unsigned char* arg_types,
130 const unsigned long long* arg_values,
131 blink::WebConvertableToTraceFormat* convertable_values,
132 unsigned char flags);
133 virtual void updateTraceEventDuration(
134 const unsigned char* category_group_enabled,
135 const char* name,
136 TraceEventHandle);
137 virtual void registerMemoryDumpProvider(blink::WebMemoryDumpProvider* wmdp);
138 virtual void unregisterMemoryDumpProvider(blink::WebMemoryDumpProvider* wmdp);
139 virtual blink::WebProcessMemoryDump* createProcessMemoryDump();
141 virtual blink::WebData loadResource(const char* name);
142 virtual blink::WebString queryLocalizedString(
143 blink::WebLocalizedString::Name name);
144 virtual blink::WebString queryLocalizedString(
145 blink::WebLocalizedString::Name name, int numeric_value);
146 virtual blink::WebString queryLocalizedString(
147 blink::WebLocalizedString::Name name, const blink::WebString& value);
148 virtual blink::WebString queryLocalizedString(
149 blink::WebLocalizedString::Name name,
150 const blink::WebString& value1, const blink::WebString& value2);
151 virtual void suddenTerminationChanged(bool enabled) { }
152 virtual double currentTime();
153 virtual double monotonicallyIncreasingTime();
154 virtual double systemTraceTime();
155 virtual void cryptographicallyRandomValues(
156 unsigned char* buffer, size_t length);
157 virtual void setSharedTimerFiredFunction(void (*func)());
158 virtual void setSharedTimerFireInterval(double interval_seconds);
159 virtual void stopSharedTimer();
160 virtual blink::WebGestureCurve* createFlingAnimationCurve(
161 blink::WebGestureDevice device_source,
162 const blink::WebFloatPoint& velocity,
163 const blink::WebSize& cumulative_scroll);
164 virtual void didStartWorkerRunLoop();
165 virtual void didStopWorkerRunLoop();
166 virtual blink::WebCrypto* crypto();
167 virtual blink::WebGeofencingProvider* geofencingProvider();
168 virtual blink::WebBluetooth* bluetooth();
169 virtual blink::WebNotificationManager* notificationManager();
170 virtual blink::WebPushProvider* pushProvider();
171 virtual blink::WebNavigatorConnectProvider* navigatorConnectProvider();
172 virtual blink::WebPermissionClient* permissionClient();
173 virtual blink::WebSyncProvider* backgroundSyncProvider();
175 void SuspendSharedTimer();
176 void ResumeSharedTimer();
177 virtual void OnStartSharedTimer(base::TimeDelta delay) {}
179 virtual blink::WebString domCodeStringFromEnum(int dom_code);
180 virtual int domEnumFromCodeString(const blink::WebString& codeString);
182 private:
183 void DoTimeout() {
184 if (shared_timer_func_ && !shared_timer_suspended_)
185 shared_timer_func_();
188 void InternalInit();
189 void UpdateWebThreadTLS(blink::WebThread* thread);
191 bool IsMainThread() const;
193 scoped_refptr<base::SingleThreadTaskRunner> MainTaskRunnerForCurrentThread();
195 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
196 WebThemeEngineImpl native_theme_engine_;
197 WebFallbackThemeEngineImpl fallback_theme_engine_;
198 base::OneShotTimer<BlinkPlatformImpl> shared_timer_;
199 void (*shared_timer_func_)();
200 double shared_timer_fire_time_;
201 bool shared_timer_fire_time_was_set_while_suspended_;
202 int shared_timer_suspended_; // counter
203 base::ThreadLocalStorage::Slot current_thread_slot_;
204 webcrypto::WebCryptoImpl web_crypto_;
205 scoped_ptr<WebGeofencingProviderImpl> geofencing_provider_;
206 scoped_ptr<WebBluetoothImpl> bluetooth_;
207 base::ScopedPtrHashMap<blink::WebMemoryDumpProvider*,
208 scoped_ptr<WebMemoryDumpProviderAdapter>>
209 memory_dump_providers_;
211 scoped_refptr<ThreadSafeSender> thread_safe_sender_;
212 scoped_refptr<NotificationDispatcher> notification_dispatcher_;
213 scoped_refptr<PushDispatcher> push_dispatcher_;
214 scoped_ptr<PermissionDispatcher> permission_client_;
215 scoped_ptr<BackgroundSyncProvider> sync_provider_;
218 } // namespace content
220 #endif // CONTENT_CHILD_BLINK_PLATFORM_IMPL_H_