/* * Copyright (C) 2012 Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * Neither the name of Google Inc. nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef SKY_ENGINE_PUBLIC_PLATFORM_PLATFORM_H_ #define SKY_ENGINE_PUBLIC_PLATFORM_PLATFORM_H_ #include "sky/engine/public/platform/WebCommon.h" #include "sky/engine/public/platform/WebData.h" #include "sky/engine/public/platform/WebGestureDevice.h" #include "sky/engine/public/platform/WebGraphicsContext3D.h" #include "sky/engine/public/platform/WebLocalizedString.h" #include "sky/engine/public/platform/WebString.h" #include "sky/engine/public/platform/WebURLError.h" #include "sky/engine/public/platform/WebVector.h" class GrContext; namespace base { class SingleThreadTaskRunner; } namespace mojo { class NetworkService; } namespace blink { class WebBlobRegistry; class WebClipboard; class WebDiscardableMemory; class WebFallbackThemeEngine; class WebGraphicsContext3DProvider; class WebSandboxSupport; struct WebFloatPoint; class WebURL; class WebURLLoader; class WebUnitTestSupport; struct WebLocalizedString; struct WebSize; class Platform { public: // HTML5 Database ------------------------------------------------------ typedef int FileHandle; BLINK_PLATFORM_EXPORT static void initialize(Platform*); BLINK_PLATFORM_EXPORT static void shutdown(); BLINK_PLATFORM_EXPORT static Platform* current(); // Must return non-null. virtual WebClipboard* clipboard() { return 0; } // May return null if sandbox support is not necessary virtual WebSandboxSupport* sandboxSupport() { return 0; } // Blob ---------------------------------------------------------------- // Must return non-null. virtual WebBlobRegistry* blobRegistry() { return 0; } // Keygen -------------------------------------------------------------- // Handle the tag for generating client certificates // Returns a base64 encoded signed copy of a public key from a newly // generated key pair and the supplied challenge string. keySizeindex // specifies the strength of the key. virtual WebString signedPublicKeyAndChallengeString(unsigned keySizeIndex, const WebString& challenge, const WebURL& url) { return WebString(); } // Memory -------------------------------------------------------------- // Returns the current space allocated for the pagefile, in MB. // That is committed size for Windows and virtual memory size for POSIX virtual size_t memoryUsageMB() { return 0; } // Same as above, but always returns actual value, without any caches. virtual size_t actualMemoryUsageMB() { return 0; } // Return the physical memory of the current machine, in MB. virtual size_t physicalMemoryMB() { return 0; } // Return the available virtual memory of the current machine, in MB. Or // zero, if there is no limit. virtual size_t virtualMemoryLimitMB() { return 0; } // Return the number of of processors of the current machine. virtual size_t numberOfProcessors() { return 0; } // Returns private and shared usage, in bytes. Private bytes is the amount of // memory currently allocated to this process that cannot be shared. Returns // false on platform specific error conditions. virtual bool processMemorySizesInBytes(size_t* privateBytes, size_t* sharedBytes) { return false; } // Reports number of bytes used by memory allocator for internal needs. // Returns true if the size has been reported, or false otherwise. virtual bool memoryAllocatorWasteInBytes(size_t*) { return false; } // Allocates discardable memory. May return 0, even if the platform supports // discardable memory. If nonzero, however, then the WebDiscardableMmeory is // returned in an locked state. You may use its underlying data() member // directly, taking care to unlock it when you are ready to let it become // discardable. virtual WebDiscardableMemory* allocateAndLockDiscardableMemory(size_t bytes) { return 0; } // A wrapper for tcmalloc's HeapProfilerStart(); virtual void startHeapProfiling(const WebString& /*prefix*/) { } // A wrapper for tcmalloc's HeapProfilerStop(); virtual void stopHeapProfiling() { } // A wrapper for tcmalloc's HeapProfilerDump() virtual void dumpHeapProfiling(const WebString& /*reason*/) { } // A wrapper for tcmalloc's GetHeapProfile() virtual WebString getHeapProfile() { return WebString(); } static const size_t noDecodedImageByteLimit = static_cast(-1); // Returns the maximum amount of memory a decoded image should be allowed. // See comments on ImageDecoder::m_maxDecodedBytes. virtual size_t maxDecodedImageBytes() { return noDecodedImageByteLimit; } // Network ------------------------------------------------------------- virtual mojo::NetworkService* networkService() { return 0; } // Returns a new WebURLLoader instance. virtual WebURLLoader* createURLLoader() { return 0; } // A suggestion to cache this metadata in association with this URL. virtual void cacheMetadata(const WebURL&, double responseTime, const char* data, size_t dataSize) { } virtual WebURLError cancelledError(const WebURL&) const { return WebURLError(); } // Resources ----------------------------------------------------------- // Returns a localized string resource (with substitution parameters). virtual WebString queryLocalizedString(WebLocalizedString::Name) { return WebString(); } virtual WebString queryLocalizedString(WebLocalizedString::Name, const WebString& parameter) { return WebString(); } virtual WebString queryLocalizedString(WebLocalizedString::Name, const WebString& parameter1, const WebString& parameter2) { return WebString(); } // Profiling ----------------------------------------------------------- virtual void decrementStatsCounter(const char* name) { } virtual void incrementStatsCounter(const char* name) { } // Screen ------------------------------------------------------------- // Supplies the system monitor color profile. virtual void screenColorProfile(WebVector* profile) { } // Sudden Termination -------------------------------------------------- // Disable/Enable sudden termination. virtual void suddenTerminationChanged(bool enabled) { } // System -------------------------------------------------------------- // Returns a value such as "en-US". virtual WebString defaultLocale() { return WebString(); } virtual base::SingleThreadTaskRunner* mainThreadTaskRunner() { return 0; } // Vibration ----------------------------------------------------------- // Starts a vibration for the given duration in milliseconds. If there is currently an active // vibration it will be cancelled before the new one is started. virtual void vibrate(unsigned time) { } // Cancels the current vibration, if there is one. virtual void cancelVibration() { } // Testing ------------------------------------------------------------- // Get a pointer to testing support interfaces. Will not be available in production builds. virtual WebUnitTestSupport* unitTestSupport() { return 0; } // Tracing ------------------------------------------------------------- // Callbacks for reporting histogram data. // CustomCounts histogram has exponential bucket sizes, so that min=1, max=1000000, bucketCount=50 would do. virtual void histogramCustomCounts(const char* name, int sample, int min, int max, int bucketCount) { } // Enumeration histogram buckets are linear, boundaryValue should be larger than any possible sample value. virtual void histogramEnumeration(const char* name, int sample, int boundaryValue) { } // Unlike enumeration histograms, sparse histograms only allocate memory for non-empty buckets. virtual void histogramSparse(const char* name, int sample) { } // GPU ---------------------------------------------------------------- // // May return null if GPU is not supported. // Returns newly allocated and initialized offscreen WebGraphicsContext3D instance. // Passing an existing context to shareContext will create the new context in the same share group as the passed context. virtual WebGraphicsContext3D* createOffscreenGraphicsContext3D(const WebGraphicsContext3D::Attributes&, WebGraphicsContext3D* shareContext) { return 0; } virtual WebGraphicsContext3D* createOffscreenGraphicsContext3D(const WebGraphicsContext3D::Attributes&) { return 0; } // Returns a newly allocated and initialized offscreen context provider. The provider may return a null // graphics context if GPU is not supported. virtual WebGraphicsContext3DProvider* createSharedOffscreenGraphicsContext3DProvider() { return 0; } // Returns true if the platform is capable of producing an offscreen context suitable for accelerating 2d canvas. // This will return false if the platform cannot promise that contexts will be preserved across operations like // locking the screen or if the platform cannot provide a context with suitable performance characteristics. // // This value must be checked again after a context loss event as the platform's capabilities may have changed. virtual bool canAccelerate2dCanvas() { return false; } protected: virtual ~Platform() { } }; } // namespace blink #endif // SKY_ENGINE_PUBLIC_PLATFORM_PLATFORM_H_