| 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 { |
| 429 LocalFrame* frame = m_element->document().frame(); | 434 if (!frame()) |
| 430 if (!frame) | |
| 431 return; | 435 return; |
| 432 frame->script().cleanupScriptObjectsForPlugin(this); | 436 |
| 437 frame()->script().cleanupScriptObjectsForPlugin(this); |
| 433 } | 438 } |
| 434 | 439 |
| 435 NPObject* WebPluginContainerImpl::scriptableObjectForElement() | 440 NPObject* WebPluginContainerImpl::scriptableObjectForElement() |
| 436 { | 441 { |
| 437 return m_element->getNPObject(); | 442 return m_element->getNPObject(); |
| 438 } | 443 } |
| 439 | 444 |
| 440 WebString WebPluginContainerImpl::executeScriptURL(const WebURL& url, bool popup
sAllowed) | 445 WebString WebPluginContainerImpl::executeScriptURL(const WebURL& url, bool popup
sAllowed) |
| 441 { | 446 { |
| 442 LocalFrame* frame = m_element->document().frame(); | 447 LocalFrame* frame = m_element->document().frame(); |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 646 context->setFillColor(Color(0xCC, 0xCC, 0xCC)); | 651 context->setFillColor(Color(0xCC, 0xCC, 0xCC)); |
| 647 context->fillRect(intersection(horizontalOverhangArea, dirtyRect)); | 652 context->fillRect(intersection(horizontalOverhangArea, dirtyRect)); |
| 648 context->fillRect(intersection(verticalOverhangArea, dirtyRect)); | 653 context->fillRect(intersection(verticalOverhangArea, dirtyRect)); |
| 649 context->restore(); | 654 context->restore(); |
| 650 return true; | 655 return true; |
| 651 } | 656 } |
| 652 | 657 |
| 653 // Private methods ------------------------------------------------------------- | 658 // Private methods ------------------------------------------------------------- |
| 654 | 659 |
| 655 WebPluginContainerImpl::WebPluginContainerImpl(WebCore::HTMLPlugInElement* eleme
nt, WebPlugin* webPlugin) | 660 WebPluginContainerImpl::WebPluginContainerImpl(WebCore::HTMLPlugInElement* eleme
nt, WebPlugin* webPlugin) |
| 656 : m_element(element) | 661 : WebCore::FrameDestructionObserver(element->document().frame()) |
| 662 , m_element(element) |
| 657 , m_webPlugin(webPlugin) | 663 , m_webPlugin(webPlugin) |
| 658 , m_webLayer(0) | 664 , m_webLayer(0) |
| 659 , m_touchEventRequestType(TouchEventRequestTypeNone) | 665 , m_touchEventRequestType(TouchEventRequestTypeNone) |
| 660 , m_wantsWheelEvents(false) | 666 , m_wantsWheelEvents(false) |
| 661 { | 667 { |
| 662 } | 668 } |
| 663 | 669 |
| 664 WebPluginContainerImpl::~WebPluginContainerImpl() | 670 WebPluginContainerImpl::~WebPluginContainerImpl() |
| 665 { | 671 { |
| 672 #if ENABLE(OILPAN) |
| 673 // The element (and its document) are heap allocated and may |
| 674 // have been finalized by now; unsafe to unregister the touch |
| 675 // event handler at this stage. |
| 676 // |
| 677 // This is acceptable, as the widget will unregister itself if it |
| 678 // is cleanly detached. If an explicit detach doesn't happen, this |
| 679 // container is assumed to have died with the plugin element (and |
| 680 // its document), hence no unregistration step is needed. |
| 681 // |
| 682 m_element = 0; |
| 683 #else |
| 666 if (m_touchEventRequestType != TouchEventRequestTypeNone) | 684 if (m_touchEventRequestType != TouchEventRequestTypeNone) |
| 667 m_element->document().didRemoveTouchEventHandler(m_element); | 685 m_element->document().didRemoveTouchEventHandler(m_element); |
| 686 #endif |
| 668 | 687 |
| 669 for (size_t i = 0; i < m_pluginLoadObservers.size(); ++i) | 688 for (size_t i = 0; i < m_pluginLoadObservers.size(); ++i) |
| 670 m_pluginLoadObservers[i]->clearPluginContainer(); | 689 m_pluginLoadObservers[i]->clearPluginContainer(); |
| 671 m_webPlugin->destroy(); | 690 m_webPlugin->destroy(); |
| 672 if (m_webLayer) | 691 if (m_webLayer) |
| 673 GraphicsLayer::unregisterContentsLayer(m_webLayer); | 692 GraphicsLayer::unregisterContentsLayer(m_webLayer); |
| 674 } | 693 } |
| 675 | 694 |
| 695 #if ENABLE(OILPAN) |
| 696 void WebPluginContainerImpl::detach() |
| 697 { |
| 698 if (m_touchEventRequestType != TouchEventRequestTypeNone) |
| 699 m_element->document().didRemoveTouchEventHandler(m_element); |
| 700 |
| 701 setWebLayer(0); |
| 702 } |
| 703 #endif |
| 704 |
| 676 void WebPluginContainerImpl::handleMouseEvent(MouseEvent* event) | 705 void WebPluginContainerImpl::handleMouseEvent(MouseEvent* event) |
| 677 { | 706 { |
| 678 ASSERT(parent()->isFrameView()); | 707 ASSERT(parent()->isFrameView()); |
| 679 | 708 |
| 680 if (event->isDragEvent()) { | 709 if (event->isDragEvent()) { |
| 681 if (m_webPlugin->canProcessDrag()) | 710 if (m_webPlugin->canProcessDrag()) |
| 682 handleDragEvent(event); | 711 handleDragEvent(event); |
| 683 return; | 712 return; |
| 684 } | 713 } |
| 685 | 714 |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 911 | 940 |
| 912 return clipRect; | 941 return clipRect; |
| 913 } | 942 } |
| 914 | 943 |
| 915 bool WebPluginContainerImpl::pluginShouldPersist() const | 944 bool WebPluginContainerImpl::pluginShouldPersist() const |
| 916 { | 945 { |
| 917 return m_webPlugin->shouldPersist(); | 946 return m_webPlugin->shouldPersist(); |
| 918 } | 947 } |
| 919 | 948 |
| 920 } // namespace blink | 949 } // namespace blink |
| OLD | NEW |