• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef WEBKIT_CHILD_WEBKITPLATFORMSUPPORT_IMPL_H_
6 #define WEBKIT_CHILD_WEBKITPLATFORMSUPPORT_IMPL_H_
7 
8 #include "base/compiler_specific.h"
9 #include "base/debug/trace_event.h"
10 #include "base/platform_file.h"
11 #include "base/timer/timer.h"
12 #include "third_party/WebKit/public/platform/Platform.h"
13 #include "third_party/WebKit/public/platform/WebURLError.h"
14 #include "ui/base/layout.h"
15 #include "webkit/child/resource_loader_bridge.h"
16 #include "webkit/child/webkit_child_export.h"
17 
18 namespace base {
19 class MessageLoop;
20 }
21 
22 namespace blink {
23 class WebSocketStreamHandle;
24 }
25 
26 namespace webkit_glue {
27 
28 class WebSocketStreamHandleDelegate;
29 class WebSocketStreamHandleBridge;
30 
31 class WEBKIT_CHILD_EXPORT WebKitPlatformSupportImpl :
NON_EXPORTED_BASE(public blink::Platform)32     NON_EXPORTED_BASE(public blink::Platform) {
33  public:
34   WebKitPlatformSupportImpl();
35   virtual ~WebKitPlatformSupportImpl();
36 
37   // Platform methods (partial implementation):
38   virtual base::PlatformFile databaseOpenFile(
39       const blink::WebString& vfs_file_name, int desired_flags);
40   virtual int databaseDeleteFile(const blink::WebString& vfs_file_name,
41                                  bool sync_dir);
42   virtual long databaseGetFileAttributes(
43       const blink::WebString& vfs_file_name);
44   virtual long long databaseGetFileSize(const blink::WebString& vfs_file_name);
45   virtual long long databaseGetSpaceAvailableForOrigin(
46       const blink::WebString& origin_identifier);
47   virtual blink::WebString signedPublicKeyAndChallengeString(
48       unsigned key_size_index, const blink::WebString& challenge,
49       const blink::WebURL& url);
50   virtual size_t memoryUsageMB();
51   virtual size_t actualMemoryUsageMB();
52   virtual size_t physicalMemoryMB();
53   virtual size_t numberOfProcessors();
54 
55   virtual void startHeapProfiling(const blink::WebString& prefix);
56   virtual void stopHeapProfiling() OVERRIDE;
57   virtual void dumpHeapProfiling(const blink::WebString& reason);
58   virtual blink::WebString getHeapProfile() OVERRIDE;
59 
60   virtual bool processMemorySizesInBytes(size_t* private_bytes,
61                                          size_t* shared_bytes);
62   virtual bool memoryAllocatorWasteInBytes(size_t* size);
63   virtual size_t maxDecodedImageBytes() OVERRIDE;
64   virtual blink::WebURLLoader* createURLLoader();
65   virtual blink::WebSocketStreamHandle* createSocketStreamHandle();
66   virtual blink::WebString userAgent(const blink::WebURL& url);
67   virtual blink::WebData parseDataURL(
68       const blink::WebURL& url, blink::WebString& mimetype,
69       blink::WebString& charset);
70   virtual blink::WebURLError cancelledError(const blink::WebURL& url) const;
71   virtual void decrementStatsCounter(const char* name);
72   virtual void incrementStatsCounter(const char* name);
73   virtual void histogramCustomCounts(
74     const char* name, int sample, int min, int max, int bucket_count);
75   virtual void histogramEnumeration(
76     const char* name, int sample, int boundary_value);
77   virtual void histogramSparse(const char* name, int sample);
78   virtual const unsigned char* getTraceCategoryEnabledFlag(
79       const char* category_name);
80   virtual long* getTraceSamplingState(const unsigned thread_bucket);
81   virtual TraceEventHandle addTraceEvent(
82       char phase,
83       const unsigned char* category_group_enabled,
84       const char* name,
85       unsigned long long id,
86       int num_args,
87       const char** arg_names,
88       const unsigned char* arg_types,
89       const unsigned long long* arg_values,
90       unsigned char flags);
91   virtual void updateTraceEventDuration(
92       const unsigned char* category_group_enabled,
93       const char* name,
94       TraceEventHandle);
95   virtual blink::WebData loadResource(const char* name);
96   virtual blink::WebString queryLocalizedString(
97       blink::WebLocalizedString::Name name);
98   virtual blink::WebString queryLocalizedString(
99       blink::WebLocalizedString::Name name, int numeric_value);
100   virtual blink::WebString queryLocalizedString(
101       blink::WebLocalizedString::Name name, const blink::WebString& value);
102   virtual blink::WebString queryLocalizedString(
103       blink::WebLocalizedString::Name name,
104       const blink::WebString& value1, const blink::WebString& value2);
105   virtual void suddenTerminationChanged(bool enabled) { }
106   virtual double currentTime();
107   virtual double monotonicallyIncreasingTime();
108   virtual void cryptographicallyRandomValues(
109       unsigned char* buffer, size_t length);
110   virtual void setSharedTimerFiredFunction(void (*func)());
111   virtual void setSharedTimerFireInterval(double interval_seconds);
112   virtual void stopSharedTimer();
113   virtual void callOnMainThread(void (*func)(void*), void* context);
114 
115 
116   // Embedder functions. The following are not implemented by the glue layer and
117   // need to be specialized by the embedder.
118 
119   // Gets a localized string given a message id.  Returns an empty string if the
120   // message id is not found.
121   virtual base::string16 GetLocalizedString(int message_id) = 0;
122 
123   // Returns the raw data for a resource.  This resource must have been
124   // specified as BINDATA in the relevant .rc file.
125   virtual base::StringPiece GetDataResource(int resource_id,
126                                             ui::ScaleFactor scale_factor) = 0;
127 
128   // Creates a ResourceLoaderBridge.
129   virtual ResourceLoaderBridge* CreateResourceLoader(
130       const ResourceLoaderBridge::RequestInfo& request_info) = 0;
131   // Creates a WebSocketStreamHandleBridge.
132   virtual WebSocketStreamHandleBridge* CreateWebSocketStreamBridge(
133       blink::WebSocketStreamHandle* handle,
134       WebSocketStreamHandleDelegate* delegate) = 0;
135 
136   void SuspendSharedTimer();
137   void ResumeSharedTimer();
138   virtual void OnStartSharedTimer(base::TimeDelta delay) {}
139 
140  private:
141   void DoTimeout() {
142     if (shared_timer_func_ && !shared_timer_suspended_)
143       shared_timer_func_();
144   }
145 
146   base::MessageLoop* main_loop_;
147   base::OneShotTimer<WebKitPlatformSupportImpl> shared_timer_;
148   void (*shared_timer_func_)();
149   double shared_timer_fire_time_;
150   bool shared_timer_fire_time_was_set_while_suspended_;
151   int shared_timer_suspended_;  // counter
152 };
153 
154 }  // namespace webkit_glue
155 
156 #endif  // WEBKIT_CHILD_WEBKITPLATFORMSUPPORT_IMPL_H_
157