2011-03-30 MORITA Hajime <morrita@google.com>
authormorrita@google.com <morrita@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 30 Mar 2011 17:50:22 +0000 (17:50 +0000)
committermorrita@google.com <morrita@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 30 Mar 2011 17:50:22 +0000 (17:50 +0000)
        Reviewed by Dimitri Glazkov.

        [Chromium] Expose the shadow DOM to DumpRenderTree JS tests.
        https://bugs.webkit.org/show_bug.cgi?id=56573

        Added:
        - WebBindins::makeNode() to convert WebNode to a JS object, and
        - WebElement::shadowRoot().

        * public/WebBindings.h:
        * public/WebElement.h:
        * src/WebBindings.cpp:
        (WebKit::makeNodeImpl):
        (WebKit::WebBindings::makeNode):
        * src/WebElement.cpp:
        (WebKit::WebElement::shadowRoot):
2011-03-30  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        [Chromium] Expose the shadow DOM to DumpRenderTree JS tests.
        https://bugs.webkit.org/show_bug.cgi?id=56573

        Added LayoutTestController.shadowRoot() to Chromium DRT.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::shadowRoot):
        * DumpRenderTree/chromium/LayoutTestController.h:

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

Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/public/WebBindings.h
Source/WebKit/chromium/public/WebElement.h
Source/WebKit/chromium/src/WebBindings.cpp
Source/WebKit/chromium/src/WebElement.cpp
Tools/ChangeLog
Tools/DumpRenderTree/chromium/LayoutTestController.cpp
Tools/DumpRenderTree/chromium/LayoutTestController.h

index 6a4352f..426bc40 100644 (file)
@@ -1,3 +1,22 @@
+2011-03-30  MORITA Hajime  <morrita@google.com>
+
+        Reviewed by Dimitri Glazkov.
+
+        [Chromium] Expose the shadow DOM to DumpRenderTree JS tests.
+        https://bugs.webkit.org/show_bug.cgi?id=56573
+
+        Added:
+        - WebBindins::makeNode() to convert WebNode to a JS object, and
+        - WebElement::shadowRoot().
+
+        * public/WebBindings.h:
+        * public/WebElement.h:
+        * src/WebBindings.cpp:
+        (WebKit::makeNodeImpl):
+        (WebKit::WebBindings::makeNode):
+        * src/WebElement.cpp:
+        (WebKit::WebElement::shadowRoot):
+
 2011-03-30  Mario Sanchez Prada  <msanchez@igalia.com>
 
         Reviewed by Chris Fleizach.
index 43d6f84..149bff3 100644 (file)
@@ -40,6 +40,7 @@ namespace WebKit {
 
 class WebDragData;
 class WebElement;
+class WebNode;
 class WebRange;
 
 // A haphazard collection of functions for dealing with plugins.
@@ -137,6 +138,7 @@ public:
 
     WEBKIT_API static NPObject* makeIntArray(const WebVector<int>&);
     WEBKIT_API static NPObject* makeStringArray(const WebVector<WebString>&);
+    WEBKIT_API static NPObject* makeNode(const WebNode&);
 
     // Exceptions -------------------------------------------------------------
 
index 8d51e98..2072dd3 100644 (file)
@@ -58,6 +58,7 @@ class WebNamedNodeMap;
         WEBKIT_API bool setAttribute(const WebString& name, const WebString& value);
         WEBKIT_API WebNamedNodeMap attributes() const;
         WEBKIT_API WebString innerText() const;
+        WEBKIT_API WebNode shadowRoot();
 
         // Returns the language code specified for this element.  This attribute
         // is inherited, so the returned value is drawn from the closest parent
index 70ccfc0..4012d1c 100644 (file)
@@ -41,6 +41,7 @@
 #include "V8DOMWrapper.h"
 #include "V8Element.h"
 #include "V8NPUtils.h"
+#include "V8Node.h"
 #include "V8Proxy.h"
 #include "V8Range.h"
 #elif USE(JSC)
@@ -256,6 +257,16 @@ static NPObject* makeStringArrayImpl(const WebVector<WebString>& data)
     return npCreateV8ScriptObject(0, result, window);
 }
 
+static NPObject* makeNodeImpl(WebNode data)
+{
+    v8::HandleScope handleScope;
+    if (data.isNull())
+        return 0;
+    v8::Handle<v8::Object> result = V8Node::wrap(data.unwrap<Node>());
+    WebCore::DOMWindow* window = WebCore::V8Proxy::retrieveWindow(WebCore::V8Proxy::currentContext());
+    return npCreateV8ScriptObject(0, result, window);
+}
+
 #endif
 
 bool WebBindings::getRange(NPObject* range, WebRange* webRange)
@@ -298,6 +309,16 @@ NPObject* WebBindings::makeStringArray(const WebVector<WebString>& data)
 #endif
 }
 
+NPObject* WebBindings::makeNode(const WebNode& data)
+{
+#if USE(V8)
+    return makeNodeImpl(data);
+#else
+    // Not supported on other ports (JSC, etc.).
+    return 0;
+#endif
+}
+
 void WebBindings::pushExceptionHandler(ExceptionHandler handler, void* data)
 {
     WebCore::pushExceptionHandler(handler, data);
index 34daa34..ee7ec09 100644 (file)
@@ -90,6 +90,11 @@ WebString WebElement::innerText() const
     return constUnwrap<Element>()->innerText();
 }
 
+WebNode WebElement::shadowRoot()
+{
+    return adoptRef(unwrap<Element>()->shadowRoot());
+}
+
 WebString WebElement::computeInheritedLanguage() const
 {
     return WebString(constUnwrap<Element>()->computeInheritedLanguage());
index 37f8b8b..6773350 100644 (file)
@@ -1,3 +1,17 @@
+2011-03-30  MORITA Hajime  <morrita@google.com>
+
+        Reviewed by Dimitri Glazkov.
+
+        [Chromium] Expose the shadow DOM to DumpRenderTree JS tests.
+        https://bugs.webkit.org/show_bug.cgi?id=56573
+
+        Added LayoutTestController.shadowRoot() to Chromium DRT.
+
+        * DumpRenderTree/chromium/LayoutTestController.cpp:
+        (LayoutTestController::LayoutTestController):
+        (LayoutTestController::shadowRoot):
+        * DumpRenderTree/chromium/LayoutTestController.h:
+
 2011-03-30  Yuta Kitamura  <yutak@chromium.org>
 
         Reviewed by Kent Tamura.
index d146002..d91cd6e 100644 (file)
@@ -173,6 +173,7 @@ LayoutTestController::LayoutTestController(TestShell* shell)
     bindMethod("setWindowIsKey", &LayoutTestController::setWindowIsKey);
     bindMethod("setXSSAuditorEnabled", &LayoutTestController::setXSSAuditorEnabled);
     bindMethod("setAsynchronousSpellCheckingEnabled", &LayoutTestController::setAsynchronousSpellCheckingEnabled);
+    bindMethod("shadowRoot", &LayoutTestController::shadowRoot);
     bindMethod("showWebInspector", &LayoutTestController::showWebInspector);
     bindMethod("simulateDesktopNotificationClick", &LayoutTestController::simulateDesktopNotificationClick);
     bindMethod("suspendAnimations", &LayoutTestController::suspendAnimations);
@@ -647,6 +648,28 @@ void LayoutTestController::setAsynchronousSpellCheckingEnabled(const CppArgument
     result->setNull();
 }
 
+void LayoutTestController::shadowRoot(const CppArgumentList& arguments, CppVariant* result)
+{
+    if (arguments.size() != 1 || !arguments[0].isObject()) {
+        result->setNull();
+        return;
+    }
+
+    WebElement element;
+    if (!WebBindings::getElement(arguments[0].value.objectValue, &element)) {
+        result->setNull();
+        return;
+    }
+
+    WebNode shadowRoot = element.shadowRoot();
+    if (shadowRoot.isNull()) {
+        result->setNull();
+        return;
+    }
+
+    result->set(WebBindings::makeNode(shadowRoot));
+}
+
 void LayoutTestController::showWebInspector(const CppArgumentList&, CppVariant* result)
 {
     m_shell->showDevTools();
index 67f0b4b..a9c6ce4 100644 (file)
@@ -270,6 +270,7 @@ public:
     void setAllowUniversalAccessFromFileURLs(const CppArgumentList&, CppVariant*);
     void setAllowFileAccessFromFileURLs(const CppArgumentList&, CppVariant*);
 
+    void shadowRoot(const CppArgumentList&, CppVariant*);
 
     // The fallback method is called when a nonexistent method is called on
     // the layout test controller object.