Title: [121400] trunk/Source/WebKit/blackberry
- Revision
- 121400
- Author
- [email protected]
- Date
- 2012-06-27 20:33:01 -0700 (Wed, 27 Jun 2012)
Log Message
[BlackBerry] Selection overlay can become visible after it has been hidden
https://bugs.webkit.org/show_bug.cgi?id=90105
Patch by Andrew Lo <[email protected]> on 2012-06-27
Reviewed by George Staikos.
When SelectionOverlay::hide is called from UI thread,
rather than setting the override opacity, dispatch to the
WebKit thread, which removes the overlay (normal case).
Internal PR164183.
Internally Reviewed by: Arvid Nilsson.
* Api/WebPage.cpp:
(BlackBerry::WebKit::WebPagePrivate::~WebPagePrivate):
(BlackBerry::WebKit::WebPage::selectionOverlay):
* Api/WebPage_p.h:
(WebPagePrivate):
* Api/WebSelectionOverlay.h:
* WebKitSupport/SelectionOverlay.cpp:
(BlackBerry::WebKit::SelectionOverlay::SelectionOverlay):
(BlackBerry::WebKit::SelectionOverlay::hide):
* WebKitSupport/SelectionOverlay.h:
(BlackBerry::WebKit::SelectionOverlay::create):
(SelectionOverlay):
Modified Paths
Diff
Modified: trunk/Source/WebKit/blackberry/Api/WebPage.cpp (121399 => 121400)
--- trunk/Source/WebKit/blackberry/Api/WebPage.cpp 2012-06-28 03:22:40 UTC (rev 121399)
+++ trunk/Source/WebKit/blackberry/Api/WebPage.cpp 2012-06-28 03:33:01 UTC (rev 121400)
@@ -456,6 +456,11 @@
delete m_dumpRenderTree;
m_dumpRenderTree = 0;
#endif
+
+#if USE(ACCELERATED_COMPOSITING)
+ deleteGuardedObject(m_selectionOverlay);
+ m_selectionOverlay = 0;
+#endif
}
WebPage::~WebPage()
@@ -6478,7 +6483,7 @@
WebSelectionOverlay* WebPage::selectionOverlay() const
{
- return d->m_selectionOverlay.get();
+ return d->m_selectionOverlay;
}
void WebPage::addOverlay(WebOverlay* overlay)
Modified: trunk/Source/WebKit/blackberry/Api/WebPage_p.h (121399 => 121400)
--- trunk/Source/WebKit/blackberry/Api/WebPage_p.h 2012-06-28 03:22:40 UTC (rev 121399)
+++ trunk/Source/WebKit/blackberry/Api/WebPage_p.h 2012-06-28 03:33:01 UTC (rev 121400)
@@ -447,7 +447,7 @@
RefPtr<WebCore::Node> m_currentContextNode;
WebSettings* m_webSettings;
OwnPtr<WebTapHighlight> m_tapHighlight;
- OwnPtr<WebSelectionOverlay> m_selectionOverlay;
+ WebSelectionOverlay* m_selectionOverlay;
#if ENABLE(_javascript__DEBUGGER)
OwnPtr<WebCore::_javascript_DebuggerBlackBerry> m_scriptDebugger;
Modified: trunk/Source/WebKit/blackberry/Api/WebSelectionOverlay.h (121399 => 121400)
--- trunk/Source/WebKit/blackberry/Api/WebSelectionOverlay.h 2012-06-28 03:22:40 UTC (rev 121399)
+++ trunk/Source/WebKit/blackberry/Api/WebSelectionOverlay.h 2012-06-28 03:33:01 UTC (rev 121400)
@@ -21,12 +21,13 @@
#include "BlackBerryGlobal.h"
+#include <BlackBerryPlatformGuardedPointer.h>
#include <BlackBerryPlatformIntRectRegion.h>
namespace BlackBerry {
namespace WebKit {
-class BLACKBERRY_EXPORT WebSelectionOverlay {
+class BLACKBERRY_EXPORT WebSelectionOverlay : public BlackBerry::Platform::GuardedPointerBase {
public:
virtual ~WebSelectionOverlay() { }
Modified: trunk/Source/WebKit/blackberry/ChangeLog (121399 => 121400)
--- trunk/Source/WebKit/blackberry/ChangeLog 2012-06-28 03:22:40 UTC (rev 121399)
+++ trunk/Source/WebKit/blackberry/ChangeLog 2012-06-28 03:33:01 UTC (rev 121400)
@@ -1,3 +1,30 @@
+2012-06-27 Andrew Lo <[email protected]>
+
+ [BlackBerry] Selection overlay can become visible after it has been hidden
+ https://bugs.webkit.org/show_bug.cgi?id=90105
+
+ Reviewed by George Staikos.
+
+ When SelectionOverlay::hide is called from UI thread,
+ rather than setting the override opacity, dispatch to the
+ WebKit thread, which removes the overlay (normal case).
+
+ Internal PR164183.
+ Internally Reviewed by: Arvid Nilsson.
+
+ * Api/WebPage.cpp:
+ (BlackBerry::WebKit::WebPagePrivate::~WebPagePrivate):
+ (BlackBerry::WebKit::WebPage::selectionOverlay):
+ * Api/WebPage_p.h:
+ (WebPagePrivate):
+ * Api/WebSelectionOverlay.h:
+ * WebKitSupport/SelectionOverlay.cpp:
+ (BlackBerry::WebKit::SelectionOverlay::SelectionOverlay):
+ (BlackBerry::WebKit::SelectionOverlay::hide):
+ * WebKitSupport/SelectionOverlay.h:
+ (BlackBerry::WebKit::SelectionOverlay::create):
+ (SelectionOverlay):
+
2012-06-25 Mark Hahnenberg <[email protected]>
JSLock should be per-JSGlobalData
Modified: trunk/Source/WebKit/blackberry/WebKitSupport/SelectionOverlay.cpp (121399 => 121400)
--- trunk/Source/WebKit/blackberry/WebKitSupport/SelectionOverlay.cpp 2012-06-28 03:22:40 UTC (rev 121399)
+++ trunk/Source/WebKit/blackberry/WebKitSupport/SelectionOverlay.cpp 2012-06-28 03:33:01 UTC (rev 121400)
@@ -23,6 +23,7 @@
#include "SelectionOverlay.h"
#include "GraphicsContext.h"
+#include "LayerMessage.h"
#include "Path.h"
#include "PlatformContextSkia.h"
#include "RenderTheme.h"
@@ -37,6 +38,7 @@
SelectionOverlay::SelectionOverlay(WebPagePrivate* page)
: m_page(page)
+ , m_hideDispatched(false)
{
}
@@ -69,15 +71,27 @@
void SelectionOverlay::hide()
{
+ // Track a dispatched message, we don't want to flood the webkit thread.
+ // There can be as many as one more message enqued as needed but never less.
+ if (isWebKitThread())
+ m_hideDispatched = false;
+ else if (m_hideDispatched) {
+ // Early return if there is message already pending on the webkit thread.
+ return;
+ }
+ if (!isWebKitThread()) {
+ m_hideDispatched = true;
+ // Normally, this method is called on the WebKit thread, but it can also be
+ // called from the compositing thread.
+ dispatchWebKitMessage(BlackBerry::Platform::createMethodCallMessage(&SelectionOverlay::hide, this));
+ return;
+ }
+ ASSERT(BlackBerry::Platform::webKitThreadMessageClient()->isCurrentThread());
+
if (!m_overlay)
return;
- // Normally, this method is called on the WebKit thread, but it can also be
- // called from the compositing thread.
- if (BlackBerry::Platform::webKitThreadMessageClient()->isCurrentThread())
- m_page->m_webPage->removeOverlay(m_overlay.get());
- else if (BlackBerry::Platform::userInterfaceThreadMessageClient()->isCurrentThread())
- m_overlay->override()->setOpacity(0);
+ m_page->m_webPage->removeOverlay(m_overlay.get());
}
void SelectionOverlay::notifySyncRequired(const GraphicsLayer*)
Modified: trunk/Source/WebKit/blackberry/WebKitSupport/SelectionOverlay.h (121399 => 121400)
--- trunk/Source/WebKit/blackberry/WebKitSupport/SelectionOverlay.h 2012-06-28 03:22:40 UTC (rev 121399)
+++ trunk/Source/WebKit/blackberry/WebKitSupport/SelectionOverlay.h 2012-06-28 03:33:01 UTC (rev 121400)
@@ -30,7 +30,6 @@
#include <BlackBerryPlatformIntRectRegion.h>
#include <wtf/OwnPtr.h>
-#include <wtf/PassOwnPtr.h>
namespace BlackBerry {
namespace WebKit {
@@ -39,9 +38,9 @@
class SelectionOverlay : public WebSelectionOverlay, public WebCore::GraphicsLayerClient {
public:
- static PassOwnPtr<SelectionOverlay> create(WebPagePrivate* page)
+ static SelectionOverlay* create(WebPagePrivate* page)
{
- return adoptPtr(new SelectionOverlay(page));
+ return new SelectionOverlay(page);
}
virtual ~SelectionOverlay();
@@ -64,6 +63,7 @@
WebPagePrivate* m_page;
OwnPtr<WebOverlay> m_overlay;
BlackBerry::Platform::IntRectRegion m_region;
+ bool m_hideDispatched;
};
} // namespace WebKit
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes