OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 void WebPluginContainerImpl::setPlugin(WebPlugin* plugin) | 260 void WebPluginContainerImpl::setPlugin(WebPlugin* plugin) |
261 { | 261 { |
262 if (plugin != m_webPlugin) { | 262 if (plugin != m_webPlugin) { |
263 m_element->resetInstance(); | 263 m_element->resetInstance(); |
264 m_webPlugin = plugin; | 264 m_webPlugin = plugin; |
265 } | 265 } |
266 } | 266 } |
267 | 267 |
268 float WebPluginContainerImpl::deviceScaleFactor() | 268 float WebPluginContainerImpl::deviceScaleFactor() |
269 { | 269 { |
270 Page* page = m_element->document()->page(); | 270 Page* page = m_element->document().page(); |
271 if (!page) | 271 if (!page) |
272 return 1.0; | 272 return 1.0; |
273 return page->deviceScaleFactor(); | 273 return page->deviceScaleFactor(); |
274 } | 274 } |
275 | 275 |
276 float WebPluginContainerImpl::pageScaleFactor() | 276 float WebPluginContainerImpl::pageScaleFactor() |
277 { | 277 { |
278 Page* page = m_element->document()->page(); | 278 Page* page = m_element->document().page(); |
279 if (!page) | 279 if (!page) |
280 return 1.0; | 280 return 1.0; |
281 return page->pageScaleFactor(); | 281 return page->pageScaleFactor(); |
282 } | 282 } |
283 | 283 |
284 float WebPluginContainerImpl::pageZoomFactor() | 284 float WebPluginContainerImpl::pageZoomFactor() |
285 { | 285 { |
286 Frame* frame = m_element->document()->frame(); | 286 Frame* frame = m_element->document().frame(); |
287 if (!frame) | 287 if (!frame) |
288 return 1.0; | 288 return 1.0; |
289 return frame->pageZoomFactor(); | 289 return frame->pageZoomFactor(); |
290 } | 290 } |
291 | 291 |
292 void WebPluginContainerImpl::setWebLayer(WebLayer* layer) | 292 void WebPluginContainerImpl::setWebLayer(WebLayer* layer) |
293 { | 293 { |
294 if (m_webLayer == layer) | 294 if (m_webLayer == layer) |
295 return; | 295 return; |
296 | 296 |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 m_scrollbarGroup->setFrameRect(frameRect()); | 410 m_scrollbarGroup->setFrameRect(frameRect()); |
411 } | 411 } |
412 } | 412 } |
413 | 413 |
414 void WebPluginContainerImpl::allowScriptObjects() | 414 void WebPluginContainerImpl::allowScriptObjects() |
415 { | 415 { |
416 } | 416 } |
417 | 417 |
418 void WebPluginContainerImpl::clearScriptObjects() | 418 void WebPluginContainerImpl::clearScriptObjects() |
419 { | 419 { |
420 Frame* frame = m_element->document()->frame(); | 420 Frame* frame = m_element->document().frame(); |
421 if (!frame) | 421 if (!frame) |
422 return; | 422 return; |
423 frame->script()->cleanupScriptObjectsForPlugin(this); | 423 frame->script()->cleanupScriptObjectsForPlugin(this); |
424 } | 424 } |
425 | 425 |
426 NPObject* WebPluginContainerImpl::scriptableObjectForElement() | 426 NPObject* WebPluginContainerImpl::scriptableObjectForElement() |
427 { | 427 { |
428 return m_element->getNPObject(); | 428 return m_element->getNPObject(); |
429 } | 429 } |
430 | 430 |
431 WebString WebPluginContainerImpl::executeScriptURL(const WebURL& url, bool popup
sAllowed) | 431 WebString WebPluginContainerImpl::executeScriptURL(const WebURL& url, bool popup
sAllowed) |
432 { | 432 { |
433 Frame* frame = m_element->document()->frame(); | 433 Frame* frame = m_element->document().frame(); |
434 if (!frame) | 434 if (!frame) |
435 return WebString(); | 435 return WebString(); |
436 | 436 |
437 const KURL& kurl = url; | 437 const KURL& kurl = url; |
438 ASSERT(kurl.protocolIs("javascript")); | 438 ASSERT(kurl.protocolIs("javascript")); |
439 | 439 |
440 String script = decodeURLEscapeSequences( | 440 String script = decodeURLEscapeSequences( |
441 kurl.string().substring(strlen("javascript:"))); | 441 kurl.string().substring(strlen("javascript:"))); |
442 | 442 |
443 ScriptValue result = frame->script()->executeScript(script, popupsAllowed); | 443 ScriptValue result = frame->script()->executeScript(script, popupsAllowed); |
444 | 444 |
445 // Failure is reported as a null string. | 445 // Failure is reported as a null string. |
446 String resultStr; | 446 String resultStr; |
447 result.getString(resultStr); | 447 result.getString(resultStr); |
448 return resultStr; | 448 return resultStr; |
449 } | 449 } |
450 | 450 |
451 void WebPluginContainerImpl::loadFrameRequest(const WebURLRequest& request, cons
t WebString& target, bool notifyNeeded, void* notifyData) | 451 void WebPluginContainerImpl::loadFrameRequest(const WebURLRequest& request, cons
t WebString& target, bool notifyNeeded, void* notifyData) |
452 { | 452 { |
453 Frame* frame = m_element->document()->frame(); | 453 Frame* frame = m_element->document().frame(); |
454 if (!frame || !frame->loader()->documentLoader()) | 454 if (!frame || !frame->loader()->documentLoader()) |
455 return; // FIXME: send a notification in this case? | 455 return; // FIXME: send a notification in this case? |
456 | 456 |
457 if (notifyNeeded) { | 457 if (notifyNeeded) { |
458 // FIXME: This is a bit of hack to allow us to observe completion of | 458 // FIXME: This is a bit of hack to allow us to observe completion of |
459 // our frame request. It would be better to evolve FrameLoader to | 459 // our frame request. It would be better to evolve FrameLoader to |
460 // support a completion callback instead. | 460 // support a completion callback instead. |
461 OwnPtr<WebPluginLoadObserver> observer = adoptPtr(new WebPluginLoadObser
ver(this, request.url(), notifyData)); | 461 OwnPtr<WebPluginLoadObserver> observer = adoptPtr(new WebPluginLoadObser
ver(this, request.url(), notifyData)); |
462 // FIXME: Calling get here is dangerous! What if observer is freed? | 462 // FIXME: Calling get here is dangerous! What if observer is freed? |
463 m_pluginLoadObservers.append(observer.get()); | 463 m_pluginLoadObservers.append(observer.get()); |
464 WebDataSourceImpl::setNextPluginLoadObserver(observer.release()); | 464 WebDataSourceImpl::setNextPluginLoadObserver(observer.release()); |
465 } | 465 } |
466 | 466 |
467 FrameLoadRequest frameRequest(frame->document()->securityOrigin(), request.t
oResourceRequest(), target); | 467 FrameLoadRequest frameRequest(frame->document()->securityOrigin(), request.t
oResourceRequest(), target); |
468 UserGestureIndicator gestureIndicator(request.hasUserGesture() ? DefinitelyP
rocessingNewUserGesture : PossiblyProcessingUserGesture); | 468 UserGestureIndicator gestureIndicator(request.hasUserGesture() ? DefinitelyP
rocessingNewUserGesture : PossiblyProcessingUserGesture); |
469 frame->loader()->load(frameRequest); | 469 frame->loader()->load(frameRequest); |
470 } | 470 } |
471 | 471 |
472 void WebPluginContainerImpl::zoomLevelChanged(double zoomLevel) | 472 void WebPluginContainerImpl::zoomLevelChanged(double zoomLevel) |
473 { | 473 { |
474 WebViewImpl* view = WebViewImpl::fromPage(m_element->document()->frame()->pa
ge()); | 474 WebViewImpl* view = WebViewImpl::fromPage(m_element->document().frame()->pag
e()); |
475 view->fullFramePluginZoomLevelChanged(zoomLevel); | 475 view->fullFramePluginZoomLevelChanged(zoomLevel); |
476 } | 476 } |
477 | 477 |
478 bool WebPluginContainerImpl::isRectTopmost(const WebRect& rect) | 478 bool WebPluginContainerImpl::isRectTopmost(const WebRect& rect) |
479 { | 479 { |
480 Frame* frame = m_element->document()->frame(); | 480 Frame* frame = m_element->document().frame(); |
481 if (!frame) | 481 if (!frame) |
482 return false; | 482 return false; |
483 | 483 |
484 // hitTestResultAtPoint() takes a padding rectangle. | 484 // hitTestResultAtPoint() takes a padding rectangle. |
485 // FIXME: We'll be off by 1 when the width or height is even. | 485 // FIXME: We'll be off by 1 when the width or height is even. |
486 IntRect documentRect(x() + rect.x, y() + rect.y, rect.width, rect.height); | 486 IntRect documentRect(x() + rect.x, y() + rect.y, rect.width, rect.height); |
487 LayoutPoint center = documentRect.center(); | 487 LayoutPoint center = documentRect.center(); |
488 // Make the rect we're checking (the point surrounded by padding rects) cont
ained inside the requested rect. (Note that -1/2 is 0.) | 488 // Make the rect we're checking (the point surrounded by padding rects) cont
ained inside the requested rect. (Note that -1/2 is 0.) |
489 LayoutSize padding((documentRect.width() - 1) / 2, (documentRect.height() -
1) / 2); | 489 LayoutSize padding((documentRect.width() - 1) / 2, (documentRect.height() -
1) / 2); |
490 HitTestResult result = frame->eventHandler()->hitTestResultAtPoint(center, H
itTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::DisallowShado
wContent, padding); | 490 HitTestResult result = frame->eventHandler()->hitTestResultAtPoint(center, H
itTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::DisallowShado
wContent, padding); |
491 const HitTestResult::NodeSet& nodes = result.rectBasedTestResult(); | 491 const HitTestResult::NodeSet& nodes = result.rectBasedTestResult(); |
492 if (nodes.size() != 1) | 492 if (nodes.size() != 1) |
493 return false; | 493 return false; |
494 return nodes.first().get() == m_element; | 494 return nodes.first().get() == m_element; |
495 } | 495 } |
496 | 496 |
497 void WebPluginContainerImpl::requestTouchEventType(TouchEventRequestType request
Type) | 497 void WebPluginContainerImpl::requestTouchEventType(TouchEventRequestType request
Type) |
498 { | 498 { |
499 if (m_touchEventRequestType == requestType) | 499 if (m_touchEventRequestType == requestType) |
500 return; | 500 return; |
501 | 501 |
502 if (requestType != TouchEventRequestTypeNone && m_touchEventRequestType == T
ouchEventRequestTypeNone) | 502 if (requestType != TouchEventRequestTypeNone && m_touchEventRequestType == T
ouchEventRequestTypeNone) |
503 m_element->document()->didAddTouchEventHandler(m_element); | 503 m_element->document().didAddTouchEventHandler(m_element); |
504 else if (requestType == TouchEventRequestTypeNone && m_touchEventRequestType
!= TouchEventRequestTypeNone) | 504 else if (requestType == TouchEventRequestTypeNone && m_touchEventRequestType
!= TouchEventRequestTypeNone) |
505 m_element->document()->didRemoveTouchEventHandler(m_element); | 505 m_element->document().didRemoveTouchEventHandler(m_element); |
506 m_touchEventRequestType = requestType; | 506 m_touchEventRequestType = requestType; |
507 } | 507 } |
508 | 508 |
509 void WebPluginContainerImpl::setWantsWheelEvents(bool wantsWheelEvents) | 509 void WebPluginContainerImpl::setWantsWheelEvents(bool wantsWheelEvents) |
510 { | 510 { |
511 if (m_wantsWheelEvents == wantsWheelEvents) | 511 if (m_wantsWheelEvents == wantsWheelEvents) |
512 return; | 512 return; |
513 m_wantsWheelEvents = wantsWheelEvents; | 513 m_wantsWheelEvents = wantsWheelEvents; |
514 if (Page* page = m_element->document()->page()) { | 514 if (Page* page = m_element->document().page()) { |
515 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordina
tor()) { | 515 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordina
tor()) { |
516 if (parent() && parent()->isFrameView()) | 516 if (parent() && parent()->isFrameView()) |
517 scrollingCoordinator->frameViewLayoutUpdated(toFrameView(parent(
))); | 517 scrollingCoordinator->frameViewLayoutUpdated(toFrameView(parent(
))); |
518 } | 518 } |
519 } | 519 } |
520 } | 520 } |
521 | 521 |
522 WebPoint WebPluginContainerImpl::windowToLocalPoint(const WebPoint& point) | 522 WebPoint WebPluginContainerImpl::windowToLocalPoint(const WebPoint& point) |
523 { | 523 { |
524 ScrollView* view = parent(); | 524 ScrollView* view = parent(); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
601 { | 601 { |
602 size_t pos = m_pluginLoadObservers.find(observer); | 602 size_t pos = m_pluginLoadObservers.find(observer); |
603 if (pos == notFound) | 603 if (pos == notFound) |
604 return; | 604 return; |
605 m_pluginLoadObservers.remove(pos); | 605 m_pluginLoadObservers.remove(pos); |
606 } | 606 } |
607 | 607 |
608 ScrollbarGroup* WebPluginContainerImpl::scrollbarGroup() | 608 ScrollbarGroup* WebPluginContainerImpl::scrollbarGroup() |
609 { | 609 { |
610 if (!m_scrollbarGroup) | 610 if (!m_scrollbarGroup) |
611 m_scrollbarGroup = adoptPtr(new ScrollbarGroup(m_element->document()->fr
ame()->view(), frameRect())); | 611 m_scrollbarGroup = adoptPtr(new ScrollbarGroup(m_element->document().fra
me()->view(), frameRect())); |
612 return m_scrollbarGroup.get(); | 612 return m_scrollbarGroup.get(); |
613 } | 613 } |
614 | 614 |
615 void WebPluginContainerImpl::willStartLiveResize() | 615 void WebPluginContainerImpl::willStartLiveResize() |
616 { | 616 { |
617 if (m_scrollbarGroup) | 617 if (m_scrollbarGroup) |
618 m_scrollbarGroup->willStartLiveResize(); | 618 m_scrollbarGroup->willStartLiveResize(); |
619 } | 619 } |
620 | 620 |
621 void WebPluginContainerImpl::willEndLiveResize() | 621 void WebPluginContainerImpl::willEndLiveResize() |
(...skipping 19 matching lines...) Expand all Loading... |
641 , m_webPlugin(webPlugin) | 641 , m_webPlugin(webPlugin) |
642 , m_webLayer(0) | 642 , m_webLayer(0) |
643 , m_touchEventRequestType(TouchEventRequestTypeNone) | 643 , m_touchEventRequestType(TouchEventRequestTypeNone) |
644 , m_wantsWheelEvents(false) | 644 , m_wantsWheelEvents(false) |
645 { | 645 { |
646 } | 646 } |
647 | 647 |
648 WebPluginContainerImpl::~WebPluginContainerImpl() | 648 WebPluginContainerImpl::~WebPluginContainerImpl() |
649 { | 649 { |
650 if (m_touchEventRequestType != TouchEventRequestTypeNone) | 650 if (m_touchEventRequestType != TouchEventRequestTypeNone) |
651 m_element->document()->didRemoveTouchEventHandler(m_element); | 651 m_element->document().didRemoveTouchEventHandler(m_element); |
652 | 652 |
653 for (size_t i = 0; i < m_pluginLoadObservers.size(); ++i) | 653 for (size_t i = 0; i < m_pluginLoadObservers.size(); ++i) |
654 m_pluginLoadObservers[i]->clearPluginContainer(); | 654 m_pluginLoadObservers[i]->clearPluginContainer(); |
655 m_webPlugin->destroy(); | 655 m_webPlugin->destroy(); |
656 if (m_webLayer) | 656 if (m_webLayer) |
657 GraphicsLayer::unregisterContentsLayer(m_webLayer); | 657 GraphicsLayer::unregisterContentsLayer(m_webLayer); |
658 } | 658 } |
659 | 659 |
660 void WebPluginContainerImpl::handleMouseEvent(MouseEvent* event) | 660 void WebPluginContainerImpl::handleMouseEvent(MouseEvent* event) |
661 { | 661 { |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
768 | 768 |
769 // Copy stashed info over, and only copy here in order not to interfere | 769 // Copy stashed info over, and only copy here in order not to interfere |
770 // the ctrl-c logic above. | 770 // the ctrl-c logic above. |
771 if (currentInputEvent | 771 if (currentInputEvent |
772 && WebInputEvent::isKeyboardEventType(currentInputEvent->type)) { | 772 && WebInputEvent::isKeyboardEventType(currentInputEvent->type)) { |
773 webEvent.modifiers |= currentInputEvent->modifiers & | 773 webEvent.modifiers |= currentInputEvent->modifiers & |
774 (WebInputEvent::CapsLockOn | WebInputEvent::NumLockOn); | 774 (WebInputEvent::CapsLockOn | WebInputEvent::NumLockOn); |
775 } | 775 } |
776 | 776 |
777 // Give the client a chance to issue edit comamnds. | 777 // Give the client a chance to issue edit comamnds. |
778 WebViewImpl* view = WebViewImpl::fromPage(m_element->document()->frame()->pa
ge()); | 778 WebViewImpl* view = WebViewImpl::fromPage(m_element->document().frame()->pag
e()); |
779 if (m_webPlugin->supportsEditCommands() && view->client()) | 779 if (m_webPlugin->supportsEditCommands() && view->client()) |
780 view->client()->handleCurrentKeyboardEvent(); | 780 view->client()->handleCurrentKeyboardEvent(); |
781 | 781 |
782 WebCursorInfo cursorInfo; | 782 WebCursorInfo cursorInfo; |
783 if (m_webPlugin->handleInputEvent(webEvent, cursorInfo)) | 783 if (m_webPlugin->handleInputEvent(webEvent, cursorInfo)) |
784 event->setDefaultHandled(); | 784 event->setDefaultHandled(); |
785 } | 785 } |
786 | 786 |
787 void WebPluginContainerImpl::handleTouchEvent(TouchEvent* event) | 787 void WebPluginContainerImpl::handleTouchEvent(TouchEvent* event) |
788 { | 788 { |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
875 for (size_t i = 0; i < cutOutRects.size(); i++) | 875 for (size_t i = 0; i < cutOutRects.size(); i++) |
876 cutOutRects[i].move(-frameRect.x(), -frameRect.y()); | 876 cutOutRects[i].move(-frameRect.x(), -frameRect.y()); |
877 } | 877 } |
878 | 878 |
879 WebCore::IntRect WebPluginContainerImpl::windowClipRect() const | 879 WebCore::IntRect WebPluginContainerImpl::windowClipRect() const |
880 { | 880 { |
881 // Start by clipping to our bounds. | 881 // Start by clipping to our bounds. |
882 IntRect clipRect = | 882 IntRect clipRect = |
883 convertToContainingWindow(IntRect(0, 0, width(), height())); | 883 convertToContainingWindow(IntRect(0, 0, width(), height())); |
884 | 884 |
885 // document()->renderer() can be 0 when we receive messages from the | 885 // document().renderer() can be 0 when we receive messages from the |
886 // plugins while we are destroying a frame. | 886 // plugins while we are destroying a frame. |
887 if (m_element->renderer()->document()->renderer()) { | 887 if (m_element->renderer()->document().renderer()) { |
888 // Take our element and get the clip rect from the enclosing layer and | 888 // Take our element and get the clip rect from the enclosing layer and |
889 // frame view. | 889 // frame view. |
890 clipRect.intersect( | 890 clipRect.intersect( |
891 m_element->document()->view()->windowClipRectForFrameOwner(m_element
, true)); | 891 m_element->document().view()->windowClipRectForFrameOwner(m_element,
true)); |
892 } | 892 } |
893 | 893 |
894 return clipRect; | 894 return clipRect; |
895 } | 895 } |
896 | 896 |
897 } // namespace WebKit | 897 } // namespace WebKit |
OLD | NEW |