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 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
296 | 296 |
297 // If either of the layers is null we need to switch between hardware | 297 // If either of the layers is null we need to switch between hardware |
298 // and software compositing. | 298 // and software compositing. |
299 bool needsCompositingUpdate = !m_webLayer || !layer; | 299 bool needsCompositingUpdate = !m_webLayer || !layer; |
300 | 300 |
301 m_webLayer = layer; | 301 m_webLayer = layer; |
302 | 302 |
303 if (!needsCompositingUpdate) | 303 if (!needsCompositingUpdate) |
304 return; | 304 return; |
305 | 305 |
306 #if ENABLE(OILPAN) | |
307 if (!m_element) | |
308 return; | |
309 #endif | |
310 | |
306 m_element->setNeedsCompositingUpdate(); | 311 m_element->setNeedsCompositingUpdate(); |
307 // Being composited or not affects the self painting layer bit | 312 // Being composited or not affects the self painting layer bit |
308 // on the RenderLayer. | 313 // on the RenderLayer. |
309 if (RenderPart* renderer = m_element->renderPart()) { | 314 if (RenderPart* renderer = m_element->renderPart()) { |
310 ASSERT(renderer->hasLayer()); | 315 ASSERT(renderer->hasLayer()); |
311 renderer->layer()->updateSelfPaintingLayer(); | 316 renderer->layer()->updateSelfPaintingLayer(); |
312 } | 317 } |
313 } | 318 } |
314 | 319 |
315 bool WebPluginContainerImpl::supportsPaginatedPrint() const | 320 bool WebPluginContainerImpl::supportsPaginatedPrint() const |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
419 m_scrollbarGroup->setFrameRect(frameRect()); | 424 m_scrollbarGroup->setFrameRect(frameRect()); |
420 } | 425 } |
421 } | 426 } |
422 | 427 |
423 void WebPluginContainerImpl::allowScriptObjects() | 428 void WebPluginContainerImpl::allowScriptObjects() |
424 { | 429 { |
425 } | 430 } |
426 | 431 |
427 void WebPluginContainerImpl::clearScriptObjects() | 432 void WebPluginContainerImpl::clearScriptObjects() |
428 { | 433 { |
434 #if ENABLE(OILPAN) | |
435 if (m_scriptController) { | |
436 m_scriptController->cleanupScriptObjectsForPlugin(this); | |
haraken
2014/06/25 05:40:16
Maybe should we call cleanupScriptObjectsForPlugin
sof
2014/06/25 05:44:25
Is Node::detach() (from where we call this contain
haraken
2014/06/25 05:54:24
ah, understood.
Then would it be possible to call
sof
2014/06/25 07:09:32
(cleanupScriptObjectsForPlugin() is something the
| |
437 m_scriptController = nullptr; | |
438 } | |
439 #else | |
429 LocalFrame* frame = m_element->document().frame(); | 440 LocalFrame* frame = m_element->document().frame(); |
430 if (!frame) | 441 if (!frame) |
431 return; | 442 return; |
432 frame->script().cleanupScriptObjectsForPlugin(this); | 443 frame->script().cleanupScriptObjectsForPlugin(this); |
444 #endif | |
433 } | 445 } |
434 | 446 |
447 #if ENABLE(OILPAN) | |
448 void WebPluginContainerImpl::setScriptController(WebCore::ScriptController* scri ptController) | |
449 { | |
450 m_scriptController = scriptController; | |
451 } | |
452 #endif | |
453 | |
435 NPObject* WebPluginContainerImpl::scriptableObjectForElement() | 454 NPObject* WebPluginContainerImpl::scriptableObjectForElement() |
436 { | 455 { |
437 return m_element->getNPObject(); | 456 return m_element->getNPObject(); |
438 } | 457 } |
439 | 458 |
440 WebString WebPluginContainerImpl::executeScriptURL(const WebURL& url, bool popup sAllowed) | 459 WebString WebPluginContainerImpl::executeScriptURL(const WebURL& url, bool popup sAllowed) |
441 { | 460 { |
442 LocalFrame* frame = m_element->document().frame(); | 461 LocalFrame* frame = m_element->document().frame(); |
443 if (!frame) | 462 if (!frame) |
444 return WebString(); | 463 return WebString(); |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
648 context->fillRect(intersection(verticalOverhangArea, dirtyRect)); | 667 context->fillRect(intersection(verticalOverhangArea, dirtyRect)); |
649 context->restore(); | 668 context->restore(); |
650 return true; | 669 return true; |
651 } | 670 } |
652 | 671 |
653 // Private methods ------------------------------------------------------------- | 672 // Private methods ------------------------------------------------------------- |
654 | 673 |
655 WebPluginContainerImpl::WebPluginContainerImpl(WebCore::HTMLPlugInElement* eleme nt, WebPlugin* webPlugin) | 674 WebPluginContainerImpl::WebPluginContainerImpl(WebCore::HTMLPlugInElement* eleme nt, WebPlugin* webPlugin) |
656 : m_element(element) | 675 : m_element(element) |
657 , m_webPlugin(webPlugin) | 676 , m_webPlugin(webPlugin) |
677 #if ENABLE(OILPAN) | |
678 , m_scriptController(0) | |
679 #endif | |
658 , m_webLayer(0) | 680 , m_webLayer(0) |
659 , m_touchEventRequestType(TouchEventRequestTypeNone) | 681 , m_touchEventRequestType(TouchEventRequestTypeNone) |
660 , m_wantsWheelEvents(false) | 682 , m_wantsWheelEvents(false) |
661 { | 683 { |
662 } | 684 } |
663 | 685 |
664 WebPluginContainerImpl::~WebPluginContainerImpl() | 686 WebPluginContainerImpl::~WebPluginContainerImpl() |
665 { | 687 { |
688 #if ENABLE(OILPAN) | |
689 // The element (and its document) are heap allocated and may | |
690 // have been finalized by now; unsafe to unregister the touch | |
691 // event handler at this stage. | |
692 // | |
693 // This is acceptable, as the widget will unregister itself if it | |
694 // is cleanly detached. If an explicit detach doesn't happen, this | |
695 // container is assumed to have died with the plugin element (and | |
696 // its document), hence no unregistration step is needed. | |
697 // | |
698 m_element = 0; | |
699 #else | |
666 if (m_touchEventRequestType != TouchEventRequestTypeNone) | 700 if (m_touchEventRequestType != TouchEventRequestTypeNone) |
667 m_element->document().didRemoveTouchEventHandler(m_element); | 701 m_element->document().didRemoveTouchEventHandler(m_element); |
702 #endif | |
668 | 703 |
669 for (size_t i = 0; i < m_pluginLoadObservers.size(); ++i) | 704 for (size_t i = 0; i < m_pluginLoadObservers.size(); ++i) |
670 m_pluginLoadObservers[i]->clearPluginContainer(); | 705 m_pluginLoadObservers[i]->clearPluginContainer(); |
671 m_webPlugin->destroy(); | 706 m_webPlugin->destroy(); |
672 if (m_webLayer) | 707 if (m_webLayer) |
673 GraphicsLayer::unregisterContentsLayer(m_webLayer); | 708 GraphicsLayer::unregisterContentsLayer(m_webLayer); |
haraken
2014/06/25 05:40:16
Probably can we move the line 704 - 708 to detach(
| |
674 } | 709 } |
675 | 710 |
711 #if ENABLE(OILPAN) | |
712 void WebPluginContainerImpl::detach() | |
713 { | |
714 if (m_touchEventRequestType != TouchEventRequestTypeNone) | |
715 m_element->document().didRemoveTouchEventHandler(m_element); | |
716 | |
717 setWebLayer(0); | |
haraken
2014/06/25 05:54:24
Just help me understand: Calling setWebLayer(0) is
sof
2014/06/25 07:09:32
Exactly so; we cannot do it at finalization time a
| |
718 } | |
719 #endif | |
720 | |
676 void WebPluginContainerImpl::handleMouseEvent(MouseEvent* event) | 721 void WebPluginContainerImpl::handleMouseEvent(MouseEvent* event) |
677 { | 722 { |
678 ASSERT(parent()->isFrameView()); | 723 ASSERT(parent()->isFrameView()); |
679 | 724 |
680 if (event->isDragEvent()) { | 725 if (event->isDragEvent()) { |
681 if (m_webPlugin->canProcessDrag()) | 726 if (m_webPlugin->canProcessDrag()) |
682 handleDragEvent(event); | 727 handleDragEvent(event); |
683 return; | 728 return; |
684 } | 729 } |
685 | 730 |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
911 | 956 |
912 return clipRect; | 957 return clipRect; |
913 } | 958 } |
914 | 959 |
915 bool WebPluginContainerImpl::pluginShouldPersist() const | 960 bool WebPluginContainerImpl::pluginShouldPersist() const |
916 { | 961 { |
917 return m_webPlugin->shouldPersist(); | 962 return m_webPlugin->shouldPersist(); |
918 } | 963 } |
919 | 964 |
920 } // namespace blink | 965 } // namespace blink |
OLD | NEW |