Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(150)

Side by Side Diff: webkit/api/src/ChromiumBridge.cpp

Issue 385057: Deleted webkit/api which now lives in webkit.org (Closed)
Patch Set: Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webkit/api/src/ChromeClientImpl.cpp ('k') | webkit/api/src/ChromiumCurrentTime.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 *
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the
13 * distribution.
14 * * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31 #include "config.h"
32 #include "ChromiumBridge.h"
33
34 #include <googleurl/src/url_util.h>
35
36 #include "ChromeClientImpl.h"
37 #include "WebClipboard.h"
38 #include "WebCookie.h"
39 #include "WebCursorInfo.h"
40 #include "WebData.h"
41 #include "WebFrameClient.h"
42 #include "WebFrameImpl.h"
43 #include "WebImage.h"
44 #include "WebKit.h"
45 #include "WebKitClient.h"
46 #include "WebMimeRegistry.h"
47 #include "WebPluginContainerImpl.h"
48 #include "WebPluginListBuilderImpl.h"
49 #include "WebScreenInfo.h"
50 #include "WebString.h"
51 #include "WebURL.h"
52 #include "WebVector.h"
53 #include "WebViewClient.h"
54 #include "WebViewImpl.h"
55 #include "WebWorkerClientImpl.h"
56
57 #if PLATFORM(WIN_OS)
58 #include "WebRect.h"
59 #include "WebSandboxSupport.h"
60 #include "WebThemeEngine.h"
61 #endif
62
63 #if PLATFORM(LINUX)
64 #include "WebSandboxSupport.h"
65 #include "WebFontInfo.h"
66 #endif
67
68 #if WEBKIT_USING_SKIA
69 #include "NativeImageSkia.h"
70 #endif
71
72 #include "BitmapImage.h"
73 #include "Cookie.h"
74 #include "FrameView.h"
75 #include "GraphicsContext.h"
76 #include "KURL.h"
77 #include "NotImplemented.h"
78 #include "PlatformContextSkia.h"
79 #include "PluginData.h"
80 #include "Worker.h"
81 #include "WorkerContextProxy.h"
82 #include <wtf/Assertions.h>
83
84 // We are part of the WebKit implementation.
85 using namespace WebKit;
86
87 namespace WebCore {
88
89 static ChromeClientImpl* toChromeClientImpl(Widget* widget)
90 {
91 FrameView* view;
92 if (widget->isFrameView())
93 view = static_cast<FrameView*>(widget);
94 else if (widget->parent() && widget->parent()->isFrameView())
95 view = static_cast<FrameView*>(widget->parent());
96 else
97 return 0;
98
99 Page* page = view->frame() ? view->frame()->page() : 0;
100 if (!page)
101 return 0;
102
103 return static_cast<ChromeClientImpl*>(page->chrome()->client());
104 }
105
106 static WebWidgetClient* toWebWidgetClient(Widget* widget)
107 {
108 ChromeClientImpl* chromeClientImpl = toChromeClientImpl(widget);
109 if (!chromeClientImpl || !chromeClientImpl->webView())
110 return 0;
111 return chromeClientImpl->webView()->client();
112 }
113
114 // Clipboard ------------------------------------------------------------------
115
116 bool ChromiumBridge::clipboardIsFormatAvailable(
117 PasteboardPrivate::ClipboardFormat format,
118 PasteboardPrivate::ClipboardBuffer buffer)
119 {
120 return webKitClient()->clipboard()->isFormatAvailable(
121 static_cast<WebClipboard::Format>(format),
122 static_cast<WebClipboard::Buffer>(buffer));
123 }
124
125 String ChromiumBridge::clipboardReadPlainText(
126 PasteboardPrivate::ClipboardBuffer buffer)
127 {
128 return webKitClient()->clipboard()->readPlainText(
129 static_cast<WebClipboard::Buffer>(buffer));
130 }
131
132 void ChromiumBridge::clipboardReadHTML(
133 PasteboardPrivate::ClipboardBuffer buffer,
134 String* htmlText, KURL* sourceURL)
135 {
136 WebURL url;
137 *htmlText = webKitClient()->clipboard()->readHTML(
138 static_cast<WebClipboard::Buffer>(buffer), &url);
139 *sourceURL = url;
140 }
141
142 void ChromiumBridge::clipboardWriteSelection(const String& htmlText,
143 const KURL& sourceURL,
144 const String& plainText,
145 bool writeSmartPaste)
146 {
147 webKitClient()->clipboard()->writeHTML(
148 htmlText, sourceURL, plainText, writeSmartPaste);
149 }
150
151 void ChromiumBridge::clipboardWritePlainText(const String& plainText)
152 {
153 webKitClient()->clipboard()->writePlainText(plainText);
154 }
155
156 void ChromiumBridge::clipboardWriteURL(const KURL& url, const String& title)
157 {
158 webKitClient()->clipboard()->writeURL(url, title);
159 }
160
161 void ChromiumBridge::clipboardWriteImage(NativeImagePtr image,
162 const KURL& sourceURL,
163 const String& title)
164 {
165 #if WEBKIT_USING_SKIA
166 WebImage webImage(*image);
167 #else
168 WebImage webImage(image);
169 #endif
170 webKitClient()->clipboard()->writeImage(webImage, sourceURL, title);
171 }
172
173 // Cookies --------------------------------------------------------------------
174
175 void ChromiumBridge::setCookies(const KURL& url,
176 const KURL& firstPartyForCookies,
177 const String& cookie)
178 {
179 webKitClient()->setCookies(url, firstPartyForCookies, cookie);
180 }
181
182 String ChromiumBridge::cookies(const KURL& url,
183 const KURL& firstPartyForCookies)
184 {
185 return webKitClient()->cookies(url, firstPartyForCookies);
186 }
187
188 bool ChromiumBridge::rawCookies(const KURL& url, const KURL& firstPartyForCookies, Vector<Cookie>* rawCookies)
189 {
190 rawCookies->clear();
191 WebVector<WebCookie> webCookies;
192 if (!webKitClient()->rawCookies(url, firstPartyForCookies, &webCookies))
193 return false;
194
195 for (unsigned i = 0; i < webCookies.size(); ++i) {
196 const WebCookie& webCookie = webCookies[i];
197 Cookie cookie(webCookie.name,
198 webCookie.value,
199 webCookie.domain,
200 webCookie.path,
201 webCookie.expires,
202 webCookie.httpOnly,
203 webCookie.secure,
204 webCookie.session);
205 rawCookies->append(cookie);
206 }
207 return true;
208 }
209
210 void ChromiumBridge::deleteCookie(const KURL& url, const String& cookieName)
211 {
212 webKitClient()->deleteCookie(url, cookieName);
213 }
214
215 // DNS ------------------------------------------------------------------------
216
217 void ChromiumBridge::prefetchDNS(const String& hostname)
218 {
219 webKitClient()->prefetchHostName(hostname);
220 }
221
222 // File ------------------------------------------------------------------------
223
224 bool ChromiumBridge::fileExists(const String& path)
225 {
226 return webKitClient()->fileExists(path);
227 }
228
229 bool ChromiumBridge::deleteFile(const String& path)
230 {
231 return webKitClient()->deleteFile(path);
232 }
233
234 bool ChromiumBridge::deleteEmptyDirectory(const String& path)
235 {
236 return webKitClient()->deleteEmptyDirectory(path);
237 }
238
239 bool ChromiumBridge::getFileSize(const String& path, long long& result)
240 {
241 return webKitClient()->getFileSize(path, result);
242 }
243
244 bool ChromiumBridge::getFileModificationTime(const String& path, time_t& result)
245 {
246 return webKitClient()->getFileModificationTime(path, result);
247 }
248
249 String ChromiumBridge::directoryName(const String& path)
250 {
251 return webKitClient()->directoryName(path);
252 }
253
254 String ChromiumBridge::pathByAppendingComponent(const String& path, const String& component)
255 {
256 return webKitClient()->pathByAppendingComponent(path, component);
257 }
258
259 bool ChromiumBridge::makeAllDirectories(const String& path)
260 {
261 return webKitClient()->makeAllDirectories(path);
262 }
263
264 String ChromiumBridge::getAbsolutePath(const String& path)
265 {
266 return webKitClient()->getAbsolutePath(path);
267 }
268
269 bool ChromiumBridge::isDirectory(const String& path)
270 {
271 return webKitClient()->isDirectory(path);
272 }
273
274 KURL ChromiumBridge::filePathToURL(const String& path)
275 {
276 return webKitClient()->filePathToURL(path);
277 }
278
279 // Font -----------------------------------------------------------------------
280
281 #if PLATFORM(WIN_OS)
282 bool ChromiumBridge::ensureFontLoaded(HFONT font)
283 {
284 WebSandboxSupport* ss = webKitClient()->sandboxSupport();
285
286 // if there is no sandbox, then we can assume the font
287 // was able to be loaded successfully already
288 return ss ? ss->ensureFontLoaded(font) : true;
289 }
290 #endif
291
292 #if PLATFORM(LINUX)
293 String ChromiumBridge::getFontFamilyForCharacters(const UChar* characters, size_t numCharacters)
294 {
295 if (webKitClient()->sandboxSupport())
296 return webKitClient()->sandboxSupport()->getFontFamilyForCharacters(characters, numCharacters);
297
298 WebCString family = WebFontInfo::familyForChars(characters, numCharacters);
299 if (family.data())
300 return WebString::fromUTF8(family.data());
301
302 return WebString();
303 }
304 #endif
305
306 // HTML5 DB -------------------------------------------------------------------
307
308 #if ENABLE(DATABASE)
309 PlatformFileHandle ChromiumBridge::databaseOpenFile(const String& fileName, int desiredFlags, PlatformFileHandle* dirHandle)
310 {
311 return webKitClient()->databaseOpenFile(WebString(fileName), desiredFlags, dirHandle);
312 }
313
314 int ChromiumBridge::databaseDeleteFile(const String& fileName, bool syncDir)
315 {
316 return webKitClient()->databaseDeleteFile(WebString(fileName), syncDir);
317 }
318
319 long ChromiumBridge::databaseGetFileAttributes(const String& fileName)
320 {
321 return webKitClient()->databaseGetFileAttributes(WebString(fileName));
322 }
323
324 long long ChromiumBridge::databaseGetFileSize(const String& fileName)
325 {
326 return webKitClient()->databaseGetFileSize(WebString(fileName));
327 }
328 #endif
329
330 // Keygen ---------------------------------------------------------------------
331
332 String ChromiumBridge::signedPublicKeyAndChallengeString(
333 unsigned keySizeIndex, const String& challenge, const KURL& url)
334 {
335 return webKitClient()->signedPublicKeyAndChallengeString(keySizeIndex,
336 WebString(challenge),
337 WebURL(url));
338 }
339
340 // Language -------------------------------------------------------------------
341
342 String ChromiumBridge::computedDefaultLanguage()
343 {
344 return webKitClient()->defaultLocale();
345 }
346
347 // LayoutTestMode -------------------------------------------------------------
348
349 bool ChromiumBridge::layoutTestMode()
350 {
351 return WebKit::layoutTestMode();
352 }
353
354 // MimeType -------------------------------------------------------------------
355
356 bool ChromiumBridge::isSupportedImageMIMEType(const String& mimeType)
357 {
358 return webKitClient()->mimeRegistry()->supportsImageMIMEType(mimeType)
359 != WebMimeRegistry::IsNotSupported;
360 }
361
362 bool ChromiumBridge::isSupportedJavaScriptMIMEType(const String& mimeType)
363 {
364 return webKitClient()->mimeRegistry()->supportsJavaScriptMIMEType(mimeType)
365 != WebMimeRegistry::IsNotSupported;
366 }
367
368 bool ChromiumBridge::isSupportedNonImageMIMEType(const String& mimeType)
369 {
370 return webKitClient()->mimeRegistry()->supportsNonImageMIMEType(mimeType)
371 != WebMimeRegistry::IsNotSupported;
372 }
373
374 String ChromiumBridge::mimeTypeForExtension(const String& extension)
375 {
376 return webKitClient()->mimeRegistry()->mimeTypeForExtension(extension);
377 }
378
379 String ChromiumBridge::mimeTypeFromFile(const String& path)
380 {
381 return webKitClient()->mimeRegistry()->mimeTypeFromFile(path);
382 }
383
384 String ChromiumBridge::preferredExtensionForMIMEType(const String& mimeType)
385 {
386 return webKitClient()->mimeRegistry()->preferredExtensionForMIMEType(mimeType);
387 }
388
389 // Plugin ---------------------------------------------------------------------
390
391 bool ChromiumBridge::plugins(bool refresh, Vector<PluginInfo*>* results)
392 {
393 WebPluginListBuilderImpl builder(results);
394 webKitClient()->getPluginList(refresh, &builder);
395 return true; // FIXME: There is no need for this function to return a value.
396 }
397
398 NPObject* ChromiumBridge::pluginScriptableObject(Widget* widget)
399 {
400 if (!widget)
401 return 0;
402
403 ASSERT(!widget->isFrameView());
404
405 // NOTE: We have to trust that the widget passed to us here is a
406 // WebPluginContainerImpl. There isn't a way to dynamically verify it,
407 // since the derived class (Widget) has no identifier.
408 return static_cast<WebPluginContainerImpl*>(widget)->scriptableObject();
409 }
410
411 // Resources ------------------------------------------------------------------
412
413 PassRefPtr<Image> ChromiumBridge::loadPlatformImageResource(const char* name)
414 {
415 const WebData& resource = webKitClient()->loadResource(name);
416 if (resource.isEmpty())
417 return Image::nullImage();
418
419 RefPtr<Image> image = BitmapImage::create();
420 image->setData(resource, true);
421 return image;
422 }
423
424 // Sandbox --------------------------------------------------------------------
425
426 bool ChromiumBridge::sandboxEnabled()
427 {
428 return webKitClient()->sandboxEnabled();
429 }
430
431 // SharedTimers ---------------------------------------------------------------
432
433 void ChromiumBridge::setSharedTimerFiredFunction(void (*func)())
434 {
435 webKitClient()->setSharedTimerFiredFunction(func);
436 }
437
438 void ChromiumBridge::setSharedTimerFireTime(double fireTime)
439 {
440 webKitClient()->setSharedTimerFireTime(fireTime);
441 }
442
443 void ChromiumBridge::stopSharedTimer()
444 {
445 webKitClient()->stopSharedTimer();
446 }
447
448 // StatsCounters --------------------------------------------------------------
449
450 void ChromiumBridge::decrementStatsCounter(const char* name)
451 {
452 webKitClient()->decrementStatsCounter(name);
453 }
454
455 void ChromiumBridge::incrementStatsCounter(const char* name)
456 {
457 webKitClient()->incrementStatsCounter(name);
458 }
459
460 // Sudden Termination ---------------------------------------------------------
461
462 void ChromiumBridge::suddenTerminationChanged(bool enabled)
463 {
464 webKitClient()->suddenTerminationChanged(enabled);
465 }
466
467 // SystemTime -----------------------------------------------------------------
468
469 double ChromiumBridge::currentTime()
470 {
471 return webKitClient()->currentTime();
472 }
473
474 // Theming --------------------------------------------------------------------
475
476 #if PLATFORM(WIN_OS)
477
478 void ChromiumBridge::paintButton(
479 GraphicsContext* gc, int part, int state, int classicState,
480 const IntRect& rect)
481 {
482 webKitClient()->themeEngine()->paintButton(
483 gc->platformContext()->canvas(), part, state, classicState, rect);
484 }
485
486 void ChromiumBridge::paintMenuList(
487 GraphicsContext* gc, int part, int state, int classicState,
488 const IntRect& rect)
489 {
490 webKitClient()->themeEngine()->paintMenuList(
491 gc->platformContext()->canvas(), part, state, classicState, rect);
492 }
493
494 void ChromiumBridge::paintScrollbarArrow(
495 GraphicsContext* gc, int state, int classicState,
496 const IntRect& rect)
497 {
498 webKitClient()->themeEngine()->paintScrollbarArrow(
499 gc->platformContext()->canvas(), state, classicState, rect);
500 }
501
502 void ChromiumBridge::paintScrollbarThumb(
503 GraphicsContext* gc, int part, int state, int classicState,
504 const IntRect& rect)
505 {
506 webKitClient()->themeEngine()->paintScrollbarThumb(
507 gc->platformContext()->canvas(), part, state, classicState, rect);
508 }
509
510 void ChromiumBridge::paintScrollbarTrack(
511 GraphicsContext* gc, int part, int state, int classicState,
512 const IntRect& rect, const IntRect& alignRect)
513 {
514 webKitClient()->themeEngine()->paintScrollbarTrack(
515 gc->platformContext()->canvas(), part, state, classicState, rect,
516 alignRect);
517 }
518
519 void ChromiumBridge::paintTextField(
520 GraphicsContext* gc, int part, int state, int classicState,
521 const IntRect& rect, const Color& color, bool fillContentArea,
522 bool drawEdges)
523 {
524 // Fallback to white when |color| is invalid.
525 RGBA32 backgroundColor = color.isValid() ? color.rgb() : Color::white;
526
527 webKitClient()->themeEngine()->paintTextField(
528 gc->platformContext()->canvas(), part, state, classicState, rect,
529 backgroundColor, fillContentArea, drawEdges);
530 }
531
532 void ChromiumBridge::paintTrackbar(
533 GraphicsContext* gc, int part, int state, int classicState,
534 const IntRect& rect)
535 {
536 webKitClient()->themeEngine()->paintTrackbar(
537 gc->platformContext()->canvas(), part, state, classicState, rect);
538 }
539
540 #endif
541
542 // Trace Event ----------------------------------------------------------------
543
544 void ChromiumBridge::traceEventBegin(const char* name, void* id, const char* extra)
545 {
546 webKitClient()->traceEventBegin(name, id, extra);
547 }
548
549 void ChromiumBridge::traceEventEnd(const char* name, void* id, const char* extra)
550 {
551 webKitClient()->traceEventEnd(name, id, extra);
552 }
553
554 // Visited Links --------------------------------------------------------------
555
556 LinkHash ChromiumBridge::visitedLinkHash(const UChar* url, unsigned length)
557 {
558 url_canon::RawCanonOutput<2048> buffer;
559 url_parse::Parsed parsed;
560 if (!url_util::Canonicalize(url, length, 0, &buffer, &parsed))
561 return 0; // Invalid URLs are unvisited.
562 return webKitClient()->visitedLinkHash(buffer.data(), buffer.length());
563 }
564
565 LinkHash ChromiumBridge::visitedLinkHash(const KURL& base,
566 const AtomicString& attributeURL)
567 {
568 // Resolve the relative URL using googleurl and pass the absolute URL up to
569 // the embedder. We could create a GURL object from the base and resolve
570 // the relative URL that way, but calling the lower-level functions
571 // directly saves us the string allocation in most cases.
572 url_canon::RawCanonOutput<2048> buffer;
573 url_parse::Parsed parsed;
574
575 #if USE(GOOGLEURL)
576 const CString& cstr = base.utf8String();
577 const char* data = cstr.data();
578 int length = cstr.length();
579 const url_parse::Parsed& srcParsed = base.parsed();
580 #else
581 // When we're not using GoogleURL, first canonicalize it so we can resolve it
582 // below.
583 url_canon::RawCanonOutput<2048> srcCanon;
584 url_parse::Parsed srcParsed;
585 String str = base.string();
586 if (!url_util::Canonicalize(str.characters(), str.length(), 0, &srcCanon, &srcParsed))
587 return 0;
588 const char* data = srcCanon.data();
589 int length = srcCanon.length();
590 #endif
591
592 if (!url_util::ResolveRelative(data, length, srcParsed, attributeURL.characters(),
593 attributeURL.length(), 0, &buffer, &parsed))
594 return 0; // Invalid resolved URL.
595
596 return webKitClient()->visitedLinkHash(buffer.data(), buffer.length());
597 }
598
599 bool ChromiumBridge::isLinkVisited(LinkHash visitedLinkHash)
600 {
601 return webKitClient()->isLinkVisited(visitedLinkHash);
602 }
603
604 // These are temporary methods that the WebKit layer can use to call to the
605 // Glue layer. Once the Glue layer moves entirely into the WebKit layer, these
606 // methods will be deleted.
607
608 void ChromiumBridge::notifyJSOutOfMemory(Frame* frame)
609 {
610 if (!frame)
611 return;
612
613 WebFrameImpl* webFrame = WebFrameImpl::fromFrame(frame);
614 if (!webFrame->client())
615 return;
616 webFrame->client()->didExhaustMemoryAvailableForScript(webFrame);
617 }
618
619 int ChromiumBridge::memoryUsageMB()
620 {
621 return static_cast<int>(webKitClient()->memoryUsageMB());
622 }
623
624 int ChromiumBridge::screenDepth(Widget* widget)
625 {
626 WebWidgetClient* client = toWebWidgetClient(widget);
627 if (!client)
628 return 0;
629 return client->screenInfo().depth;
630 }
631
632 int ChromiumBridge::screenDepthPerComponent(Widget* widget)
633 {
634 WebWidgetClient* client = toWebWidgetClient(widget);
635 if (!client)
636 return 0;
637 return client->screenInfo().depthPerComponent;
638 }
639
640 bool ChromiumBridge::screenIsMonochrome(Widget* widget)
641 {
642 WebWidgetClient* client = toWebWidgetClient(widget);
643 if (!client)
644 return 0;
645 return client->screenInfo().isMonochrome;
646 }
647
648 IntRect ChromiumBridge::screenRect(Widget* widget)
649 {
650 WebWidgetClient* client = toWebWidgetClient(widget);
651 if (!client)
652 return IntRect();
653 return client->screenInfo().rect;
654 }
655
656 IntRect ChromiumBridge::screenAvailableRect(Widget* widget)
657 {
658 WebWidgetClient* client = toWebWidgetClient(widget);
659 if (!client)
660 return IntRect();
661 return client->screenInfo().availableRect;
662 }
663
664 bool ChromiumBridge::popupsAllowed(NPP npp)
665 {
666 // FIXME: Give the embedder a way to control this.
667 return false;
668 }
669
670 void ChromiumBridge::widgetSetCursor(Widget* widget, const Cursor& cursor)
671 {
672 ChromeClientImpl* client = toChromeClientImpl(widget);
673 if (client)
674 client->setCursor(WebCursorInfo(cursor));
675 }
676
677 void ChromiumBridge::widgetSetFocus(Widget* widget)
678 {
679 ChromeClientImpl* client = toChromeClientImpl(widget);
680 if (client)
681 client->focus();
682 }
683
684 WorkerContextProxy* WorkerContextProxy::create(Worker* worker)
685 {
686 return WebWorkerClientImpl::createWorkerContextProxy(worker);
687 }
688
689 } // namespace WebCore
OLDNEW
« no previous file with comments | « webkit/api/src/ChromeClientImpl.cpp ('k') | webkit/api/src/ChromiumCurrentTime.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698