Changeset 170174 in webkit


Ignore:
Timestamp:
Jun 19, 2014 11:44:16 PM (10 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK] webkit_dom_document_create_tree_walker impossible to use due to WebKitDOMNodeFilter
https://bugs.webkit.org/show_bug.cgi?id=93002

Reviewed by Gustavo Noronha Silva.

Source/WebCore:
Add custom implementation of WebKitDOMNodeFilter to expose it as
an interface instead of a class.

  • PlatformGTK.cmake: Add new files to compilation.
  • bindings/gobject/GObjectNodeFilterCondition.cpp: Added.

(WebCore::GObjectNodeFilterCondition::~GObjectNodeFilterCondition):
Reset the NodeFilter WebCore object associated to the
WebKitDOMNodeFilter object.
(WebCore::GObjectNodeFilterCondition::acceptNode): Call webkit_dom_node_filter_accept_node().

  • bindings/gobject/GObjectNodeFilterCondition.h: Added.

(WebCore::GObjectNodeFilterCondition::create): Create a new
GObjectNodeFilterCondition for the given WebKitDOMNodeFilter.
(WebCore::GObjectNodeFilterCondition::GObjectNodeFilterCondition):

  • bindings/gobject/WebKitDOMNodeFilter.cpp: Added.

(webkit_dom_node_filter_default_init):
(webkit_dom_node_filter_accept_node):
(WebKit::nodeFilterMap): Map NodeFilter WebCore objects to
WebKitDOMNodeFilter objects.
(WebKit::nodeFilterObjectDestroyedCallback): Remove the node
filter form the map when the WebKitDOMNodeFilter objecrt is destroyed.
(WebKit::kit): Return the WebKitDOMNodeFilter object for the given
NodeFilter WebCore object.
(WebKit::core): Get or create a NodeFilter WebCore object
associated to the given WebKitDOMNodeFilter.

  • bindings/gobject/WebKitDOMNodeFilter.h: Added.
  • bindings/gobject/WebKitDOMNodeFilter.symbols: Added.
  • bindings/gobject/WebKitDOMNodeFilterPrivate.h: Added.
  • bindings/scripts/CodeGeneratorGObject.pm:

(GenerateFunction): Add exceptions for NodeFilter parameters since
the core method returns a PassRefPtr.

Tools:
Add unit tests to check WebKitDOMNodefilter API used from both
TreeWalker and NodeIterator.

  • Scripts/webkitpy/style/checker.py: Add exceptions for GTK+

public headers and add WebKitDOMNodeFilter to the list of exceptions.

  • TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt: Add new files to compilation.
  • TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeFilterTest.cpp: Added.

(webkitNodeFilterAcceptNode):
(webkitNodeFilterDOMNodeFilterIfaceInit):
(webkit_node_filter_init):
(webkit_node_filter_class_init):
(WebKitDOMNodeFilterTest::create):
(WebKitDOMNodeFilterTest::webPageFromArgs):
(WebKitDOMNodeFilterTest::testTreeWalker):
(WebKitDOMNodeFilterTest::testNodeIterator):
(WebKitDOMNodeFilterTest::runTest):
(registerTests):

  • TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNodeFilter.cpp: Added.

(runTest):
(testWebKitDOMNodeFilterTreeWalker):
(testWebKitDOMNodeFilterNodeIterator):
(beforeAll):
(afterAll):

  • gtk/webkitdom.py:

(WebKitDOMDocGeneratorSections.init):
(WebKitDOMDocGeneratorSections._symbol_list):
(WebKitDOMDocGeneratorSections.write_section):

Location:
trunk
Files:
8 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r170173 r170174  
     12014-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] webkit_dom_document_create_tree_walker impossible to use due to WebKitDOMNodeFilter
     4        https://bugs.webkit.org/show_bug.cgi?id=93002
     5
     6        Reviewed by Gustavo Noronha Silva.
     7
     8        Add custom implementation of WebKitDOMNodeFilter to expose it as
     9        an interface instead of a class.
     10
     11        * PlatformGTK.cmake: Add new files to compilation.
     12        * bindings/gobject/GObjectNodeFilterCondition.cpp: Added.
     13        (WebCore::GObjectNodeFilterCondition::~GObjectNodeFilterCondition):
     14        Reset the NodeFilter WebCore object associated to the
     15        WebKitDOMNodeFilter object.
     16        (WebCore::GObjectNodeFilterCondition::acceptNode): Call webkit_dom_node_filter_accept_node().
     17        * bindings/gobject/GObjectNodeFilterCondition.h: Added.
     18        (WebCore::GObjectNodeFilterCondition::create): Create a new
     19        GObjectNodeFilterCondition for the given WebKitDOMNodeFilter.
     20        (WebCore::GObjectNodeFilterCondition::GObjectNodeFilterCondition):
     21        * bindings/gobject/WebKitDOMNodeFilter.cpp: Added.
     22        (webkit_dom_node_filter_default_init):
     23        (webkit_dom_node_filter_accept_node):
     24        (WebKit::nodeFilterMap): Map NodeFilter WebCore objects to
     25        WebKitDOMNodeFilter objects.
     26        (WebKit::nodeFilterObjectDestroyedCallback): Remove the node
     27        filter form the map when the WebKitDOMNodeFilter objecrt is destroyed.
     28        (WebKit::kit): Return the WebKitDOMNodeFilter object for the given
     29        NodeFilter WebCore object.
     30        (WebKit::core): Get or create a NodeFilter WebCore object
     31        associated to the given WebKitDOMNodeFilter.
     32        * bindings/gobject/WebKitDOMNodeFilter.h: Added.
     33        * bindings/gobject/WebKitDOMNodeFilter.symbols: Added.
     34        * bindings/gobject/WebKitDOMNodeFilterPrivate.h: Added.
     35        * bindings/scripts/CodeGeneratorGObject.pm:
     36        (GenerateFunction): Add exceptions for NodeFilter parameters since
     37        the core method returns a PassRefPtr.
     38
    1392014-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>
    240
  • trunk/Source/WebCore/PlatformGTK.cmake

    r170173 r170174  
    436436    bindings/gobject/DOMObjectCache.cpp
    437437    bindings/gobject/GObjectEventListener.cpp
     438    bindings/gobject/GObjectNodeFilterCondition.cpp
    438439    bindings/gobject/WebKitDOMCustom.cpp
    439440    bindings/gobject/WebKitDOMEventTarget.cpp
    440441    bindings/gobject/WebKitDOMHTMLPrivate.cpp
     442    bindings/gobject/WebKitDOMNodeFilter.cpp
    441443    bindings/gobject/WebKitDOMObject.cpp
    442444    bindings/gobject/WebKitDOMPrivate.cpp
     
    471473    dom/NamedNodeMap.idl
    472474    dom/Node.idl
    473     dom/NodeFilter.idl
    474475    dom/NodeIterator.idl
    475476    dom/NodeList.idl
     
    630631endif ()
    631632
    632 set(GObjectDOMBindingsStable_CLASS_LIST Custom EventTarget Object)
     633set(GObjectDOMBindingsStable_CLASS_LIST Custom EventTarget NodeFilter Object)
    633634set(GObjectDOMBindingsStable_INSTALLED_HEADERS
    634635     ${DERIVED_SOURCES_GOBJECT_DOM_BINDINGS_DIR}/webkitdomdefines.h
     
    636637     ${WEBCORE_DIR}/bindings/gobject/WebKitDOMCustom.h
    637638     ${WEBCORE_DIR}/bindings/gobject/WebKitDOMEventTarget.h
     639     ${WEBCORE_DIR}/bindings/gobject/WebKitDOMNodeFilter.h
    638640     ${WEBCORE_DIR}/bindings/gobject/WebKitDOMObject.h
    639641)
     
    733735list(REMOVE_ITEM GObjectDOMBindings_GIR_HEADERS
    734736     bindings/gobject/WebKitDOMEventTarget.h
     737     bindings/gobject/WebKitDOMNodeFilter.h
    735738     bindings/gobject/WebKitDOMObject.h
    736739)
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm

    r170173 r170174  
    5555    'webkit_dom_document_create_element_ns' => ['namespaceURI'],
    5656    'webkit_dom_document_create_entity_reference' => ['name'],
     57    'webkit_dom_document_create_node_iterator' => ['filter'],
     58    'webkit_dom_document_create_tree_walker' => ['filter'],
    5759    'webkit_dom_document_evaluate' => ['inResult', 'resolver'],
    5860    'webkit_dom_document_get_override_style' => ['pseudoElement'],
     
    957959            $paramName = "converted" . $codeGenerator->WK_ucfirst($paramName);
    958960        }
     961        if ($paramIDLType eq "NodeFilter") {
     962            $paramName = "WTF::getPtr(" . $paramName . ")";
     963        }
    959964        push(@callImplParams, $paramName);
    960965    }
     
    10581063        } elsif ($paramIDLType eq "CompareHow") {
    10591064            push(@cBody, "    WebCore::Range::CompareHow ${convertedParamName} = static_cast<WebCore::Range::CompareHow>($paramName);\n");
     1065        } elsif ($paramIDLType eq "NodeFilter") {
     1066            push(@cBody, "    RefPtr<WebCore::$paramIDLType> ${convertedParamName} = WebKit::core($paramName);\n");
    10601067        } elsif ($paramIsGDOMType) {
    10611068            push(@cBody, "    WebCore::${paramIDLType}* ${convertedParamName} = WebKit::core($paramName);\n");
  • trunk/Tools/ChangeLog

    r170173 r170174  
     12014-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] webkit_dom_document_create_tree_walker impossible to use due to WebKitDOMNodeFilter
     4        https://bugs.webkit.org/show_bug.cgi?id=93002
     5
     6        Reviewed by Gustavo Noronha Silva.
     7
     8        Add unit tests to check WebKitDOMNodefilter API used from both
     9        TreeWalker and NodeIterator.
     10
     11        * Scripts/webkitpy/style/checker.py: Add exceptions for GTK+
     12        public headers and add WebKitDOMNodeFilter to the list of exceptions.
     13        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt: Add new files to compilation.
     14        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeFilterTest.cpp: Added.
     15        (webkitNodeFilterAcceptNode):
     16        (webkitNodeFilterDOMNodeFilterIfaceInit):
     17        (webkit_node_filter_init):
     18        (webkit_node_filter_class_init):
     19        (WebKitDOMNodeFilterTest::create):
     20        (WebKitDOMNodeFilterTest::webPageFromArgs):
     21        (WebKitDOMNodeFilterTest::testTreeWalker):
     22        (WebKitDOMNodeFilterTest::testNodeIterator):
     23        (WebKitDOMNodeFilterTest::runTest):
     24        (registerTests):
     25        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNodeFilter.cpp: Added.
     26        (runTest):
     27        (testWebKitDOMNodeFilterTreeWalker):
     28        (testWebKitDOMNodeFilterNodeIterator):
     29        (beforeAll):
     30        (afterAll):
     31        * gtk/webkitdom.py:
     32        (WebKitDOMDocGeneratorSections.__init__):
     33        (WebKitDOMDocGeneratorSections._symbol_list):
     34        (WebKitDOMDocGeneratorSections.write_section):
     35
    1362014-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>
    237
  • trunk/Tools/Scripts/webkitpy/style/checker.py

    r167350 r170174  
    154154      "Source/WebCore/bindings/gobject/WebKitDOMDeprecated.h",
    155155      "Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h",
     156      "Source/WebCore/bindings/gobject/WebKitDOMNodeFilter.h",
    156157      "Source/WebCore/bindings/scripts/test/GObject",
    157158      "Source/WebKit/gtk/webkit/",
     
    161162      "-readability/null",
    162163      "-readability/enum_casing",
     164      "-whitespace/declaration",
     165      "-whitespace/indent",
    163166      "-whitespace/parens"]),
    164167
     
    222225      "Source/WebCore/bindings/gobject/WebKitDOMDeprecated.cpp",
    223226      "Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp",
     227      "Source/WebCore/bindings/gobject/WebKitDOMNodeFilter.cpp",
    224228      "Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp",
    225229      "Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp",
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt

    r169106 r170174  
    8383
    8484ADD_WK2_TEST_WEB_EXTENSION(WebExtensionTest WebExtensionTest.cpp)
    85 ADD_WK2_TEST_WEB_EXTENSION(WebProcessTest DOMNodeTest.cpp FrameTest.cpp WebProcessTest.cpp)
     85ADD_WK2_TEST_WEB_EXTENSION(WebProcessTest DOMNodeTest.cpp DOMNodeFilterTest.cpp FrameTest.cpp WebProcessTest.cpp)
    8686
    8787ADD_WK2_TEST(InspectorTestServer InspectorTestServer.cpp)
     
    9191ADD_WK2_TEST(TestCookieManager TestCookieManager.cpp)
    9292ADD_WK2_TEST(TestDOMNode TestDOMNode.cpp)
     93ADD_WK2_TEST(TestDOMNodeFilter TestDOMNodeFilter.cpp)
    9394ADD_WK2_TEST(TestDownloads TestDownloads.cpp)
    9495ADD_WK2_TEST(TestWebKitFaviconDatabase TestWebKitFaviconDatabase.cpp)
  • trunk/Tools/gtk/webkitdom.py

    r170173 r170174  
    9393        self._dom_class_re = re.compile('(^WebKitDOM)(.+)$')
    9494        self._function_re = re.compile('^.+ (.+)\((.+)\)$')
     95        self._constant_re = re.compile('^[A-Z_]+$')
    9596
    9697    def _dom_class(self, class_name):
     
    112113        f = open(symbol_file, 'r')
    113114        for line in f.readlines():
     115            match = self._constant_re.match(line)
     116            if match:
     117                retval.append(line.strip('\n'))
     118                continue
     119
    114120            match = self._function_re.match(line)
    115121            if not match or match.group(1).endswith('get_type'):
     
    122128        class_name = os.path.basename(symbol_file).replace(".symbols", "")
    123129        is_custom = class_name == 'WebKitDOMCustom'
    124         is_interface = class_name == 'WebKitDOMEventTarget'
     130        is_interface = class_name in ['WebKitDOMEventTarget', 'WebKitDOMNodeFilter']
    125131        is_object = class_name == 'WebKitDOMObject'
    126132        self.write('<SECTION>\n')
Note: See TracChangeset for help on using the changeset viewer.