Remove ActiveNodeContext in favour of BlackBerry::Platform::WebContext
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 13 Mar 2012 15:02:49 +0000 (15:02 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 13 Mar 2012 15:02:49 +0000 (15:02 +0000)
https://bugs.webkit.org/show_bug.cgi?id=80984

Remove ActiveNodeContext, and switch the implementation to
provide a BlackBerry::Platform::WebContext. The new object
adds an explicit IsImage flag, as well as IsAudio and IsVideo
for the HTML5 elements.

Note that for many videos both IsVideo and IsAudio will be true,
as videos typically have audio streams as well.

Patch by Mike Lattanzio <mlattanzio@rim.com> on 2012-03-13
Reviewed by George Staikos.

* Api/ActiveNodeContext.h: Removed.
* Api/WebPage.cpp:
(BlackBerry::WebKit::WebPagePrivate::webContext):
(BlackBerry::WebKit::WebPage::webContext):
* Api/WebPage.h:
* Api/WebPage_p.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@110562 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/blackberry/Api/ActiveNodeContext.h [deleted file]
Source/WebKit/blackberry/Api/WebPage.cpp
Source/WebKit/blackberry/Api/WebPage.h
Source/WebKit/blackberry/Api/WebPage_p.h
Source/WebKit/blackberry/ChangeLog

diff --git a/Source/WebKit/blackberry/Api/ActiveNodeContext.h b/Source/WebKit/blackberry/Api/ActiveNodeContext.h
deleted file mode 100644 (file)
index 1258d25..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2010, 2011, 2012 Research In Motion Limited. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef ActiveNodeContext_h
-#define ActiveNodeContext_h
-
-#include "WebString.h"
-
-namespace BlackBerry {
-namespace WebKit {
-
-class ActiveNodeContext {
-public:
-    // We assume a default context should be selectable, but nothing else.
-    ActiveNodeContext()
-        : m_flags(IsSelectable)
-        {
-        }
-
-    enum ContextFlags { IsFocusable = 0x01,
-                        IsInput = 0x02,
-                        IsPassword = 0x04,
-                        IsSelectable = 0x08,
-                        IsSingleLine = 0x10, };
-
-    bool isFocusable() const { return m_flags & IsFocusable; }
-    bool isInput() const { return m_flags & IsInput; }
-    bool isPassword() const { return m_flags & IsPassword; }
-    bool isSelectable() const { return m_flags & IsSelectable; }
-    bool isSingleLine() const { return m_flags & IsSingleLine; }
-
-    void setFlag(ContextFlags flag) { m_flags |= flag; }
-    void resetFlag(ContextFlags flag) { m_flags &= ~flag; }
-
-    const WebString& imageAlt() const { return m_imageAlt; }
-    void setImageAlt(const WebString& string) { m_imageAlt = string; }
-
-    const WebString& imageSrc() const { return m_imageSrc; }
-    void setImageSrc(const WebString& string) { m_imageSrc = string; }
-
-    const WebString& pattern() const { return m_pattern; }
-    void setPattern(const WebString& string) { m_pattern = string; }
-
-    const WebString& text() const { return m_text; }
-    void setText(const WebString& string) { m_text = string; }
-
-    const WebString& url() const { return m_url; }
-    void setUrl(const WebString& string) { m_url = string; }
-
-private:
-    unsigned m_flags;
-    WebString m_imageAlt;
-    WebString m_imageSrc;
-    WebString m_pattern;
-    WebString m_text;
-    WebString m_url;
-};
-
-}
-}
-#endif // ActiveNodeContext_h
index ad43360..3e10e64 100644 (file)
@@ -57,6 +57,7 @@
 #include "HTMLFrameOwnerElement.h"
 #include "HTMLImageElement.h"
 #include "HTMLInputElement.h"
+#include "HTMLMediaElement.h"
 #include "HTMLNames.h"
 #include "HTMLParserIdioms.h"
 #include "HTTPParsers.h"
@@ -1992,9 +1993,9 @@ bool WebPagePrivate::useFixedLayout() const
     return true;
 }
 
-ActiveNodeContext WebPagePrivate::activeNodeContext(TargetDetectionStrategy strategy)
+Platform::WebContext WebPagePrivate::webContext(TargetDetectionStrategy strategy)
 {
-    ActiveNodeContext context;
+    Platform::WebContext context;
 
     RefPtr<Node> node = contextNode(strategy);
     m_currentContextNode = node;
@@ -2013,10 +2014,10 @@ ActiveNodeContext WebPagePrivate::activeNodeContext(TargetDetectionStrategy stra
 
         String pattern = findPatternStringForUrl(href);
         if (!pattern.isEmpty())
-            context.setPattern(pattern);
+            context.setPattern(pattern.utf8().data());
 
         if (!href.string().isEmpty()) {
-            context.setUrl(href.string());
+            context.setUrl(href.string().utf8().data());
 
             // Links are non-selectable by default, but selection should be allowed
             // providing the page is selectable, use the parent to determine it.
@@ -2026,58 +2027,75 @@ ActiveNodeContext WebPagePrivate::activeNodeContext(TargetDetectionStrategy stra
     }
 
     if (!nodeAllowSelectionOverride && !node->canStartSelection())
-        context.resetFlag(ActiveNodeContext::IsSelectable);
+        context.resetFlag(Platform::WebContext::IsSelectable);
 
     if (node->isHTMLElement()) {
         HTMLImageElement* imageElement = 0;
+        HTMLMediaElement* mediaElement = 0;
+
         if (node->hasTagName(HTMLNames::imgTag))
             imageElement = static_cast<HTMLImageElement*>(node.get());
         else if (node->hasTagName(HTMLNames::areaTag))
             imageElement = static_cast<HTMLAreaElement*>(node.get())->imageElement();
+
+        if (static_cast<HTMLElement*>(node.get())->isMediaElement())
+            mediaElement = static_cast<HTMLMediaElement*>(node.get());
+
         if (imageElement && imageElement->renderer()) {
+            context.setFlag(Platform::WebContext::IsImage);
             // FIXME: At the mean time, we only show "Save Image" when the image data is available.
             if (CachedResource* cachedResource = imageElement->cachedImage()) {
                 if (cachedResource->isLoaded() && cachedResource->data()) {
                     String url = stripLeadingAndTrailingHTMLSpaces(imageElement->getAttribute(HTMLNames::srcAttr).string());
-                    context.setImageSrc(node->document()->completeURL(url).string());
+                    context.setSrc(node->document()->completeURL(url).string().utf8().data());
                 }
             }
             String alt = imageElement->altText();
             if (!alt.isNull())
-                context.setImageAlt(alt);
+                context.setAlt(alt.utf8().data());
+        }
+
+        if (mediaElement) {
+            if (mediaElement->hasAudio())
+                context.setFlag(Platform::WebContext::IsAudio);
+            if (mediaElement->hasVideo())
+                context.setFlag(Platform::WebContext::IsVideo);
+
+            String src = stripLeadingAndTrailingHTMLSpaces(mediaElement->getAttribute(HTMLNames::srcAttr).string());
+            context.setSrc(node->document()->completeURL(src).string().utf8().data());
         }
     }
 
     if (node->isTextNode()) {
         Text* curText = static_cast<Text*>(node.get());
         if (!curText->wholeText().isEmpty())
-            context.setText(curText->wholeText());
+            context.setText(curText->wholeText().utf8().data());
     }
 
     if (node->isElementNode()) {
         Element* element = static_cast<Element*>(node->shadowAncestorNode());
         if (DOMSupport::isTextBasedContentEditableElement(element)) {
-            context.setFlag(ActiveNodeContext::IsInput);
+            context.setFlag(Platform::WebContext::IsInput);
             if (element->hasTagName(HTMLNames::inputTag))
-                context.setFlag(ActiveNodeContext::IsSingleLine);
+                context.setFlag(Platform::WebContext::IsSingleLine);
             if (DOMSupport::isPasswordElement(element))
-                context.setFlag(ActiveNodeContext::IsPassword);
+                context.setFlag(Platform::WebContext::IsPassword);
 
             String elementText(DOMSupport::inputElementText(element));
             if (!elementText.stripWhiteSpace().isEmpty())
-                context.setText(elementText);
+                context.setText(elementText.utf8().data());
         }
     }
 
     if (node->isFocusable())
-        context.setFlag(ActiveNodeContext::IsFocusable);
+        context.setFlag(Platform::WebContext::IsFocusable);
 
     return context;
 }
 
-ActiveNodeContext WebPage::activeNodeContext(TargetDetectionStrategy strategy) const
+Platform::WebContext WebPage::webContext(TargetDetectionStrategy strategy) const
 {
-    return d->activeNodeContext(strategy);
+    return d->webContext(strategy);
 }
 
 void WebPagePrivate::updateCursor()
index 3a883ce..e9eed23 100644 (file)
 #ifndef WebPage_h
 #define WebPage_h
 
-#include "ActiveNodeContext.h"
 #include "BlackBerryGlobal.h"
+#include "WebString.h"
+
 #include <BlackBerryPlatformGuardedPointer.h>
 #include <BlackBerryPlatformInputEvents.h>
+#include <BlackBerryPlatformWebContext.h>
 #include <imf/input_data.h>
 #include <network/NetworkRequest.h>
 
@@ -257,7 +259,7 @@ public:
 
     WebString textHasAttribute(const WebString& query) const;
 
-    ActiveNodeContext activeNodeContext(TargetDetectionStrategy) const;
+    Platform::WebContext webContext(TargetDetectionStrategy) const;
 
     typedef intptr_t BackForwardId;
     struct BackForwardEntry {
index ed3739c..1e3d226 100644 (file)
@@ -266,7 +266,7 @@ public:
     void notifyPluginRectChanged(int id, const WebCore::IntRect& rectChanged);
 
     // Context Methods.
-    ActiveNodeContext activeNodeContext(TargetDetectionStrategy);
+    Platform::WebContext webContext(TargetDetectionStrategy);
     PassRefPtr<WebCore::Node> contextNode(TargetDetectionStrategy);
 
 #if ENABLE(VIEWPORT_REFLOW)
index e2d32a1..0ce92a1 100644 (file)
@@ -1,3 +1,25 @@
+2012-03-13  Mike Lattanzio  <mlattanzio@rim.com>
+
+        Remove ActiveNodeContext in favour of BlackBerry::Platform::WebContext
+        https://bugs.webkit.org/show_bug.cgi?id=80984
+
+        Remove ActiveNodeContext, and switch the implementation to
+        provide a BlackBerry::Platform::WebContext. The new object
+        adds an explicit IsImage flag, as well as IsAudio and IsVideo
+        for the HTML5 elements.
+
+        Note that for many videos both IsVideo and IsAudio will be true,
+        as videos typically have audio streams as well.
+
+        Reviewed by George Staikos.
+
+        * Api/ActiveNodeContext.h: Removed.
+        * Api/WebPage.cpp:
+        (BlackBerry::WebKit::WebPagePrivate::webContext):
+        (BlackBerry::WebKit::WebPage::webContext):
+        * Api/WebPage.h:
+        * Api/WebPage_p.h:
+
 2012-03-12  Andy Chen  <andchen@rim.com>
 
         [Blackberry] Make the process of marking all matches interruptible and asynchronous for find-in-page