1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*
2643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Google Inc. All rights reserved.
3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without
5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions are
6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * met:
7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Redistributions of source code must retain the above copyright
9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer.
10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Redistributions in binary form must reproduce the above
11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * copyright notice, this list of conditions and the following disclaimer
12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * in the documentation and/or other materials provided with the
13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * distribution.
14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Neither the name of Google Inc. nor the names of its
15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * contributors may be used to endorse or promote products derived from
16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * this software without specific prior written permission.
17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */
30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "config.h"
32ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include "PlatformBridge.h"
33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <googleurl/src/url_util.h>
35643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
36d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "Chrome.h"
37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "ChromeClientImpl.h"
384576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "WebAudioBus.h"
39643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebClipboard.h"
40643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebCookie.h"
41692e5dbf12901edacf14812a6fae25462920af42Steve Block#include "WebCookieJar.h"
42643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebData.h"
43ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#include "WebDragData.h"
44f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include "WebFileUtilities.h"
45643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebFrameClient.h"
46643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebFrameImpl.h"
47e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "WebIDBKey.h"
48643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebImage.h"
49643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebKit.h"
50643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebKitClient.h"
51643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebMimeRegistry.h"
52643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebPluginContainerImpl.h"
53643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebPluginListBuilderImpl.h"
5406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include "WebSandboxSupport.h"
55e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "WebSerializedScriptValue.h"
56643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebScreenInfo.h"
57643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebString.h"
58643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebURL.h"
59643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebVector.h"
60643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebViewClient.h"
61643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebViewImpl.h"
62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebWorkerClientImpl.h"
63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(CG)
65cad810f21b803229eb11403f9209855525a25d57Steve Block#include <CoreGraphics/CGContext.h>
66cad810f21b803229eb11403f9209855525a25d57Steve Block#endif
67cad810f21b803229eb11403f9209855525a25d57Steve Block
68d0825bca7fe65beaee391d30da42e937db621564Steve Block#if OS(WINDOWS)
69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebRect.h"
70a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "win/WebThemeEngine.h"
71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
73bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#if OS(LINUX) || OS(FREEBSD)
74a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "linux/WebThemeEngine.h"
75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebFontInfo.h"
76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "WebFontRenderStyle.h"
77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
79cad810f21b803229eb11403f9209855525a25d57Steve Block#if OS(DARWIN)
80cad810f21b803229eb11403f9209855525a25d57Steve Block#include "mac/WebThemeEngine.h"
81cad810f21b803229eb11403f9209855525a25d57Steve Block#endif
82cad810f21b803229eb11403f9209855525a25d57Steve Block
83643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if WEBKIT_USING_SKIA
84643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "NativeImageSkia.h"
85643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
86643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
87643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "BitmapImage.h"
88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "Cookie.h"
89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "FrameView.h"
90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "GraphicsContext.h"
91db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#include "IDBFactoryBackendProxy.h"
92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "KURL.h"
93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "NotImplemented.h"
94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "PlatformContextSkia.h"
95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "PluginData.h"
96dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "SharedBuffer.h"
97a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "Worker.h"
99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WorkerContextProxy.h"
100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <wtf/Assertions.h>
101643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
102643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// We are part of the WebKit implementation.
103643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockusing namespace WebKit;
104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
105643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebCore {
106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
10754cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Blockstatic WebWidgetClient* toWebWidgetClient(Widget* widget)
108643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (!widget)
110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        return 0;
111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
112643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    FrameView* view;
113643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (widget->isFrameView())
114643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        view = static_cast<FrameView*>(widget);
115643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    else if (widget->parent() && widget->parent()->isFrameView())
116643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        view = static_cast<FrameView*>(widget->parent());
117643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    else
118643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
119643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
120643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    Page* page = view->frame() ? view->frame()->page() : 0;
121643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!page)
122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
123643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
12454cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    void* webView = page->chrome()->client()->webView();
12554cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    if (!webView)
126643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
12754cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block
12854cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    return static_cast<WebViewImpl*>(webView)->client();
129643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
130643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
131692e5dbf12901edacf14812a6fae25462920af42Steve Blockstatic WebCookieJar* getCookieJar(const Document* document)
132692e5dbf12901edacf14812a6fae25462920af42Steve Block{
133692e5dbf12901edacf14812a6fae25462920af42Steve Block    WebFrameImpl* frameImpl = WebFrameImpl::fromFrame(document->frame());
134692e5dbf12901edacf14812a6fae25462920af42Steve Block    if (!frameImpl || !frameImpl->client())
135692e5dbf12901edacf14812a6fae25462920af42Steve Block        return 0;
136f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebCookieJar* cookieJar = frameImpl->client()->cookieJar(frameImpl);
137692e5dbf12901edacf14812a6fae25462920af42Steve Block    if (!cookieJar)
138692e5dbf12901edacf14812a6fae25462920af42Steve Block        cookieJar = webKitClient()->cookieJar();
139692e5dbf12901edacf14812a6fae25462920af42Steve Block    return cookieJar;
140692e5dbf12901edacf14812a6fae25462920af42Steve Block}
141692e5dbf12901edacf14812a6fae25462920af42Steve Block
1426c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen// Cache ----------------------------------------------------------------------
1436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
144ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::cacheMetadata(const KURL& url, double responseTime, const Vector<char>& data)
1456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
1466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    webKitClient()->cacheMetadata(url, responseTime, data.data(), data.size());
1476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}
1486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
149643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Clipboard ------------------------------------------------------------------
150643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
151ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::clipboardIsFormatAvailable(
152643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    PasteboardPrivate::ClipboardFormat format,
153643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    PasteboardPrivate::ClipboardBuffer buffer)
154643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
155643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->clipboard()->isFormatAvailable(
156643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        static_cast<WebClipboard::Format>(format),
157643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        static_cast<WebClipboard::Buffer>(buffer));
158643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
159643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
160ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochString PlatformBridge::clipboardReadPlainText(
161643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    PasteboardPrivate::ClipboardBuffer buffer)
162643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
163643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->clipboard()->readPlainText(
164643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        static_cast<WebClipboard::Buffer>(buffer));
165643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
166643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
167ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::clipboardReadHTML(
168643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    PasteboardPrivate::ClipboardBuffer buffer,
169643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    String* htmlText, KURL* sourceURL)
170643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
171643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebURL url;
172643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    *htmlText = webKitClient()->clipboard()->readHTML(
173643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        static_cast<WebClipboard::Buffer>(buffer), &url);
174643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    *sourceURL = url;
175643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
176643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochPassRefPtr<SharedBuffer> PlatformBridge::clipboardReadImage(
1782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    PasteboardPrivate::ClipboardBuffer buffer)
1792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
1802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return webKitClient()->clipboard()->readImage(static_cast<WebClipboard::Buffer>(buffer));
1812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
1822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
183ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::clipboardWriteSelection(const String& htmlText,
184643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                                             const KURL& sourceURL,
185643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                                             const String& plainText,
186643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                                             bool writeSmartPaste)
187643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
188643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->clipboard()->writeHTML(
189643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        htmlText, sourceURL, plainText, writeSmartPaste);
190643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
191643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
192ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::clipboardWritePlainText(const String& plainText)
193643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
194643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->clipboard()->writePlainText(plainText);
195643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
196643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
197ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::clipboardWriteURL(const KURL& url, const String& title)
198643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
199643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->clipboard()->writeURL(url, title);
200643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
201643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
202ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::clipboardWriteImage(NativeImagePtr image,
203643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                                         const KURL& sourceURL,
204643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                                         const String& title)
205643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
206643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if WEBKIT_USING_SKIA
207643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebImage webImage(*image);
208643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#else
209643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebImage webImage(image);
210643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
211643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->clipboard()->writeImage(webImage, sourceURL, title);
212643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
213643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
214ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::clipboardWriteData(const String& type,
2155ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen                                        const String& data,
2165ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen                                        const String& metadata)
217ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{
2185ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    webKitClient()->clipboard()->writeData(type, data, metadata);
219ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block}
220ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
221ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochHashSet<String> PlatformBridge::clipboardReadAvailableTypes(
22281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    PasteboardPrivate::ClipboardBuffer buffer, bool* containsFilenames)
223ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{
22481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WebVector<WebString> result = webKitClient()->clipboard()->readAvailableTypes(
225ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        static_cast<WebClipboard::Buffer>(buffer), containsFilenames);
226ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    HashSet<String> types;
227ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    for (size_t i = 0; i < result.size(); ++i)
228ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        types.add(result[i]);
229ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    return types;
230ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block}
231ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
23281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool PlatformBridge::clipboardReadData(PasteboardPrivate::ClipboardBuffer buffer,
23381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                                       const String& type, String& data, String& metadata)
234ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{
235ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    WebString resultData;
236ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    WebString resultMetadata;
23781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    bool succeeded = webKitClient()->clipboard()->readData(
238ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        static_cast<WebClipboard::Buffer>(buffer), type, &resultData, &resultMetadata);
239ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    if (succeeded) {
240ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        data = resultData;
241ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        metadata = resultMetadata;
242ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    }
243ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    return succeeded;
244ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block}
245ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
24681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochVector<String> PlatformBridge::clipboardReadFilenames(PasteboardPrivate::ClipboardBuffer buffer)
247ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{
24881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WebVector<WebString> result = webKitClient()->clipboard()->readFilenames(
249ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        static_cast<WebClipboard::Buffer>(buffer));
250ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    Vector<String> convertedResult;
251ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    for (size_t i = 0; i < result.size(); ++i)
252ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        convertedResult.append(result[i]);
253ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    return convertedResult;
254ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block}
255ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
256643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Cookies --------------------------------------------------------------------
257643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
258ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::setCookies(const Document* document, const KURL& url,
259692e5dbf12901edacf14812a6fae25462920af42Steve Block                                const String& value)
260643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
261692e5dbf12901edacf14812a6fae25462920af42Steve Block    WebCookieJar* cookieJar = getCookieJar(document);
262692e5dbf12901edacf14812a6fae25462920af42Steve Block    if (cookieJar)
263692e5dbf12901edacf14812a6fae25462920af42Steve Block        cookieJar->setCookie(url, document->firstPartyForCookies(), value);
264692e5dbf12901edacf14812a6fae25462920af42Steve Block}
265692e5dbf12901edacf14812a6fae25462920af42Steve Block
266ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochString PlatformBridge::cookies(const Document* document, const KURL& url)
267692e5dbf12901edacf14812a6fae25462920af42Steve Block{
268692e5dbf12901edacf14812a6fae25462920af42Steve Block    String result;
269692e5dbf12901edacf14812a6fae25462920af42Steve Block    WebCookieJar* cookieJar = getCookieJar(document);
270692e5dbf12901edacf14812a6fae25462920af42Steve Block    if (cookieJar)
271692e5dbf12901edacf14812a6fae25462920af42Steve Block        result = cookieJar->cookies(url, document->firstPartyForCookies());
272692e5dbf12901edacf14812a6fae25462920af42Steve Block    return result;
273643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
274643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
275ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochString PlatformBridge::cookieRequestHeaderFieldValue(const Document* document,
276692e5dbf12901edacf14812a6fae25462920af42Steve Block                                                     const KURL& url)
277643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
278692e5dbf12901edacf14812a6fae25462920af42Steve Block    String result;
279692e5dbf12901edacf14812a6fae25462920af42Steve Block    WebCookieJar* cookieJar = getCookieJar(document);
280692e5dbf12901edacf14812a6fae25462920af42Steve Block    if (cookieJar)
281692e5dbf12901edacf14812a6fae25462920af42Steve Block        result = cookieJar->cookieRequestHeaderFieldValue(url, document->firstPartyForCookies());
282692e5dbf12901edacf14812a6fae25462920af42Steve Block    return result;
283643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
284643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
285ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::rawCookies(const Document* document, const KURL& url, Vector<Cookie>& rawCookies)
286643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
287692e5dbf12901edacf14812a6fae25462920af42Steve Block    rawCookies.clear();
288643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebVector<WebCookie> webCookies;
289692e5dbf12901edacf14812a6fae25462920af42Steve Block
290692e5dbf12901edacf14812a6fae25462920af42Steve Block    WebCookieJar* cookieJar = getCookieJar(document);
291692e5dbf12901edacf14812a6fae25462920af42Steve Block    if (cookieJar)
292692e5dbf12901edacf14812a6fae25462920af42Steve Block        cookieJar->rawCookies(url, document->firstPartyForCookies(), webCookies);
293643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
294643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    for (unsigned i = 0; i < webCookies.size(); ++i) {
295643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const WebCookie& webCookie = webCookies[i];
296643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        Cookie cookie(webCookie.name,
297643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                      webCookie.value,
298643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                      webCookie.domain,
299643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                      webCookie.path,
300643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                      webCookie.expires,
301643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                      webCookie.httpOnly,
302643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                      webCookie.secure,
303643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                      webCookie.session);
304692e5dbf12901edacf14812a6fae25462920af42Steve Block        rawCookies.append(cookie);
305643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    }
306643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return true;
307643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
308643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
309ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::deleteCookie(const Document* document, const KURL& url, const String& cookieName)
310643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
311692e5dbf12901edacf14812a6fae25462920af42Steve Block    WebCookieJar* cookieJar = getCookieJar(document);
312692e5dbf12901edacf14812a6fae25462920af42Steve Block    if (cookieJar)
313692e5dbf12901edacf14812a6fae25462920af42Steve Block        cookieJar->deleteCookie(url, cookieName);
314643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
315643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
316ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::cookiesEnabled(const Document* document)
317d0825bca7fe65beaee391d30da42e937db621564Steve Block{
318dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool result = false;
319692e5dbf12901edacf14812a6fae25462920af42Steve Block    WebCookieJar* cookieJar = getCookieJar(document);
320692e5dbf12901edacf14812a6fae25462920af42Steve Block    if (cookieJar)
321692e5dbf12901edacf14812a6fae25462920af42Steve Block        result = cookieJar->cookiesEnabled(document->cookieURL(), document->firstPartyForCookies());
322692e5dbf12901edacf14812a6fae25462920af42Steve Block    return result;
323d0825bca7fe65beaee391d30da42e937db621564Steve Block}
324d0825bca7fe65beaee391d30da42e937db621564Steve Block
325643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// DNS ------------------------------------------------------------------------
326643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
327ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::prefetchDNS(const String& hostname)
328643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
329643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->prefetchHostName(hostname);
330643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
331643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
332643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// File ------------------------------------------------------------------------
333643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
334ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::fileExists(const String& path)
335643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
336f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return webKitClient()->fileUtilities()->fileExists(path);
337643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
338643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
339ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::deleteFile(const String& path)
340643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
341f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return webKitClient()->fileUtilities()->deleteFile(path);
342643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
343643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
344ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::deleteEmptyDirectory(const String& path)
345643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
346f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return webKitClient()->fileUtilities()->deleteEmptyDirectory(path);
347643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
348643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
349ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::getFileSize(const String& path, long long& result)
350643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
351f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return webKitClient()->fileUtilities()->getFileSize(path, result);
352643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
353643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
354ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::revealFolderInOS(const String& path)
35528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu{
35628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    webKitClient()->fileUtilities()->revealFolderInOS(path);
35728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu}
35828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
359ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::getFileModificationTime(const String& path, time_t& result)
360643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
361dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    double modificationTime;
362f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    if (!webKitClient()->fileUtilities()->getFileModificationTime(path, modificationTime))
363e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        return false;
364dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    result = static_cast<time_t>(modificationTime);
365dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    return true;
366643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
367643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
368ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochString PlatformBridge::directoryName(const String& path)
369643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
370f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return webKitClient()->fileUtilities()->directoryName(path);
371643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
372643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
373ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochString PlatformBridge::pathByAppendingComponent(const String& path, const String& component)
374643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
375f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return webKitClient()->fileUtilities()->pathByAppendingComponent(path, component);
376643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
377643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
378ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::makeAllDirectories(const String& path)
379643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
380f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return webKitClient()->fileUtilities()->makeAllDirectories(path);
381643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
382643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
383ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochString PlatformBridge::getAbsolutePath(const String& path)
384643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
385f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return webKitClient()->fileUtilities()->getAbsolutePath(path);
386643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
387643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
388ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::isDirectory(const String& path)
389643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
390f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return webKitClient()->fileUtilities()->isDirectory(path);
391643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
392643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
393ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochKURL PlatformBridge::filePathToURL(const String& path)
394643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
395f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return webKitClient()->fileUtilities()->filePathToURL(path);
396643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
397643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
398ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochPlatformFileHandle PlatformBridge::openFile(const String& path, FileOpenMode mode)
39921939df44de1705786c545cd1bf519d47250322dBen Murdoch{
400f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return webKitClient()->fileUtilities()->openFile(path, mode);
40121939df44de1705786c545cd1bf519d47250322dBen Murdoch}
40221939df44de1705786c545cd1bf519d47250322dBen Murdoch
403ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::closeFile(PlatformFileHandle& handle)
40421939df44de1705786c545cd1bf519d47250322dBen Murdoch{
405f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    webKitClient()->fileUtilities()->closeFile(handle);
40621939df44de1705786c545cd1bf519d47250322dBen Murdoch}
40721939df44de1705786c545cd1bf519d47250322dBen Murdoch
408ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochlong long PlatformBridge::seekFile(PlatformFileHandle handle, long long offset, FileSeekOrigin origin)
40921939df44de1705786c545cd1bf519d47250322dBen Murdoch{
410f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return webKitClient()->fileUtilities()->seekFile(handle, offset, origin);
41121939df44de1705786c545cd1bf519d47250322dBen Murdoch}
41221939df44de1705786c545cd1bf519d47250322dBen Murdoch
413ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::truncateFile(PlatformFileHandle handle, long long offset)
41421939df44de1705786c545cd1bf519d47250322dBen Murdoch{
415f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return webKitClient()->fileUtilities()->truncateFile(handle, offset);
41621939df44de1705786c545cd1bf519d47250322dBen Murdoch}
41721939df44de1705786c545cd1bf519d47250322dBen Murdoch
418ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochint PlatformBridge::readFromFile(PlatformFileHandle handle, char* data, int length)
41921939df44de1705786c545cd1bf519d47250322dBen Murdoch{
420f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return webKitClient()->fileUtilities()->readFromFile(handle, data, length);
42121939df44de1705786c545cd1bf519d47250322dBen Murdoch}
42221939df44de1705786c545cd1bf519d47250322dBen Murdoch
423ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochint PlatformBridge::writeToFile(PlatformFileHandle handle, const char* data, int length)
42421939df44de1705786c545cd1bf519d47250322dBen Murdoch{
425f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return webKitClient()->fileUtilities()->writeToFile(handle, data, length);
42621939df44de1705786c545cd1bf519d47250322dBen Murdoch}
42721939df44de1705786c545cd1bf519d47250322dBen Murdoch
428643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Font -----------------------------------------------------------------------
429643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
430d0825bca7fe65beaee391d30da42e937db621564Steve Block#if OS(WINDOWS)
431ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::ensureFontLoaded(HFONT font)
432643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
433643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebSandboxSupport* ss = webKitClient()->sandboxSupport();
434643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
435643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // if there is no sandbox, then we can assume the font
436643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // was able to be loaded successfully already
437643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return ss ? ss->ensureFontLoaded(font) : true;
438643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
439643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
440643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
441bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#if OS(LINUX) || OS(FREEBSD)
44281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochString PlatformBridge::getFontFamilyForCharacters(const UChar* characters, size_t numCharacters, const char* preferredLocale)
443643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
444643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (webKitClient()->sandboxSupport())
44581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return webKitClient()->sandboxSupport()->getFontFamilyForCharacters(characters, numCharacters, preferredLocale);
446643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
44781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WebCString family = WebFontInfo::familyForChars(characters, numCharacters, preferredLocale);
448643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (family.data())
449643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebString::fromUTF8(family.data());
450643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
451643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return WebString();
452643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
453dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
454ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::getRenderStyleForStrike(const char* font, int sizeAndStyle, FontRenderStyle* result)
455dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
456dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    WebFontRenderStyle style;
457dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
458dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (webKitClient()->sandboxSupport())
459dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        webKitClient()->sandboxSupport()->getRenderStyleForStrike(font, sizeAndStyle, &style);
460dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    else
461dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        WebFontInfo::renderStyleForStrike(font, sizeAndStyle, &style);
462dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
463dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    style.toFontRenderStyle(result);
464dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
465643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
466643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
46706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#if OS(DARWIN)
468ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::loadFont(NSFont* srcFont, ATSFontContainerRef* out)
46906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{
47006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    WebSandboxSupport* ss = webKitClient()->sandboxSupport();
47106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    if (ss)
47206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        return ss->loadFont(srcFont, out);
47306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
47406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    // This function should only be called in response to an error loading a
47506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    // font due to being blocked by the sandbox.
47606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    // This by definition shouldn't happen if there is no sandbox support.
47706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    ASSERT_NOT_REACHED();
47806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    *out = 0;
47906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    return false;
48006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}
48106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif
48206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
4830617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen// Databases ------------------------------------------------------------------
484643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
485ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochPlatformFileHandle PlatformBridge::databaseOpenFile(const String& vfsFileName, int desiredFlags)
486643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
4876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    return webKitClient()->databaseOpenFile(WebString(vfsFileName), desiredFlags);
488643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
489643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
490ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochint PlatformBridge::databaseDeleteFile(const String& vfsFileName, bool syncDir)
491643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
492643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->databaseDeleteFile(WebString(vfsFileName), syncDir);
493643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
494643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
495ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochlong PlatformBridge::databaseGetFileAttributes(const String& vfsFileName)
496643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
497643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->databaseGetFileAttributes(WebString(vfsFileName));
498643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
499643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
500ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochlong long PlatformBridge::databaseGetFileSize(const String& vfsFileName)
501643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
502643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->databaseGetFileSize(WebString(vfsFileName));
503643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
504643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
505dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block// Indexed Database -----------------------------------------------------------
506dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
507ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochPassRefPtr<IDBFactoryBackendInterface> PlatformBridge::idbFactory()
508dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
509dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // There's no reason why we need to allocate a new proxy each time, but
510dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // there's also no strong reason not to.
511db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    return IDBFactoryBackendProxy::create();
512dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
513dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
514ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::createIDBKeysFromSerializedValuesAndKeyPath(const Vector<RefPtr<SerializedScriptValue> >& values, const String& keyPath, Vector<RefPtr<IDBKey> >& keys)
515e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{
516e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    WebVector<WebSerializedScriptValue> webValues = values;
517e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    WebVector<WebIDBKey> webKeys;
51881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    webKitClient()->createIDBKeysFromSerializedValuesAndKeyPath(webValues, keyPath, webKeys);
519e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
520e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    size_t webKeysSize = webKeys.size();
521e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    keys.reserveCapacity(webKeysSize);
522e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    for (size_t i = 0; i < webKeysSize; ++i)
523e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        keys.append(PassRefPtr<IDBKey>(webKeys[i]));
524e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}
525e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
52681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochPassRefPtr<SerializedScriptValue> PlatformBridge::injectIDBKeyIntoSerializedValue(PassRefPtr<IDBKey> key, PassRefPtr<SerializedScriptValue> value, const String& keyPath)
52781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
52881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return webKitClient()->injectIDBKeyIntoSerializedValue(key, value, keyPath);
52981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
53081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
531643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Keygen ---------------------------------------------------------------------
532643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
533ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochString PlatformBridge::signedPublicKeyAndChallengeString(
534643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    unsigned keySizeIndex, const String& challenge, const KURL& url)
535643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
536643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->signedPublicKeyAndChallengeString(keySizeIndex,
537643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                                                             WebString(challenge),
538643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                                                             WebURL(url));
539643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
540643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
541643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Language -------------------------------------------------------------------
542643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
543ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochString PlatformBridge::computedDefaultLanguage()
544643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
545643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->defaultLocale();
546643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
547643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
548643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// LayoutTestMode -------------------------------------------------------------
549643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
550ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::layoutTestMode()
551643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
552643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return WebKit::layoutTestMode();
553643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
554643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
555643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// MimeType -------------------------------------------------------------------
556643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
557ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::isSupportedImageMIMEType(const String& mimeType)
558643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
559643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->mimeRegistry()->supportsImageMIMEType(mimeType)
560643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        != WebMimeRegistry::IsNotSupported;
561643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
562643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
563ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::isSupportedJavaScriptMIMEType(const String& mimeType)
564643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
565643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->mimeRegistry()->supportsJavaScriptMIMEType(mimeType)
566643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        != WebMimeRegistry::IsNotSupported;
567643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
568643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
569ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::isSupportedNonImageMIMEType(const String& mimeType)
570643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
571643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->mimeRegistry()->supportsNonImageMIMEType(mimeType)
572643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        != WebMimeRegistry::IsNotSupported;
573643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
574643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
575ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochString PlatformBridge::mimeTypeForExtension(const String& extension)
576643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
577643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->mimeRegistry()->mimeTypeForExtension(extension);
578643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
579643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
580ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochString PlatformBridge::mimeTypeFromFile(const String& path)
581643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
582643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->mimeRegistry()->mimeTypeFromFile(path);
583643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
584643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
585ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochString PlatformBridge::preferredExtensionForMIMEType(const String& mimeType)
586643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
587643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->mimeRegistry()->preferredExtensionForMIMEType(mimeType);
588643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
589643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
590643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Plugin ---------------------------------------------------------------------
591643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
592ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::plugins(bool refresh, Vector<PluginInfo>* results)
593643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
594643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebPluginListBuilderImpl builder(results);
595643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->getPluginList(refresh, &builder);
596643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return true;  // FIXME: There is no need for this function to return a value.
597643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
598643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
599ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochNPObject* PlatformBridge::pluginScriptableObject(Widget* widget)
600643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
601a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    if (!widget || !widget->isPluginContainer())
602643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
603643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
604643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return static_cast<WebPluginContainerImpl*>(widget)->scriptableObject();
605643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
606643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
607643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Resources ------------------------------------------------------------------
608643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
609ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochPassRefPtr<Image> PlatformBridge::loadPlatformImageResource(const char* name)
610643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
611643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const WebData& resource = webKitClient()->loadResource(name);
612643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (resource.isEmpty())
613643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return Image::nullImage();
614643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
615643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    RefPtr<Image> image = BitmapImage::create();
616643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    image->setData(resource, true);
617643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return image;
618643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
619643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
6204576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#if ENABLE(WEB_AUDIO)
6214576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
622ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochPassOwnPtr<AudioBus> PlatformBridge::loadPlatformAudioResource(const char* name, double sampleRate)
6234576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
6244576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    const WebData& resource = webKitClient()->loadResource(name);
6254576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (resource.isEmpty())
6264576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        return 0;
6274576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
6284576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return decodeAudioFileData(resource.data(), resource.size(), sampleRate);
6294576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
6304576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
631ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochPassOwnPtr<AudioBus> PlatformBridge::decodeAudioFileData(const char* data, size_t size, double sampleRate)
6324576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
6334576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    WebAudioBus webAudioBus;
634f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (webKitClient()->loadAudioResource(&webAudioBus, data, size, sampleRate))
6354576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        return webAudioBus.release();
6364576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return 0;
6374576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
6384576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
6394576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#endif // ENABLE(WEB_AUDIO)
6404576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
641643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Sandbox --------------------------------------------------------------------
642643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
643ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::sandboxEnabled()
644643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
645643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->sandboxEnabled();
646643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
647643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
648643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// SharedTimers ---------------------------------------------------------------
649643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
650ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::setSharedTimerFiredFunction(void (*func)())
651643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
652643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->setSharedTimerFiredFunction(func);
653643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
654643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
655ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::setSharedTimerFireTime(double fireTime)
656643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
657643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->setSharedTimerFireTime(fireTime);
658643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
659643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
660ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::stopSharedTimer()
661643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
662643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->stopSharedTimer();
663643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
664643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
665643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// StatsCounters --------------------------------------------------------------
666643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
667ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::decrementStatsCounter(const char* name)
668643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
669643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->decrementStatsCounter(name);
670643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
671643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
672ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::incrementStatsCounter(const char* name)
673643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
674643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->incrementStatsCounter(name);
675643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
676643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
677ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::histogramCustomCounts(const char* name, int sample, int min, int max, int bucketCount)
6784a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch{
6794a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch    webKitClient()->histogramCustomCounts(name, sample, min, max, bucketCount);
6804a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch}
6814a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch
682ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::histogramEnumeration(const char* name, int sample, int boundaryValue)
6834a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch{
6844a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch    webKitClient()->histogramEnumeration(name, sample, boundaryValue);
6854a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch}
6864a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch
687643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Sudden Termination ---------------------------------------------------------
688643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
689ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::suddenTerminationChanged(bool enabled)
690643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
691643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->suddenTerminationChanged(enabled);
692643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
693643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
694643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// SystemTime -----------------------------------------------------------------
695643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
696ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochdouble PlatformBridge::currentTime()
697643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
698643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->currentTime();
699643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
700643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
701643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Theming --------------------------------------------------------------------
702643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
703d0825bca7fe65beaee391d30da42e937db621564Steve Block#if OS(WINDOWS)
704643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
705ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::paintButton(
706643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    GraphicsContext* gc, int part, int state, int classicState,
707643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const IntRect& rect)
708643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
709643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->themeEngine()->paintButton(
710643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        gc->platformContext()->canvas(), part, state, classicState, rect);
711643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
712643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
713ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::paintMenuList(
714643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    GraphicsContext* gc, int part, int state, int classicState,
715643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const IntRect& rect)
716643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
717643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->themeEngine()->paintMenuList(
718643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        gc->platformContext()->canvas(), part, state, classicState, rect);
719643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
720643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
721ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::paintScrollbarArrow(
722643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    GraphicsContext* gc, int state, int classicState,
723643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const IntRect& rect)
724643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
725643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->themeEngine()->paintScrollbarArrow(
726643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        gc->platformContext()->canvas(), state, classicState, rect);
727643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
728643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
729ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::paintScrollbarThumb(
730643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    GraphicsContext* gc, int part, int state, int classicState,
731643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const IntRect& rect)
732643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
733643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->themeEngine()->paintScrollbarThumb(
734643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        gc->platformContext()->canvas(), part, state, classicState, rect);
735643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
736643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
737ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::paintScrollbarTrack(
738643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    GraphicsContext* gc, int part, int state, int classicState,
739643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const IntRect& rect, const IntRect& alignRect)
740643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
741643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->themeEngine()->paintScrollbarTrack(
742643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        gc->platformContext()->canvas(), part, state, classicState, rect,
743643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        alignRect);
744643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
745643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
746ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::paintSpinButton(
747967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    GraphicsContext* gc, int part, int state, int classicState,
748967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    const IntRect& rect)
749967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{
750967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    webKitClient()->themeEngine()->paintSpinButton(
751967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        gc->platformContext()->canvas(), part, state, classicState, rect);
752967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch}
753967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
754ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::paintTextField(
755643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    GraphicsContext* gc, int part, int state, int classicState,
756643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const IntRect& rect, const Color& color, bool fillContentArea,
757643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool drawEdges)
758643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
759643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Fallback to white when |color| is invalid.
760643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    RGBA32 backgroundColor = color.isValid() ? color.rgb() : Color::white;
761643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
762643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->themeEngine()->paintTextField(
763643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        gc->platformContext()->canvas(), part, state, classicState, rect,
764643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        backgroundColor, fillContentArea, drawEdges);
765643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
766643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
767ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::paintTrackbar(
768643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    GraphicsContext* gc, int part, int state, int classicState,
769643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const IntRect& rect)
770643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
771643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->themeEngine()->paintTrackbar(
772643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        gc->platformContext()->canvas(), part, state, classicState, rect);
773643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
774643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
775ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::paintProgressBar(
776e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    GraphicsContext* gc, const IntRect& barRect, const IntRect& valueRect, bool determinate, double animatedSeconds)
7776c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
7786c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    webKitClient()->themeEngine()->paintProgressBar(
779e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        gc->platformContext()->canvas(), barRect, valueRect, determinate, animatedSeconds);
7806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}
7816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
782a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#elif OS(LINUX)
783a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
784ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochstatic WebThemeEngine::Part WebThemePart(PlatformBridge::ThemePart part)
785a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{
786a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    switch (part) {
787ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartScrollbarDownArrow: return WebThemeEngine::PartScrollbarDownArrow;
788ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartScrollbarLeftArrow: return WebThemeEngine::PartScrollbarLeftArrow;
789ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartScrollbarRightArrow: return WebThemeEngine::PartScrollbarRightArrow;
790ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartScrollbarUpArrow: return WebThemeEngine::PartScrollbarUpArrow;
791ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartScrollbarHorizontalThumb: return WebThemeEngine::PartScrollbarHorizontalThumb;
792ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartScrollbarVerticalThumb: return WebThemeEngine::PartScrollbarVerticalThumb;
793ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartScrollbarHorizontalTrack: return WebThemeEngine::PartScrollbarHorizontalTrack;
794ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartScrollbarVerticalTrack: return WebThemeEngine::PartScrollbarVerticalTrack;
795ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartCheckbox: return WebThemeEngine::PartCheckbox;
796ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartRadio: return WebThemeEngine::PartRadio;
797ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartButton: return WebThemeEngine::PartButton;
798ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartTextField: return WebThemeEngine::PartTextField;
799ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartMenuList: return WebThemeEngine::PartMenuList;
800ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartSliderTrack: return WebThemeEngine::PartSliderTrack;
801ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartSliderThumb: return WebThemeEngine::PartSliderThumb;
802ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartInnerSpinButton: return WebThemeEngine::PartInnerSpinButton;
803ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartProgressBar: return WebThemeEngine::PartProgressBar;
804a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    }
805a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    ASSERT_NOT_REACHED();
806a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    return WebThemeEngine::PartScrollbarDownArrow;
807a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch}
808a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
809ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochstatic WebThemeEngine::State WebThemeState(PlatformBridge::ThemePaintState state)
810a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{
811a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    switch (state) {
812ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::StateDisabled: return WebThemeEngine::StateDisabled;
813ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::StateHover: return WebThemeEngine::StateHover;
814ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::StateNormal: return WebThemeEngine::StateNormal;
815ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::StatePressed: return WebThemeEngine::StatePressed;
816a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    }
817a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    ASSERT_NOT_REACHED();
818a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    return WebThemeEngine::StateDisabled;
819a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch}
820a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
821ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochstatic void GetWebThemeExtraParams(PlatformBridge::ThemePart part, PlatformBridge::ThemePaintState state, const PlatformBridge::ThemePaintExtraParams* extraParams, WebThemeEngine::ExtraParams* webThemeExtraParams)
822a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{
823ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    switch (part) {
824ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartScrollbarHorizontalTrack:
825ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartScrollbarVerticalTrack:
826a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        webThemeExtraParams->scrollbarTrack.trackX = extraParams->scrollbarTrack.trackX;
827a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        webThemeExtraParams->scrollbarTrack.trackY = extraParams->scrollbarTrack.trackY;
828a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        webThemeExtraParams->scrollbarTrack.trackWidth = extraParams->scrollbarTrack.trackWidth;
829a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        webThemeExtraParams->scrollbarTrack.trackHeight = extraParams->scrollbarTrack.trackHeight;
830ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        break;
831ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartCheckbox:
832ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->button.checked = extraParams->button.checked;
833ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->button.indeterminate = extraParams->button.indeterminate;
834ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        break;
835ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartRadio:
836ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->button.checked = extraParams->button.checked;
837ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        break;
838ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartButton:
839ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->button.isDefault = extraParams->button.isDefault;
84081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        webThemeExtraParams->button.hasBorder = extraParams->button.hasBorder;
841ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->button.backgroundColor = extraParams->button.backgroundColor;
842ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        break;
843ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartTextField:
844ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->textField.isTextArea = extraParams->textField.isTextArea;
845ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->textField.isListbox = extraParams->textField.isListbox;
846ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->textField.backgroundColor = extraParams->textField.backgroundColor;
847ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        break;
848ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartMenuList:
84981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        webThemeExtraParams->menuList.hasBorder = extraParams->menuList.hasBorder;
85081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        webThemeExtraParams->menuList.hasBorderRadius = extraParams->menuList.hasBorderRadius;
851ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->menuList.arrowX = extraParams->menuList.arrowX;
852ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->menuList.arrowY = extraParams->menuList.arrowY;
853ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->menuList.backgroundColor = extraParams->menuList.backgroundColor;
854ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        break;
855ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartSliderTrack:
856ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartSliderThumb:
857ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->slider.vertical = extraParams->slider.vertical;
858ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->slider.inDrag = extraParams->slider.inDrag;
859ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        break;
860ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartInnerSpinButton:
861ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->innerSpin.spinUp = extraParams->innerSpin.spinUp;
862ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->innerSpin.readOnly = extraParams->innerSpin.readOnly;
863ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        break;
864ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    case PlatformBridge::PartProgressBar:
865ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->progressBar.determinate = extraParams->progressBar.determinate;
866ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->progressBar.valueRectX = extraParams->progressBar.valueRectX;
867ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->progressBar.valueRectY = extraParams->progressBar.valueRectY;
868ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->progressBar.valueRectWidth = extraParams->progressBar.valueRectWidth;
869ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        webThemeExtraParams->progressBar.valueRectHeight = extraParams->progressBar.valueRectHeight;
870ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        break;
871ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    default:
872ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        break; // Parts that have no extra params get here.
873a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    }
874a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch}
875a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
876ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochIntSize PlatformBridge::getThemePartSize(ThemePart part)
877a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{
878a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch     return webKitClient()->themeEngine()->getSize(WebThemePart(part));
879a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch}
880a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
881ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::paintThemePart(
882a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    GraphicsContext* gc, ThemePart part, ThemePaintState state, const IntRect& rect, const ThemePaintExtraParams* extraParams)
883a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{
884a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    WebThemeEngine::ExtraParams webThemeExtraParams;
885a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    GetWebThemeExtraParams(part, state, extraParams, &webThemeExtraParams);
886a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    webKitClient()->themeEngine()->paint(
887a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        gc->platformContext()->canvas(), WebThemePart(part), WebThemeState(state), rect, &webThemeExtraParams);
888a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch}
889a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
890cad810f21b803229eb11403f9209855525a25d57Steve Block#elif OS(DARWIN)
891cad810f21b803229eb11403f9209855525a25d57Steve Block
892ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::paintScrollbarThumb(
893cad810f21b803229eb11403f9209855525a25d57Steve Block    GraphicsContext* gc, ThemePaintState state, ThemePaintSize size, const IntRect& rect, const ThemePaintScrollbarInfo& scrollbarInfo)
894cad810f21b803229eb11403f9209855525a25d57Steve Block{
895cad810f21b803229eb11403f9209855525a25d57Steve Block    WebThemeEngine::ScrollbarInfo webThemeScrollbarInfo;
896cad810f21b803229eb11403f9209855525a25d57Steve Block
897cad810f21b803229eb11403f9209855525a25d57Steve Block    webThemeScrollbarInfo.orientation = static_cast<WebThemeEngine::ScrollbarOrientation>(scrollbarInfo.orientation);
898cad810f21b803229eb11403f9209855525a25d57Steve Block    webThemeScrollbarInfo.parent = static_cast<WebThemeEngine::ScrollbarParent>(scrollbarInfo.parent);
899cad810f21b803229eb11403f9209855525a25d57Steve Block    webThemeScrollbarInfo.maxValue = scrollbarInfo.maxValue;
900cad810f21b803229eb11403f9209855525a25d57Steve Block    webThemeScrollbarInfo.currentValue = scrollbarInfo.currentValue;
901cad810f21b803229eb11403f9209855525a25d57Steve Block    webThemeScrollbarInfo.visibleSize = scrollbarInfo.visibleSize;
902cad810f21b803229eb11403f9209855525a25d57Steve Block    webThemeScrollbarInfo.totalSize = scrollbarInfo.totalSize;
903cad810f21b803229eb11403f9209855525a25d57Steve Block
904cad810f21b803229eb11403f9209855525a25d57Steve Block    webKitClient()->themeEngine()->paintScrollbarThumb(
905cad810f21b803229eb11403f9209855525a25d57Steve Block        gc->platformContext(),
906cad810f21b803229eb11403f9209855525a25d57Steve Block        static_cast<WebThemeEngine::State>(state),
907cad810f21b803229eb11403f9209855525a25d57Steve Block        static_cast<WebThemeEngine::Size>(size),
908cad810f21b803229eb11403f9209855525a25d57Steve Block        rect,
909cad810f21b803229eb11403f9209855525a25d57Steve Block        webThemeScrollbarInfo);
910cad810f21b803229eb11403f9209855525a25d57Steve Block}
911cad810f21b803229eb11403f9209855525a25d57Steve Block
912643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
913643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
914643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Trace Event ----------------------------------------------------------------
915643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
916ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::traceEventBegin(const char* name, void* id, const char* extra)
917643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
918643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->traceEventBegin(name, id, extra);
919643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
920643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
921ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::traceEventEnd(const char* name, void* id, const char* extra)
922643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
923643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webKitClient()->traceEventEnd(name, id, extra);
924643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
925643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
926643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Visited Links --------------------------------------------------------------
927643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
928ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochLinkHash PlatformBridge::visitedLinkHash(const UChar* url, unsigned length)
929643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
930643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    url_canon::RawCanonOutput<2048> buffer;
931643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    url_parse::Parsed parsed;
932643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!url_util::Canonicalize(url, length, 0, &buffer, &parsed))
933643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;  // Invalid URLs are unvisited.
934643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->visitedLinkHash(buffer.data(), buffer.length());
935643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
936643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
937ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochLinkHash PlatformBridge::visitedLinkHash(const KURL& base,
938643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                                         const AtomicString& attributeURL)
939643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
940643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Resolve the relative URL using googleurl and pass the absolute URL up to
941643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // the embedder. We could create a GURL object from the base and resolve
942643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // the relative URL that way, but calling the lower-level functions
943643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // directly saves us the string allocation in most cases.
944643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    url_canon::RawCanonOutput<2048> buffer;
945643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    url_parse::Parsed parsed;
946643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
947643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if USE(GOOGLEURL)
948643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const CString& cstr = base.utf8String();
949643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const char* data = cstr.data();
950643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    int length = cstr.length();
951643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const url_parse::Parsed& srcParsed = base.parsed();
952643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#else
953643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // When we're not using GoogleURL, first canonicalize it so we can resolve it
954643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // below.
955643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    url_canon::RawCanonOutput<2048> srcCanon;
956643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    url_parse::Parsed srcParsed;
957643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    String str = base.string();
958643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!url_util::Canonicalize(str.characters(), str.length(), 0, &srcCanon, &srcParsed))
959643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
960643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const char* data = srcCanon.data();
961643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    int length = srcCanon.length();
962643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
963643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
964643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!url_util::ResolveRelative(data, length, srcParsed, attributeURL.characters(),
965643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                                   attributeURL.length(), 0, &buffer, &parsed))
966643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;  // Invalid resolved URL.
967643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
968643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->visitedLinkHash(buffer.data(), buffer.length());
969643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
970643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
971ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::isLinkVisited(LinkHash visitedLinkHash)
972643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
973643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return webKitClient()->isLinkVisited(visitedLinkHash);
974643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
975643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
976643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// These are temporary methods that the WebKit layer can use to call to the
977643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Glue layer. Once the Glue layer moves entirely into the WebKit layer, these
978643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// methods will be deleted.
979643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
980ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PlatformBridge::notifyJSOutOfMemory(Frame* frame)
981643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
982643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!frame)
983643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return;
984643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
985643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebFrameImpl* webFrame = WebFrameImpl::fromFrame(frame);
986643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!webFrame->client())
987643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return;
988643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webFrame->client()->didExhaustMemoryAvailableForScript(webFrame);
989643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
990643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
991ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochint PlatformBridge::memoryUsageMB()
992643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
993643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return static_cast<int>(webKitClient()->memoryUsageMB());
994643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
995643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
996ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochint PlatformBridge::actualMemoryUsageMB()
9975abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{
9985abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    return static_cast<int>(webKitClient()->actualMemoryUsageMB());
9995abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}
10005abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick
1001ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochint PlatformBridge::screenDepth(Widget* widget)
1002643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
1003643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebWidgetClient* client = toWebWidgetClient(widget);
1004643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!client)
1005643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
1006643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return client->screenInfo().depth;
1007643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
1008643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1009ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochint PlatformBridge::screenDepthPerComponent(Widget* widget)
1010643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
1011643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebWidgetClient* client = toWebWidgetClient(widget);
1012643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!client)
1013643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
1014643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return client->screenInfo().depthPerComponent;
1015643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
1016643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1017ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::screenIsMonochrome(Widget* widget)
1018643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
1019643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebWidgetClient* client = toWebWidgetClient(widget);
1020643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!client)
1021643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
1022643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return client->screenInfo().isMonochrome;
1023643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
1024643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1025ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochIntRect PlatformBridge::screenRect(Widget* widget)
1026643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
1027643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebWidgetClient* client = toWebWidgetClient(widget);
1028643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!client)
1029643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return IntRect();
1030643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return client->screenInfo().rect;
1031643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
1032643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1033ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochIntRect PlatformBridge::screenAvailableRect(Widget* widget)
1034643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
1035643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebWidgetClient* client = toWebWidgetClient(widget);
1036643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!client)
1037643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return IntRect();
1038643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return client->screenInfo().availableRect;
1039643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
1040643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1041ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool PlatformBridge::popupsAllowed(NPP npp)
1042643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
1043643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // FIXME: Give the embedder a way to control this.
1044643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return false;
1045643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
1046643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1047643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWorkerContextProxy* WorkerContextProxy::create(Worker* worker)
1048643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
1049643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return WebWorkerClientImpl::createWorkerContextProxy(worker);
1050643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
1051643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1052643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebCore
1053