2013-04-23  David Grogan  <dgrogan@chromium.org>

        Unreviewed. Remove myself from watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2013-04-23  Jessie Berlin  <jberlin@apple.com>

        NRWT: confusing warning about a line being in a Skipped file when it is really just listed
        in _missing_symbol_to_skipped_tests in base.py
        https://bugs.webkit.org/show_bug.cgi?id=108884

        Reviewed by Tim Horton.

        Remove symbol-based skipped list detection.

        * Scripts/webkitpy/port/base.py:
        (Port._missing_feature_to_skipped_tests):
        (Port._skipped_tests_for_unsupported_features):
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_path_to_test_expectations_file):

2013-04-23  Benjamin Poulain  <bpoulain@apple.com>

        Remove wxWebKit support from the Tools
        https://bugs.webkit.org/show_bug.cgi?id=115005

        Reviewed by Andreas Kling.

        The wxWebKit port is no longer actively maintained by Kevin
        on webkit.org. Remove the code until new maintainers resume the work.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/config.h:
        * DumpRenderTree/wscript: Removed.
        * DumpRenderTree/wx/DumpRenderTreeWx.cpp: Removed.
        * DumpRenderTree/wx/DumpRenderTreeWx.h: Removed.
        * DumpRenderTree/wx/GCControllerWx.cpp: Removed.
        * DumpRenderTree/wx/TestRunnerWx.cpp: Removed.
        * DumpRenderTree/wx/WorkQueueItemWx.cpp: Removed.
        * Scripts/build-dumprendertree:
        * Scripts/build-jsc:
        (buildMyProject):
        * Scripts/build-webkit:
        * Scripts/old-run-webkit-tests:
        * Scripts/run-launcher:
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        (determineConfigurationProductDir):
        (determinePassedArchitecture):
        (builtDylibPathForName):
        (determineIsQt):
        (isAppleWebKit):
        (launcherPath):
        (launcherName):
        (checkRequiredSystemConfig):
        * Scripts/webkitpy/common/config/contributionareas.py:
        * waf/build/build_utils.py: Removed.
        * waf/build/settings.py: Removed.
        * waf/build/waf_extensions.py: Removed.
        * waf/build/wxpresets.py: Removed.
        * wx/browser/browser.cpp: Removed.
        * wx/browser/wscript: Removed.
        * wx/install-unix-extras: Removed.
        * wx/packaging/build-debian-installer.py: Removed.
        * wx/packaging/build-mac-installer.py: Removed.
        * wx/packaging/build-win-installer.py: Removed.
        * wx/packaging/debian/changelog: Removed.
        * wx/packaging/debian/compat: Removed.
        * wx/packaging/debian/control: Removed.
        * wx/packaging/debian/copyright: Removed.
        * wx/packaging/debian/python-webkitwx.install: Removed.
        * wx/packaging/debian/rules: Removed.
        * wx/packaging/wxWebKitInstaller.iss.in: Removed.

2013-04-23  Zeno Albisser  <zeno@webkit.org>

        [Qt] Fix test_build_check for Qt on Mac after r148075.
        https://bugs.webkit.org/show_bug.cgi?id=115038

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_build_check):
            run-webkit-tests is supposed to fail, if it is run on a different
            platform than specified on the command line.
            However, Qt allows exactly this for Qt-platforms to allow comparing
            of test results of different baselines.
            Before r148075 "chromium-linux-x86" was used for testing.
            This patch changes the port_name to gtk when running the test on mac.

2013-04-23  Xan Lopez  <xlopez@igalia.com>

        [BlackBerry] Do not access BackForwardListImpl from DRT
        https://bugs.webkit.org/show_bug.cgi?id=115041

        Reviewed by Carlos Garcia Campos.

        Use the right class to access the bflist functionality.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::dumpBackForwardListForWebView):

2013-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_uri_request_get_http_headers to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=112160

        Reviewed by Andreas Kling.

        * MiniBrowser/gtk/GNUmakefile.am: Add missing libsoup flags to
        CPPFLAGS.

2013-04-23  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] Make EFL WKView API shareable between ports
        https://bugs.webkit.org/show_bug.cgi?id=114734

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/PlatformEfl.cmake:
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:

            Updated project files accordingly to updated WKView API files
            structure.

2013-04-23  Andreas Kling  <akling@apple.com>

        Add Benjamin Poulain's @apple.com address to his entry. Unreviewed.

        * Scripts/webkitpy/common/config/contributors.json:

2013-04-23  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Respect image-rendering setting for determing image-rendering quality
        https://bugs.webkit.org/show_bug.cgi?id=113405

        Reviewed by Benjamin Poulain.

        Remove CSS4 Images option. It is not ready for implementation.

        * Scripts/webkitperl/FeatureList.pm:

2013-04-22  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/114989> Add a user default to allow use of the Safari binary rather than SafariForWebKitDevelopment

        Reviewed by Anders Carlsson.

        * Scripts/webkitdirs.pm:
        (skipSafariExecutableEntitlementChecks): Look for the SkipSafariExecutableEntitlementChecks default in the
        /Library/Preferences/org.webkit.BuildConfiguration preference domain.
        (safariPathFromSafariBundle): If the user default is set asking us to skip the entitlement checks, return
        the path to the regular Safari binary.

2013-04-22  Ryuan Choi  <ryuan.choi@samsung.com>

       Unreviewed Efl build fix after r148921

        * TestWebKitAPI/CMakeLists.txt:

2013-04-22  Benjamin Poulain  <benjamin@webkit.org>

        Remove the memory instrumentation code
        https://bugs.webkit.org/show_bug.cgi?id=114931

        Reviewed by Andreas Kling.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp: Removed.

2013-04-22  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Enable introspection always for developer builds
        https://bugs.webkit.org/show_bug.cgi?id=114983

        Reviewed by Gustavo Noronha Silva.

        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProjectIfNecessary): Always enable introspection
        when using build-webkit.
        * gtk/jhbuildrc: Enable documentation for all jhbuild modules and explicitly
        choose the memory gsettings backend while in the jhbuild. This eliminates
        warnings from programs that fall back to the memory backend.

2013-04-22  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Set up libPlatform.la
        https://bugs.webkit.org/show_bug.cgi?id=114168

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Link the DumpRenderTree executable against both libPlatform.la and libPlatformGtk.la libraries.

2013-04-22  Xuefei Ren  <xren@blackberry.com>

        fix build warning(unused parameter)
        https://bugs.webkit.org/show_bug.cgi?id=114855

        Reviewed by Rob Buis.

        remove warning(unused parameter) in
        Tools/DumpRenderTree/blackberry/EventSender.cpp

        * DumpRenderTree/blackberry/EventSender.cpp:
        (getDragModeCallback):

2013-04-22  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] Add dummy implementation of AccessibilityController::accessibleElementById()
        https://bugs.webkit.org/show_bug.cgi?id=114939

        Reviewed by Carlos Garcia Campos.

        This was added in r129308.

        * DumpRenderTree/blackberry/AccessibilityControllerBlackBerry.cpp:
        (AccessibilityController::accessibleElementById):

2013-04-21  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed EFL build fix after r148855.

        * TestWebKitAPI/PlatformEfl.cmake:

2013-04-21  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] Mark WKViewClientWebProcessCallbacks API test as failing
        https://bugs.webkit.org/show_bug.cgi?id=114922

        Reviewed by Gyuyoung Kim.

        Mark WKViewClientWebProcessCallbacks API test as failing on WK2 EFL.

        * TestWebKitAPI/PlatformEfl.cmake:

2013-04-20  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Fix baseline positioning issue by updating Freetype
        https://bugs.webkit.org/show_bug.cgi?id=106775

        Reviewed by Martin Robinson.

        * gtk/jhbuild.modules: Bump the Freetype Jhbuild dependency to 2.4.11.
        * gtk/patches/freetype6-2.4.11-truetype-font-height-fix.patch: Added. This is the Freetype
        patch (committed as e0469372) that fixes rounding issues for smaller fonts. It is bound to be included
        in the 2.4.12 release of Freetype (not released yet) but is provided here as its effect on baselines is
        considered positive and will reduce the amout of future rebaselining.

2013-04-20  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Fix unit test webkit2/WebKitFindController/hide
        https://bugs.webkit.org/show_bug.cgi?id=89810

        Reviewed by Carlos Garcia Campos.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip test webkit2/WebKitFindController/hide.

2013-04-19  Ryosuke Niwa  <rniwa@webkit.org>

        Build fixes for the flakiness dashboard.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:

2013-04-17  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Make the 32 bits bot only build and run API tests
        https://bugs.webkit.org/show_bug.cgi?id=113532

        Reviewed by Martin Robinson.

        * BuildSlaveSupport/build.webkit.org-config/config.json: make the 32 bits bot use the new BuildAndAPITest type
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (BuildAndAPITestFactory): new factory that builds and runs API tests, only used by the GTK+ 32 bits bot at the
        moment;
        (BuildAndAPITestFactory.__init__): add API tests step for platforms that have it.

2013-04-19  Andras Becsi  <andras.becsi@digia.com>

        [Qt] Only use thin archives on Linux

        Rubber-stamped by Jocelyn Turcotte.

        Since "thin archive" is a feature of GNU's ar
        we limit the usage to Linux to avoid problems
        with other configurations (eg. macx-g++).

        * qmake/mkspecs/features/default_pre.prf:

2013-04-19  Krzysztof Czech  <k.czech@samsung.com>

        [GTK][WK2] accessibility/language-attribute.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=106342

        Reviewed by Gyuyoung Kim.

        Adds support for getting language information.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::language):

2013-04-19  Zan Dobersek  <zdobersek@igalia.com>

        [Dashboard] Remove the isToTWebKit member variable from the BuilderGroup interface
        https://bugs.webkit.org/show_bug.cgi?id=114805

        Reviewed by Benjamin Poulain.

        Remove the isToTWebKit member variable from the BuilderGroup and all its usages as it now defaults to true for every
        builder group. The isTipOfTreeWebKitBuilder method now returns true by default but should be removed in a follow-up patch.
        The BuilderGroup constructor does not accept the isToTWebKit parameter anymore so all the callsites are adjusted accordingly.

        * TestResultServer/static-dashboards/builders.js:
        (BuilderGroup):
        (loadBuildersList):
        * TestResultServer/static-dashboards/dashboard_base.js:
        (isTipOfTreeWebKitBuilder):
        (expectationsMap):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (test):

2013-04-19  Zan Dobersek  <zdobersek@igalia.com>

        [Dashboard] htmlForIndividualTests unit test should include its dummy builder under the webkit.org builder master
        https://bugs.webkit.org/show_bug.cgi?id=114804

        Reviewed by Benjamin Poulain.

        The htmlForIndividualTests unit test should include its dummy builder under the sole supported webkit.org builder master
        just so the unit tests properly functions.

        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:

2013-04-19  Zan Dobersek  <zdobersek@igalia.com>

        [Dashboard] Remove Chromium-specific helper functions that were used in the builder-loading code
        https://bugs.webkit.org/show_bug.cgi?id=114803

        Reviewed by Benjamin Poulain.

        Remove three Chromium-specific helper functions that were used to determine Chromium DEPS, Content Shell and WebKit ToT
        test runners. These are not required anymore and thus removed along with a couple of unit tests that were testing these
        methods' correct behavior.

        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:

2013-04-19  Zan Dobersek  <zdobersek@igalia.com>

        [Dashboard] Remove the Chromium-specific builder masters
        https://bugs.webkit.org/show_bug.cgi?id=114802

        Reviewed by Benjamin Poulain.

        Remove all the Chromium-specific builder masters, the webkit.org builder master is the only one currently supported.

        * TestResultServer/static-dashboards/builders.js:

2013-04-19  Zan Dobersek  <zdobersek@igalia.com>

        [Dashboard] Remove all the Chromium-specific builder groups
        https://bugs.webkit.org/show_bug.cgi?id=114801

        Reviewed by Benjamin Poulain.

        Remove all the Chromium-specific builder groups, all of these are not supported anymore.

        * TestResultServer/static-dashboards/builders.js:

2013-04-19  Zan Dobersek  <zdobersek@igalia.com>

        [Dashboard] Only accept the 'group' parameter if present in the layout tests builders group
        https://bugs.webkit.org/show_bug.cgi?id=114799

        Reviewed by Benjamin Poulain.

        The layout tests builder group is the only one supported, all the other Chromium-specific builder groups are
        bound to be removed.

        * TestResultServer/static-dashboards/history.js:
        (.):

2013-04-19  Zan Dobersek  <zdobersek@igalia.com>

        [Dashboard] Remove Chromium-specific builder loading code from loadBuildersList
        https://bugs.webkit.org/show_bug.cgi?id=114797

        Reviewed by Benjamin Poulain.

        Remove anything Chromium-specific from the builder-loading code, specifically removing support for loading builder data
        for anything other that the layout-tests type and removing support for loading builder data from builders connected
        to the Chromium-specific builder groups which are no longer supported.

        * TestResultServer/static-dashboards/builders.js:

2013-04-19  Zan Dobersek  <zdobersek@igalia.com>

        [Dashboard] The currentBuilderGroupCategory method should return the layout tests builder groups by default
        https://bugs.webkit.org/show_bug.cgi?id=114796

        Reviewed by Benjamin Poulain.

        With the Chromium builders no longer uploading results and the layout-tests test type the only one supported by the
        WebKit's dashboard, the currentBuilderGroupCategory can now return LAYOUT_TESTS_BUILDER_GROUPS as the default builder
        group category.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (currentBuilderGroupCategory):

2013-04-19  Zan Dobersek  <zdobersek@igalia.com>

        [Dashboard] Narrow down the test types list to only layout-tests
        https://bugs.webkit.org/show_bug.cgi?id=114795

        Reviewed by Ryosuke Niwa.

        Remove all the redundant test types that the webkit.org builders do not upload results for. All of the removed
        test types were specific to the Chromium builders.

        * TestResultServer/static-dashboards/dashboard_base.js:

2013-04-19  Zan Dobersek  <zdobersek@igalia.com>

        [Dashboard] The revision rows for aggregate results should no longer include Chromium revisions
        https://bugs.webkit.org/show_bug.cgi?id=114760

        Reviewed by Benjamin Poulain.

        With the Chromium builders no longer present there's no need to display the Chromium revision range under the
        aggregate results. Only the first half of the htmlForRevisionRows method (the one returning the table row listing the
        WebKit revisions) is now relevant - the method is therefor removed and its callsites updated to directly call the
        htmlForTableRow method that returns the table row containing all the relevant WebKit revisions.

        * TestResultServer/static-dashboards/aggregate_results.js:
        (htmlForSummaryTable):
        (htmlForTestType):

2013-04-19  Zan Dobersek  <zdobersek@igalia.com>

        [Dashboard] Remove Chromium-specific cases from the construction of the chart HTML for aggregate results
        https://bugs.webkit.org/show_bug.cgi?id=114759

        Reviewed by Benjamin Poulain.

        Aggregate results are not viewable for Chromium builders anymore, meaning the WebKit revisions are shown by default.
        This means the code in the chartHTML method can be simplified, defaulting the revision key to WEBKIT_REVISIONS_KEY
        and the revision label to 'WebKit Revision'.

        * TestResultServer/static-dashboards/aggregate_results.js:
        (chartHTML):

2013-04-18  Xuefei Ren  <xren@blackberry.com>

        remove build warning(unused parameter)
        https://bugs.webkit.org/show_bug.cgi?id=114670

        Reviewed by Rob Buis.

        remove builde warning (unused parameter) in
        Tools/DumpRenderTree/blackberry

        * DumpRenderTree/blackberry/AccessibilityUIElementBlackBerry.cpp:
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):
        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::addMessageToConsole):
        (BlackBerry::WebKit::DumpRenderTree::didReceiveResponseForFrame):
        * DumpRenderTree/blackberry/EventSender.cpp:
        (getDragModeCallback):
        (setDragModeCallback):
        (mouseWheelToCallback):
        (contextClickCallback):
        (mouseDownCallback):
        (mouseUpCallback):
        (mouseMoveToCallback):
        (beginDragWithFilesCallback):
        (leapForwardCallback):
        (keyDownCallback):
        (textZoomInCallback):
        (textZoomOutCallback):
        (zoomPageInCallback):
        (zoomPageOutCallback):
        (addTouchPointCallback):
        (updateTouchPointCallback):
        (setTouchModifierCallback):
        (touchStartCallback):
        (touchCancelCallback):
        (touchMoveCallback):
        (touchEndCallback):
        (clearTouchPointsCallback):
        (cancelTouchPointCallback):
        (releaseTouchPointCallback):
        (scalePageByCallback):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        (TestRunner::authenticateSession):
        (TestRunner::setSpatialNavigationEnabled):
        (TestRunner::apiTestNewWindowDataLoadBaseURL):
        (TestRunner::setPluginsEnabled):
        (TestRunner::setApplicationCacheOriginQuota):
        (TestRunner::addMockSpeechInputResult):
        (TestRunner::setViewModeMediaFeature):
        (TestRunner::deleteLocalStorageForOrigin):
        (TestRunner::applicationCacheDiskUsageForOrigin):
        (TestRunner::grantWebNotificationPermission):
        (TestRunner::denyWebNotificationPermission):
        (TestRunner::simulateWebNotificationClick):
        (TestRunner::simulateLegacyWebNotificationClick):

2013-04-18  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [WK2][EFL] Text Checker's settings refactor
        https://bugs.webkit.org/show_bug.cgi?id=111713

        Reviewed by Andreas Kling.

        * MiniBrowser/efl/main.c:
        (window_create):
        Use a new text checker API to enable spell checking.

2013-04-18  Seokju Kwon  <seokju.kwon@gmail.com>

        [EFL] Add a newline to the end of log message
        https://bugs.webkit.org/show_bug.cgi?id=114659

        Reviewed by Gyuyoung Kim.

        Move a newline to info() definition.

        * EWebLauncher/main.c:
        (on_load_finished):
        (on_tooltip_text_set):
        (on_tooltip_text_unset):
        (on_inputmethod_changed):
        (on_focus_out):
        (on_focus_in):
        (on_key_down):
        (windowCreate):
        * MiniBrowser/efl/main.c:
        (on_key_down):
        (on_download_request):
        (on_download_finished):
        (on_download_failed):
        (on_refresh_button_clicked):
        (on_popup_menu_discarded):
        (on_popup_menu_item_clicked):
        (popup_menu_populate):
        (on_popup_menu_show):
        (on_window_create):
        (context_popup_item_selected_cb):
        (on_context_menu_show):
        (on_context_menu_hide):
        (window_create):

2013-04-17  Zan Dobersek  <zandobersek@gmail.com>

        [Dashboard] Remove code for showing 'WebKit roll' annotations in timelines for Chromium builders
        https://bugs.webkit.org/show_bug.cgi?id=114755

        Reviewed by Ryosuke Niwa.

        The Chromium builders are no longer available to inspect so there's no need for the code that used to show
        the 'WebKit roll' annotations in the Chromium builders' timeline.

        * TestResultServer/static-dashboards/timeline_explorer.js:

2013-04-17  Zan Dobersek  <zandobersek@gmail.com>

        [Dashboard] Clean up the timeline updating code, removing Chromium-specific cases
        https://bugs.webkit.org/show_bug.cgi?id=114756

        Reviewed by Ryosuke Niwa.

        Clean up the updating of the timeline in the timeline explorer, defaulting to the webkit.org build master when
        constructing the results URL and removing the possible row addition containing the Chromium commit range that
        only applied to Chromium builders in the first place. Also removes the now-redundant shouldShowWebKitRevisionsOnly
        method.

        * TestResultServer/static-dashboards/timeline_explorer.js:

2013-04-17  Alberto Garcia  <agarcia@igalia.com>

        media-stream and xslt are no longer configurable options in the GTK+ port
        https://bugs.webkit.org/show_bug.cgi?id=114736

        Reviewed by Martin Robinson.

        media-stream support was removed in r145199 and XSLT is a hard
        requirement since r145859. Attempting to pass those options to the
        configure script, only results in a warning.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject):

2013-04-17  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Implement context menu in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=102932

        Reviewed by Gyuyoung Kim.

        Added context menu support for EFL port using Elementary context popup.

        * MiniBrowser/efl/main.c:
        (_Browser_Window):
        (context_popup_item_selected_cb):
        (context_popup_populate):
        (on_context_menu_show):
        (on_context_menu_hide):
        (window_create):

2013-04-17  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r148588): It broke the Qt WK2 EWS
        https://bugs.webkit.org/show_bug.cgi?id=114737

        Reviewed by Jocelyn Turcotte.

        * Scripts/webkitpy/common/config/ews.json: "Qt WK2 EWS" should use qt-wk2 port.
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.port):
        (QtPort.build_webkit_command): qt port shouldn't build WebKit2.
        (QtPort.run_webkit_tests_command): qt port runs WK1 tests.
        (QtWK2Port): Added.
        (QtWK2Port.build_webkit_command): qt-wk2 port builds WK1 and WK2 too.
        (QtWK2Port.run_webkit_tests_command): qt-wk2 port runs WK2 tests.
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_qt_port):
        (DeprecatedPortTest):
        (DeprecatedPortTest.test_qt_wk2_port):

2013-04-17  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed.

        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_efl_port): Adjusting the expected outcome of the EFL build-webkit command after r148589.

2013-04-17  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Enable sub-pixel layout.
        https://bugs.webkit.org/show_bug.cgi?id=113199

        Reviewed by Jocelyn Turcotte.

        * qmake/mkspecs/features/features.pri:

2013-04-16  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add Efl WebKit2 EWS bot
        https://bugs.webkit.org/show_bug.cgi?id=114564

        Reviewed by Ryosuke Niwa.

        Added EflWK2EWS, and add myself a watcher for EflWK2EWS.
        Also add a deprecated EflWK2Port class.

        Besides clean up eflews watchers.

        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.port):
        (EflPort.build_webkit_command):
        (EflWK2Port):
        (EflWK2Port.build_webkit_command):

2013-04-16  Ryosuke Niwa  <rniwa@webkit.org>

        Isolate Early Warning System definitions into a JSON
        https://bugs.webkit.org/show_bug.cgi?id=114558

        Reviewed by Benjamin Poulain.

        Added ews.json to common/config, and made tool/commands/__init__.py call
        AbstractEarlyWarningSystem.load_ews_classes to instantiate classes based on ews.json.

        Reland the patch since the EWS failure was a false positive.

        * Scripts/webkitpy/common/config/ews.json: Extracted from earlywarningsystem.py.
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem):
        (AbstractEarlyWarningSystem.__init__):
        (AbstractEarlyWarningSystem.load_ews_classes): Added. Loads ews.json.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSystemTest._default_expected_logs):
        (_test_ews):
        (test_ewses):

2013-04-16  Sam Weinig  <sam@webkit.org>

        Fix fallout after r148545.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        Remove calls to non-existent API functions.

2013-04-13  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Disable WinEWS tests, simply not enough bots.

        All bots are running consistently now but the queue still keeps growing.
        Until we get more bots or make the tests faster, it doesn't seem wise to keep running tests.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-04-16  Ryosuke Niwa  <rniwa@webkit.org>

        The list of contributors in committers.py should be a separate JSON
        https://bugs.webkit.org/show_bug.cgi?id=114673

        Reviewed by Anders Carlsson.

        Added webkitpy/common/config/contributors.json, made CommitterList load it.

        * EWSTools/start-queue-mac.sh:
        * EWSTools/start-queue.sh:
        * Scripts/webkitpy/common/checkout/commitinfo.py:
        (CommitInfo.committer):
        * Scripts/webkitpy/common/config/contributors.json: Added.
        * Scripts/webkitpy/common/config/committers.py:
        (Reviewer.__init__):
        (CommitterList.__init__):
        (CommitterList.load_json): Added.
        (CommitterList.load_json.emails):
        (CommitterList.load_json.nicks):
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        (MockCommitInfo.author):

2013-04-16  Manuel Rego Casasnovas  <rego@igalia.com>

        [EFL] Bump libsoup dependency to 2.42.0
        https://bugs.webkit.org/show_bug.cgi?id=113927

        Reviewed by Gyuyoung Kim.

        Update libsoup required version to v2.42.0 and GLib to v2.36.0 as
        required by libsoup for EFL port.

        * efl/jhbuild.modules:
        * efl/patches/libsoup-2.40-auth-fix.patch: Removed as it's already
        included in v2.42.0.

2013-04-16  Ryosuke Niwa  <rniwa@webkit.org>

        Remove Account class from committers.py
        https://bugs.webkit.org/show_bug.cgi?id=114671

        Reviewed by Csaba Osztrogonác.

        Account class was added to support watch list email addresses that are not associated with
        a particular contributor but nobody uses these email address since Chromium port forked.

        Remove it.

        Also removed account_by_login from CommitterList since it was never called except its unittests.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/config/committers.py:
        (Contributor):
        (Contributor.matches_glob):
        (Reviewer.__init__):
        (CommitterList.__init__):
        (CommitterList._email_to_account_map):
        (CommitterList._login_to_account_map):
        (CommitterList.contributors_by_fuzzy_match):
        (CommitterList.contributor_by_email):
        (CommitterList.contributor_by_name):
        (CommitterList.committer_by_email):
        (CommitterList.reviewer_by_email):
        * Scripts/webkitpy/common/config/committers_unittest.py:
        (CommittersTest.test_committer_lookup):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla._commit_queue_flag):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        (test_commit_queue_flag):
        * Scripts/webkitpy/common/watchlist/watchlistparser.py:
        (WatchListParser._validate):

2013-04-16  Mike West  <mkwst@chromium.org>

        Unreviewed update to the watchlist.

        Removing 'mkwst+watchlist@chromium.org' from committers.py and the
        watchist file; moving to 'mkwst@chromium.org' instead.

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/watchlist:

2013-04-16  Ryosuke Niwa  <rniwa@webkit.org>

        Move webkitpy.layout_tests.port to webkitpy.port
        https://bugs.webkit.org/show_bug.cgi?id=114668

        Reviewed by Maciej Stachowiak.

        Moved. Port objects knows a lot more than just layout_tests. They doesn't belong down in layout_tests.

        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/common/host_mock.py:
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/lint_test_expectations.py:
        * Scripts/webkitpy/layout_tests/port: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/layout_tests/servers/apache_http_server_unittest.py:
        * Scripts/webkitpy/layout_tests/servers/http_server_base_unittest.py:
        * Scripts/webkitpy/layout_tests/servers/http_server_unittest.py:
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        * Scripts/webkitpy/performance_tests/perftest.py:
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        * Scripts/webkitpy/port: Copied from Tools/Scripts/webkitpy/layout_tests/port.
        * Scripts/webkitpy/port/apple.py:
        * Scripts/webkitpy/port/base.py:
        * Scripts/webkitpy/port/base_unittest.py:
        * Scripts/webkitpy/port/config_unittest.py:
        (ConfigTest.test_default_configuration__standalone):
        * Scripts/webkitpy/port/driver_unittest.py:
        * Scripts/webkitpy/port/efl.py:
        * Scripts/webkitpy/port/efl_unittest.py:
        * Scripts/webkitpy/port/factory.py:
        * Scripts/webkitpy/port/factory_unittest.py:
        * Scripts/webkitpy/port/gtk.py:
        * Scripts/webkitpy/port/gtk_unittest.py:
        * Scripts/webkitpy/port/image_diff.py:
        * Scripts/webkitpy/port/image_diff_unittest.py:
        * Scripts/webkitpy/port/leakdetector_unittest.py:
        * Scripts/webkitpy/port/mac.py:
        * Scripts/webkitpy/port/mac_unittest.py:
        * Scripts/webkitpy/port/mock_drt.py:
        * Scripts/webkitpy/port/mock_drt_unittest.py:
        * Scripts/webkitpy/port/port_testcase.py:
        * Scripts/webkitpy/port/qt.py:
        * Scripts/webkitpy/port/qt_unittest.py:
        * Scripts/webkitpy/port/server_process_unittest.py:
        * Scripts/webkitpy/port/test.py:
        * Scripts/webkitpy/port/win.py:
        * Scripts/webkitpy/port/win_unittest.py:
        * Scripts/webkitpy/port/xvfbdriver.py:
        * Scripts/webkitpy/port/xvfbdriver_unittest.py:
        * Scripts/webkitpy/tool/bot/botinfo_unittest.py:
        * Scripts/webkitpy/tool/commands/gardenomatic.py:
        * Scripts/webkitpy/tool/commands/perfalizer_unittest.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:

2013-04-16  Commit Queue  <rniwa@webkit.org>

        Unreviewed, rolling out r148498.
        http://trac.webkit.org/changeset/148498
        https://bugs.webkit.org/show_bug.cgi?id=114669

        Appears to have broken EWS (Requested by rniwa on #webkit).

        * Scripts/webkitpy/common/config/ews.json: Removed.
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem):
        (AbstractEarlyWarningSystem.__init__):
        (AbstractEarlyWarningSystem.handle_script_error.does):
        (GtkEWS):
        (GtkWK2EWS):
        (EflEWS):
        (QtEWS):
        (QtWK2EWS):
        (WinEWS):
        (MacEWS):
        (MacWK2EWS):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSystemTest._default_expected_logs):
        (_test_ews):
        (test_ewses):

2013-04-13  Ryosuke Niwa  <rniwa@webkit.org>

        Isolate Early Warning System definitions into a JSON
        https://bugs.webkit.org/show_bug.cgi?id=114558

        Reviewed by Benjamin Poulain.

        Added ews.json to common/config, and made tool/commands/__init__.py call
        AbstractEarlyWarningSystem.load_ews_classes to instantiate classes based on ews.json.

        * Scripts/webkitpy/common/config/ews.json: Extracted from earlywarningsystem.py.
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem):
        (AbstractEarlyWarningSystem.__init__):
        (AbstractEarlyWarningSystem.load_ews_classes): Added. Loads ews.json.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSystemTest._default_expected_logs):
        (_test_ews):
        (test_ewses):

2013-04-15  Ryosuke Niwa  <rniwa@webkit.org>

        WKR gets stuck when there are many merges
        https://bugs.webkit.org/show_bug.cgi?id=114632

        Reviewed by Andreas Kling.

        Move the last revision forward when it exists in a branch.
        Otherwise, we'll be stuck looping over revisions made to merge patches.

        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot.next_work_item):

2013-04-15  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Missing a few packages for building on stock Fedora
        https://bugs.webkit.org/show_bug.cgi?id=113916

        Reviewed by Philippe Normand.

        * gtk/install-dependencies: add packages that are missing.

2013-04-15  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION (r148360): Failure in webkitpy.tool.multicommandtool_unittest.MultiCommandToolTest.test_command_help
        https://bugs.webkit.org/show_bug.cgi?id=114602

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/tool/multicommandtool_unittest.py:
        (CommandTest.test_required_arguments): Reset the static argument_names variable on the TrivialCommand
        interface so its value doesn't leak into the following tests.

2013-04-15  Zan Dobersek  <zandobersek@gmail.com>

        Deprecate land-cowboy in favor of land-cowhand
        https://bugs.webkit.org/show_bug.cgi?id=104470

        Reviewed by Darin Adler.

        Move the LandCowboy command implementation under the LandCowhand command and deprecate the former.

        * Scripts/webkitpy/tool/commands/download.py:
        (LandCowhand):
        (LandCowboy):
        (LandCowboy._prepare_state):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (test_land_cowhand): Adjust the unit tests by testing both LandCowhand and LandCowboy,
        also checking the deprecation message in the output of the latter.

2013-04-15  Jonathan Liu  <net147@gmail.com>

        Improve Windows cmd.exe detection
        https://bugs.webkit.org/show_bug.cgi?id=114620

        Reviewed by Jocelyn Turcotte.

        The current detection code handles Windows cmd.exe and Cygwin shell
        but not does not handle MSYS shell correctly. Simplify and improve the
        detection by checking MINGW_IN_SHELL instead as used in other places
        (e.g. qt_functions.prf).

        * qmake/mkspecs/features/default_pre.prf:

2013-04-15  Manuel Rego Casasnovas  <rego@igalia.com>

        [webkitpy] Use $NUMBER_OF_PROCESSORS in Executive.cpu_count()
        https://bugs.webkit.org/show_bug.cgi?id=114506

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.cpu_count): Modify function in order to use the environment
        variable $NUMBER_OF_PROCESSORS if it is defined and it is an integer
        greater than 0.

2013-04-15  Xan Lopez  <xlopez@igalia.com>

        [BlackBerry] ASSERT in StyleResolver::ensureScopeResolver()
        https://bugs.webkit.org/show_bug.cgi?id=114615

        Reviewed by Carlos Garcia Campos.

        Enable the style scoped feature if we have support for it.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::resetToConsistentStateBeforeTesting):

2013-04-15  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] QtMultimedia not used when GStreamer is not found
        https://bugs.webkit.org/show_bug.cgi?id=111842

        Reviewed by Philippe Normand.

        Fallback to using QtMultimedia when native libraries are not found.

        * qmake/mkspecs/features/features.prf:

2013-04-13  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix attempt for webkitbot. Unicodify everything.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Whois.execute):

2013-04-13  Ryosuke Niwa  <rniwa@webkit.org>

        webkitbot should provide full name, email address, and IRC nicknames on whois
        https://bugs.webkit.org/show_bug.cgi?id=114494

        Reviewed by Benjamin Poulain.

        A response like the one below is useless. Improve it:
        webkitbot: rniwa: zdobersek is zdobersek (zandobersek@gmail.com). Why do you ask?

        We now report full name, email address, committer/reviewer status, and IRC nickname.

        Also teach webkitbot how to respond to ping.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (PingPong): Moved 
        (PingPong.execute):
        (Whois._full_record_and_nick): Renamed and rewritten.
        (Whois.execute):

        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_whois): Updated test cases as needed.

        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        (IRCBotTest.test_help): Added ping.

        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot): Teached WKR how to respond to hi.

2013-04-13  Anders Carlsson  <andersca@apple.com>

        Add form delegate method that's invoked right before sending a submit event to a form element
        https://bugs.webkit.org/show_bug.cgi?id=114575

        Reviewed by Dan Bernstein.

        Add a test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/WillSendSubmitEvent.mm: Added.
        (-[FormDelegate willSendSubmitEventToForm:inFrame:withValues:]):
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):
        
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::toSTD):
        Don't crash when a null NSString is passed to toSTD.

2013-04-13  Ryosuke Niwa  <rniwa@webkit.org>

        Python test fix attempt after r148360.

        * Scripts/webkitpy/tool/multicommandtool_unittest.py:
        (test_command_help):

2013-04-13  Ryosuke Niwa  <rniwa@webkit.org>

        Merge AbstractDeclarativeCommand into Command as a comment suggests
        https://bugs.webkit.org/show_bug.cgi?id=114559

        Reviewed by Antti Koivisto.

        Merged two classes as the comment right above AbstractDeclarativeCommand suggested.
        We need to merge a lot more classes to make webkitpy hackable.

        * Scripts/webkitpy/tool/commands/abstractlocalservercommand.py:
        (AbstractLocalServerCommand):
        (AbstractLocalServerCommand.__init__):
        * Scripts/webkitpy/tool/commands/abstractsequencedcommand.py:
        (AbstractSequencedCommand):
        (AbstractSequencedCommand.__init__):
        * Scripts/webkitpy/tool/commands/adduserstogroups.py:
        (AddUsersToGroups):
        * Scripts/webkitpy/tool/commands/analyzechangelog.py:
        (AnalyzeChangeLog):
        (AnalyzeChangeLog.__init__):
        * Scripts/webkitpy/tool/commands/analyzechangelog_unittest.py:
        * Scripts/webkitpy/tool/commands/bugfortest.py:
        (BugForTest):
        * Scripts/webkitpy/tool/commands/bugsearch.py:
        (BugSearch):
        * Scripts/webkitpy/tool/commands/chromechannels.py:
        (ChromeChannels):
        (__init__):
        * Scripts/webkitpy/tool/commands/download.py:
        (AbstractPatchProcessingCommand):
        * Scripts/webkitpy/tool/commands/findusers.py:
        (FindUsers):
        * Scripts/webkitpy/tool/commands/openbugs.py:
        (OpenBugs):
        * Scripts/webkitpy/tool/commands/queries.py:
        (BugsToCommit):
        (PatchesInCommitQueue):
        (PatchesToCommitQueue):
        (PatchesToCommitQueue.__init__):
        (PatchesToReview):
        (PatchesToReview.__init__):
        (PatchesToReview.execute):
        (WhatBroke):
        (ResultsFor):
        (FailureReason):
        (FindFlakyTests):
        (TreeStatus):
        (CrashLog):
        (PrintExpectations):
        (PrintExpectations.__init__):
        (PrintBaselines):
        (PrintBaselines.__init__):
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractQueue.__init__):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractRebaseliningCommand):
        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        (SuggestNominations):
        (SuggestNominations.__init__):
        * Scripts/webkitpy/tool/commands/upload.py:
        (CommitMessageForCurrentDiff):
        (CommitMessageForCurrentDiff.__init__):
        (CleanPendingCommit):
        (CleanReviewQueue):
        (AssignToCommitter):
        (PostCommits):
        (PostCommits.__init__):
        (MarkBugFixed):
        (MarkBugFixed.__init__):
        (CreateBug):
        (CreateBug.__init__):
        * Scripts/webkitpy/tool/multicommandtool.py:
        (Command):
        (Command.__init__):
        (Command.main):
        (HelpCommand):
        (HelpCommand.__init__):
        * Scripts/webkitpy/tool/multicommandtool_unittest.py:
        (TrivialCommand):
        (TrivialCommand.__init__):
        (LikesToRetry):
        (LikesToRetry.__init__):
        (CommandTest.test_name_with_arguments):
        (CommandTest.test_required_arguments):
        (test_command_help):

2013-04-13  Ed Bartosh  <bartosh@gmail.com>

        [EFL] --minimal build fails with error: 'ViewModeInvalid' is not a member of 'WebCore::Page'
        https://bugs.webkit.org/show_bug.cgi?id=114048

        Reviewed by Gyuyoung Kim.

        Wrapped view media related code in #if ENABLE(VIEW_MODE_CSS_MEDIA)

        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::setViewModeMediaFeature):

2013-04-13  Ryosuke Niwa  <rniwa@webkit.org>

        Merge watchlistloader into host since it's an unnecessary indirection
        https://bugs.webkit.org/show_bug.cgi?id=114555

        Reviewed by Antti Koivisto.

        We don't need a class to load a file.

        * Scripts/webkitpy/common/host.py:
        (Host.watch_list):
        * Scripts/webkitpy/common/watchlist/watchlistloader.py: Removed.
        * Scripts/webkitpy/common/watchlist/watchlistloader_unittest.py: Removed.

2013-04-13  Ryosuke Niwa  <rniwa@webkit.org>

        Rename JSONResultsGeneratorBase to JSONResultsGenerator
        https://bugs.webkit.org/show_bug.cgi?id=114553

        Reviewed by Philippe Normand.

        Renamed now that we've got rid of the old JSONResultsGenerator in r148352.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGenerator):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        (JSONGeneratorTest._test_json_generation):
        (JSONGeneratorTest._verify_json_results):

2013-04-13  Ryosuke Niwa  <rniwa@webkit.org>

        Remove more Chromium specific code from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=114552

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/common/host.py:
        (Host.checkout):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGeneratorBase):
        (JSONResultsGeneratorBase.__init__):
        (JSONResultsGeneratorBase._is_results_all_of_type):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port):
        (Port.expected_filename):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        * Scripts/webkitpy/tool/commands/queues.py:
        (PatchProcessingQueue._new_port_name_from_old):
        (CommitQueue.did_pass_testing_ews):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._results_url):
        (Rebaseline._builder_with_name):
        * Scripts/webkitpy/tool/mocktool.py:
        (MockTool.irc):

2013-04-13  Zan Dobersek  <zdobersek@igalia.com>

        Fix flakiness dashboard unit test failures
        https://bugs.webkit.org/show_bug.cgi?id=114518

        Reviewed by Ryosuke Niwa.

        Fix the current failures in unit tests for the flakiness dashboard by adjusting failing
        test cases to simulate loading the builders list from the webkit.org build master, replacing
        the Chromium builders and platforms that are used in tests with builders and platforms for the
        Apple Mac Lion WebKit2 port, and removing two test cases that were testing Chromium-specific
        functionality of the dashboard.

        This is sort of an interlude to the flakiness dashboard cleanup, with the removal of Chromium-specific
        code and hopefully general simplification of the dashboard codebase coming in near future.

        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (resetGlobals):
        (test):
        * TestResultServer/static-dashboards/loader_unittests.js:

2013-04-12  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Make AccessibilityUIElementIOS.mm build on iOS

        Reviewed by Chris Fleizach.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: Declare
        -_accessibilityPath from the WebAccessibilityObjectWrapper
        class.
        (_CGPathEnumerationIteration): Remove unused CGPoint* variable.

2013-04-12  Jeffrey Pfau  <jpfau@apple.com>

        Unreviewed, remove an old email address for myself.

        * Scripts/webkitpy/common/config/committers.py:

2013-04-12  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        [WK2] WebPageProxy loadURL() won't work when called just after terminateProcess()
        https://bugs.webkit.org/show_bug.cgi?id=110743

        Reviewed by Benjamin Poulain.

        Adding a new test file to check if loading a page just after WebProcess
        has crashed (or was terminated) works. The test executes the
        following steps (Load, Crash, Load), thus stressing WebProcess
        reattach and process termination code path.

        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp:
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/LoadPageOnCrash.cpp: Added.
        (TestWebKitAPI):
        (WebKit2CrashLoader):
        (TestWebKitAPI::WebKit2CrashLoader::WebKit2CrashLoader):
        (TestWebKitAPI::WebKit2CrashLoader::loadUrl):
        (TestWebKitAPI::WebKit2CrashLoader::crashWebProcess):
        (TestWebKitAPI::didFinishLoad):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WebKit2.pro:

2013-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        [Mac] REGRESSION: Auto substitution strips new lines
        https://bugs.webkit.org/show_bug.cgi?id=114537

        Reviewed by Enrica Casucci.

        Add a rule to replace "helloleworld" by "hello\nworld" for testing purpose.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):

2013-04-09  Roger Fong  <roger_fong@apple.com>

        Re-enable WinEWS tests.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-04-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Split GtkAuthenticationDialog in two widgets
        https://bugs.webkit.org/show_bug.cgi?id=103644

        Reviewed by Xan Lopez.

        * gtk/generate-gtkdoc:
        (get_webkit2_options): Do not generate api docs for
        WebKitAuthenticationDialog which is private in WebKit2.
        (get_webkit1_options): Do not generate api docs for
        webkitauthenticationdialog which is private in WebKit1.

2013-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit Queues should capitalize K in Wk2
        https://bugs.webkit.org/show_bug.cgi?id=114524

        Reviewed by Philippe Normand.

        * QueueStatusServer/model/queues.py:
        (Queue.display_name):

2013-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        [Mac] Enable spellchecking tests added in r141471
        https://bugs.webkit.org/show_bug.cgi?id=108525

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (resetDefaultsToConsistentValues):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2013-04-12  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Enable WebKit2 building on GTK EWSs
        https://bugs.webkit.org/show_bug.cgi?id=114500

        Reviewed by Philippe Normand.

        Add configuration in order to be able to setup GTK EWSs building
        WebKit2. A new queue gtk-wk2-ews is added.

        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.port):
        (GtkWK2Port):
        (GtkWK2Port.build_webkit_command):
        (GtkWK2Port.run_webkit_tests_command):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_gtk_port):
        (DeprecatedPortTest):
        (DeprecatedPortTest.test_gtk_wk2_port):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (GtkWK2EWS):

2013-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        Remove Chromium scripts
        https://bugs.webkit.org/show_bug.cgi?id=114492

        Reviewed by Benjamin Poulain.

        * Scripts/run-chromium-webkit-unit-tests: Removed.
        * Scripts/update-webkit-chromium: Removed.

2013-04-12  Commit Queue  <rniwa@webkit.org>

        Unreviewed, rolling out r148262.
        http://trac.webkit.org/changeset/148262
        https://bugs.webkit.org/show_bug.cgi?id=114493

        Cairo dep should now build, rolling r148247 back in (Requested
        by zdobersek on #webkit).

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject):
        * gtk/jhbuild.modules:

2013-04-11  Commit Queue  <rniwa@webkit.org>

        Unreviewed, rolling out r148247.
        http://trac.webkit.org/changeset/148247
        https://bugs.webkit.org/show_bug.cgi?id=114490

        Cairo dep fails to build on builders due to missing EGL
        headers (Requested by zdobersek on #webkit).

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject):
        * gtk/jhbuild.modules:

2013-04-11  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add accelerated 2D canvas support using cairo-gl
        https://bugs.webkit.org/show_bug.cgi?id=104672

        Reviewed by Alejandro G. Castro.

        Since the value of ACCELERATED_2D_CANVAS relies on some somewhat unusual
        dependencies, don't override value of the setting determined by configure.
        This will make it easier for people using build-webkit, but not the
        WebKit JHBuild.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject): Add a blacklist for settings to never override.
        * gtk/jhbuild.modules: Build CairoGL.

2013-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        build.webkit.org should link to webkit-queues instead of webkit-commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=114477

        Reviewed by Benjamin Poulain.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2013-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        Leaks builder should not be triggered upon new commits
        https://bugs.webkit.org/show_bug.cgi?id=114475

        Reviewed by Jessie Berlin.

        Don't trigger them on new checkins. Wait for Mountain Lion (Build), which already triggers
        the leak builder when builds are done.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2013-04-11  Kalev Lember  <kalevlember@gmail.com>

        [GTK] Windows build failure after r136056
        https://bugs.webkit.org/show_bug.cgi?id=114121

        Reviewed by Martin Robinson.

        * TestWebKitAPI/config.h: Make sure defines are correct for other
        Windows ports than apple-win.

2013-04-11  Ojan Vafai  <ojan@chromium.org>

        Remove myself from watchlists.
        * Scripts/webkitpy/common/config/watchlist:

2013-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. Don't hard-code queues.webkit.org at least during the transition.

        * QueueStatusServer/templates/statusbubble.html:

2013-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        Use webkit-queues.appspot.com instead of webkit-commit-queue.appspot.com
        https://bugs.webkit.org/show_bug.cgi?id=114397

        Reviewed by Benjamin Poulain.

        Reland the patch since Alan appears to have finished the migration.

        * Scripts/webkitpy/common/net/statusserver.py:
        (StatusServer):

2013-04-11  Brian Holt  <brian.holt@samsung.com>

        [Gtk] Combo boxes should be arrow-out-of-able similar to list boxes when caret-browsing is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=76796

        Reviewed by Chris Fleizach.

        Make the Gtk window for the DRT a toplevel so that it gets the
        focus from the window manager when the test starts.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (main):

2013-04-04  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Use CSS4 image-rendering to determing image scaling quality
        https://bugs.webkit.org/show_bug.cgi?id=113405

        Reviewed by Simon Fraser.

        Introduce new flag to enable experimental support for CSS4 Images.

        * Scripts/webkitperl/FeatureList.pm:

2013-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        Remove code for Chromium from wkbuild.py
        https://bugs.webkit.org/show_bug.cgi?id=114423

        Reviewed by Benjamin Poulain.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):
        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        (ShouldBuildTest):

2013-04-11  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, update my IRC nickname.

        * Scripts/webkitpy/common/config/committers.py: I no longer use philn-tp.

2013-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        Remove the rest of Chromium code from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=114420

        Reviewed by Benjamin Poulain.

        * Scripts/webkitpy/common/config/urls.py:
        (view_revision_url):
        * Scripts/webkitpy/common/host.py:
        (Host._engage_awesome_locale_hacks):
        (Host.initialize_scm):
        (Host):
        * Scripts/webkitpy/common/host_mock.py:
        (MockHost.__init__):
        (MockHost.checkout):
        * Scripts/webkitpy/common/net/buildbot/chromiumbuildbot.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGeneratorBase._insert_generic_metadata):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser._tokenize_line):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (ExpectationSyntaxTests.test_bare_name_and_bugs):
        (ExpectationSyntaxTests.test_warnings):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.skips_perf_test):
        (Port.path_to_test_expectations_file):
        (Port._port_flag_for_scripts):
        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_function_definition):
        (check_include_line):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (OrderOfIncludesTest.test_check_wtf_includes):
        (WebKitStyleTest.test_webkit_export_check):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.test_valid_expectations):
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Rollout.execute):
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_whois):
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        (IRCBotTest.test_help):
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:
        (SheriffBotTest.test_command_aliases):

2013-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        roll-chromium-deps doesn't roll DEPS
        https://bugs.webkit.org/show_bug.cgi?id=114421

        Reviewed by Antti Koivisto.

        Roll DEPS. Rolling DEPS. Rolled DEPS.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (RollChromiumDEPS.execute):

2013-04-11  Glenn Adams  <glenn@skynav.com>

        [webkitpy] Remove lingering return_exit_code usage in scm_mock and rebaselineserver.
        https://bugs.webkit.org/show_bug.cgi?id=114418

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        (MockSCM.add): Remove optional remove_exit_code argument.
        (MockSCM.add_list): Remove optional remove_exit_code argument and return value.
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        (_rebaseline_test): Use ScriptError to capture SCM.add() failure and exit code.
        (_move_test_baselines): Use ScriptError to capture SCM.add() failure and exit code.

2013-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        Fix roll-chromium-deps and hi.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Hi.execute):
        (RollChromiumDEPS.execute):

2013-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        Remove webkitpy code to roll Chromium DEPS
        https://bugs.webkit.org/show_bug.cgi?id=114415

        Reviewed by Benjamin Poulain.

        Removed the code to roll Chromium DEPS in WebKit.

        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout.bug_id_for_this_commit):
        * Scripts/webkitpy/common/checkout/checkout_mock.py:
        (MockCheckout.commit_message_for_this_commit):
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CheckoutTest.test_suggested_reviewers):
        * Scripts/webkitpy/common/checkout/deps.py: Removed.
        * Scripts/webkitpy/common/checkout/deps_mock.py: Removed.
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (RollChromiumDEPS): Teach webkitbot a sense of humor.
        (RollChromiumDEPS.execute):
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_create_bug):
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        (IRCBotTest.test_revert):
        * Scripts/webkitpy/tool/bot/sheriff.py:
        (Sheriff.post_rollout_patch):
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/roll.py: Removed.
        * Scripts/webkitpy/tool/commands/roll_unittest.py: Removed.
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py: Removed.
        * Scripts/webkitpy/tool/steps/updatechromiumdeps.py: Removed.
        * Scripts/webkitpy/tool/steps/updatechromiumdeps_unittest.py: Removed.

2013-04-11  Glenn Adams  <glenn@skynav.com>

        [webkitpy] SVNTest fails four tests when using subversion client 1.7 or later
        https://bugs.webkit.org/show_bug.cgi?id=114386

        Reviewed by Benjamin Poulain.

        Subversion client 1.7 uses a new locking scheme that invalidates the technique used
        in test_svn_lock(), so skip that test for 1.7 (or later) until a new technique
        can be implemented. Further, 1.7 changed svn add to not add intermediate directories
        by default and to return exit code 1 if a file/dir had already been added.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (test_svn_lock): Skip body of test if subversion client 1.7 or later.
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.add_list): Use --parents option and handle exit code 1 if subversion client 1.7 or later.

2013-04-10  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed.

        * GNUmakefile.am: Removing extra whitespace that's producing warnings.

2013-04-10  Glenn Adams  <glenn@skynav.com>

        [webkitpy] Remove unused return_exit_code argument and returned values from SCM.{add,add_list}
        https://bugs.webkit.org/show_bug.cgi?id=114410

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.add_list): Remove optional return_exit_code argument. Remove return value.
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.add): Remove optional return_exit_code argument.
        (SCM.add_list): Remove optional return_exit_code argument.
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.add_list): Remove optional return_exit_code argument. Remove return value.

2013-04-10  Eric Seidel  <eric@webkit.org>

        Remove myself from the watchlists, I'm getting too much bug mail. :)

        * Scripts/webkitpy/common/config/watchlist:

2013-04-10  Commit Queue  <rniwa@webkit.org>

        Unreviewed, rolling out r148158.
        http://trac.webkit.org/changeset/148158
        https://bugs.webkit.org/show_bug.cgi?id=114405

        We need to migrate status data (Requested by rniwa on
        #webkit).

        * Scripts/webkitpy/common/net/statusserver.py:
        (StatusServer):

2013-04-10  Benjamin Poulain  <bpoulain@apple.com>

        Mass remove all the empty directories

        Rubberstamped by Ryosuke Niwa.

        * BuildSlaveSupport/gtk/crashmon/log: Removed.
        * BuildSlaveSupport/gtk/xvfb/log: Removed.
        * DumpRenderTree/ForwardingHeaders/wtf: Removed.
        * DumpRenderTree/unix/TestNetscapePlugin/ForwardingHeaders/WebKit: Removed.
        * MiniBrowser/gtk/WebBundle: Removed.
        * MiniBrowser/win: Removed.
        * QtTestPlatformPlugin/mac: Removed.
        * Scripts/webkitpy/tool/bot/testdata: Removed.
        * Scripts/webkitpy/tool/commands/data/rebaselineserver: Removed.
        * efl/ImageDiff: Removed.
        * iExploder/htdocs: Removed.
        * iExploder/iexploder-1.7.2/output: Removed.
        * iExploder/tools: Removed.
        * qmake/config.tests/libexecdir: Removed.
        * qmake/config.tests/libjpeg: Removed.
        * qmake/config.tests/libpng: Removed.

2013-04-10  Ryosuke Niwa  <rniwa@webkit.org>

        Use webkit-queeus.appspot.com instead of webkit-commit-queue.appspot.com
        https://bugs.webkit.org/show_bug.cgi?id=114397

        Reviewed by Benjamin Poulain.

        * Scripts/webkitpy/common/net/statusserver.py:
        (StatusServer):

2013-04-10  Adam Barth  <abarth@webkit.org>

        Remove abarth from watchlists
        https://bugs.webkit.org/show_bug.cgi?id=114390

        Reviewed by Ryosuke Niwa.

        I'm trying to cut down on the amount of bugmail I get so that I'll have
        more of a chance to notice a piece of bugmail directed at me.

        * Scripts/webkitpy/common/config/watchlist:

2013-04-10  Ryosuke Niwa  <rniwa@webkit.org>

        webkit-test-results.appspot.com loads the dashboard for Chromium by default
        https://bugs.webkit.org/show_bug.cgi?id=114381

        Reviewed by Benjamin Poulain.

        Changed the defaults.

        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/dashboard_base.js:
        (currentBuilderGroupCategory):

2013-04-10  Ryosuke Niwa  <rniwa@webkit.org>

        Remove Chromium EWS bots from the queue status server
        https://bugs.webkit.org/show_bug.cgi?id=113988

        Reviewed by Benjamin Poulain.

        Removed Chromium EWS bots. Also updated it to use webkit-queues.appspot.com.

        * QueueStatusServer/app.yaml:
        * QueueStatusServer/config/queues.py:
        * QueueStatusServer/model/queues.py:
        (Queue.short_name):
        (Queue.display_name):
        * QueueStatusServer/model/queues_unittest.py:
        (QueueTest.test_short_name):
        (QueueTest.test_display_name):
        (QueueTest.test_name_with_underscores):
        * QueueStatusServer/templates/activebots.html:

2013-04-10  Ojan Vafai  <ojan@chromium.org>

        Change all instances of test-results.appspot.com to webkit-test-results.appspot.com
        https://bugs.webkit.org/show_bug.cgi?id=114370

        Reviewed by Ryosuke Niwa.

        Finish the transition of WebKit over to it's own instance of the flakiness dashboard.
        Unfortunately, there's no way to test this until this is committed and there is
        a master restart.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        * TestResultServer/generate_builders_json.py:
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/loader.js:

2013-04-10  Glenn Adams  <glenn@skynav.com>

        [Qt] Fix regression to test-webkitpy.
        https://bugs.webkit.org/show_bug.cgi?id=114368

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory._default_port): Return qt-linux instead of chromium-linux as default port for linux/freebsd.
        (PortFactory.get): Remove obsolete chromium port related code.
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.default_child_processes): Prevent type error if can't determine total memory.

2013-04-10  Anders Carlsson  <andersca@apple.com>

        Remove unneeded headers from FrameLoader.h
        https://bugs.webkit.org/show_bug.cgi?id=114223

        Reviewed by Geoffrey Garen.

        Add back headers implicitly included by other headers.

        * WebKitTestRunner/WorkQueueManager.cpp:

2013-04-10  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Include a crash-fixing patch for the at-spi2-atk dependency
        https://bugs.webkit.org/show_bug.cgi?id=114365

        Reviewed by Martin Robinson.

        Add a patch for the at-spi2-atk 2.8.0 dependency that is applied through the Jhbuild setup.
        The patch addresses crashes in the tally_event_reply method. It is already committed into the
        at-spi2-atk source tree and will be available with the next stable release, after which the
        patch should be removed and the dependency version bumped.

        * gtk/jhbuild.modules:
        * gtk/patches/at-spi2-atk-2.8.0-null-check-after-cleanup.patch: Added.

2013-04-10  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build fix. Correct DropBox download link.

        * Scripts/update-webkit-wincairo-libs: Revise download URL to
        match change in DropBox server behavior.

2013-04-09  Geoffrey Garen  <ggaren@apple.com>

        Removed an annoying message from svn-create-patch
        https://bugs.webkit.org/show_bug.cgi?id=114332

        Reviewed by Alexey Proskuryakov.

        I see this message basically every time I write a patch, so it must not
        be true.

        * Scripts/svn-create-patch:
        (generateDiff):

2013-04-10  Anton Obzhirov  <a.obzhirov@samsung.com>

        [GTK] Add support for Page Visibility
        https://bugs.webkit.org/show_bug.cgi?id=97324

        Reviewed by Sam Weinig.

        Implemented test runner API for page visibility layout tests.

        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        (TestRunner::resetPageVisibility):
        (TestRunner::setPageVisibility):
        * Scripts/webkitperl/FeatureList.pm:

2013-04-10  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [ATK] REGRESSION(r148033): Add a stub for AccessibilityUIElement::pathDescription().
        https://bugs.webkit.org/show_bug.cgi?id=114342

        Reviewed by Gyuyoung Kim.

        Commit 148033 only added an implementation for the Mac port, which made
        other ports fail most tests since loading the injected bundle failed
        with a missing symbol.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::pathDescription):

2013-04-10  Artur Moryc  <a.moryc@samsung.com>

        [EFL] Add spell checking option to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=114282

        Reviewed by Ryosuke Niwa.

        Spell checking is enabled by adding a flag (t/text-checking)
        with launching MiniBrowser.

        * MiniBrowser/efl/main.c:
        (window_create):
        (elm_main):

2013-04-10  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION (r146518): WebKit2APITests/TestInspector is failing
        https://bugs.webkit.org/show_bug.cgi?id=113281

        Reviewed by Darin Adler.

        * Scripts/run-gtk-tests:
        (TestRunner): Remove the skip entry for the WebKit2APITests/TestInspector unit test.

2013-04-09  Glenn Adams  <glenn@skynav.com>

        Fix trivial test-webkitpy regression introduced by http://trac.webkit.org/changeset/148075.

        Unreviewed.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_build_check):

2013-04-09  Glenn Adams  <glenn@skynav.com>

        [webkitpy] Remove chromium ports.
        https://bugs.webkit.org/show_bug.cgi?id=114326

        Reviewed by Dirk Pranke.

        As a side effect, also:

        - remove chromium builders from webkitpy.layout_tests.port.builders
        - remove chromium builders from rebaseline
        - rewrite chromium dependent tests in rebaseline_unittest
        - remove chromium platform from garden-o-matic
        - select apple platform as default platform in garden-o-matic
        - remove chromium port dependencies from a few other tests (run_webkit_tests_integrationtest, factory_unittest, style.checkers.test_expectations_unittest)

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        (BaselineOptimizerTest.test_move_baselines):
        (BaselineOptimizerTest.test_efl):
        (BaselineOptimizerTest.test_no_add_mac_future):
        (BaselineOptimizerTest.test_win_does_not_drop_to_win_7sp0):
        (BaselineOptimizerTest.test_common_directory_includes_root):
        (BaselineOptimizerTest.test_complex_shadowing):
        (BaselineOptimizerTest.test_virtual_ports_filtered):
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py: Removed.
        * Scripts/webkitpy/layout_tests/port/chromium_android.py: Removed.
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py: Removed.
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py: Removed.
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/chromium_port_testcase.py: Removed.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/chromium_win.py: Removed.
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (platform_options):
        (PortFactory):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.test_qt):
        (FactoryTest.test_get_from_builder_name):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_build_check):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.test_determine_port_from_expectations_path):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (Rebaseline._builders_to_pull_from):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (_BaseTestCase):
        (_BaseTestCase.setUp):
        (TestRebaselineTest.setUp):
        (TestRebaselineTest.test_baseline_directory):
        (test_rebaseline_updates_expectations_file):
        (test_rebaseline_does_not_include_overrides):
        (test_rebaseline_test):
        (test_rebaseline_test_and_print_scm_changes):
        (test_rebaseline_and_copy_test):
        (test_rebaseline_and_copy_test_no_existing_result):
        (test_rebaseline_and_copy_test_with_lion_result):
        (test_rebaseline_and_copy_no_overwrite_test):
        (TestRebaselineExpectations.test_rebaseline_expectations):

2013-04-09  Ryosuke Niwa  <rniwa@webkit.org>

        newcommitbot (WKR) requires a subversion checkout
        https://bugs.webkit.org/show_bug.cgi?id=114309

        Reviewed by Benjamin Poulain.

        Directly talk to the subversion server instead of relying on a local checkout.
        This allows us to run WKR off of a git clone.

        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot.next_work_item):
        (NewCommitBot.process_work_item):

2013-04-09  Ryosuke Niwa  <rniwa@webkit.org>

        webkitbot refers to sheriffbot in help
        https://bugs.webkit.org/show_bug.cgi?id=114307

        Reviewed by Benjamin Poulain.

        Fixed the bug by proxying the IRC nickname of "sheriffbot" via Sheriff object.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Help):
        (Help.execute):
        (RollChromiumDEPS.execute):
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        (IRCBotTest.test_help):
        * Scripts/webkitpy/tool/bot/sheriff.py:
        (Sheriff.name):

2013-04-06  Roger Fong  <roger_fong@apple.com>

        Kill old processes between runs on WinEWS bots.
        Temporarily disable tests to let bots catch up again.

        * EWSTools/start-queue-win.sh:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-04-09  Glenn Adams  <glenn@skynav.com>

        [webkitpy] Remove chromium deprecated port support.
        https://bugs.webkit.org/show_bug.cgi?id=114228

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.port): Removed chromium ports from port name to port class mapping.
        (ChromiumPort): Removed.
        (ChromiumAndroidPort): Removed.
        (ChromiumXVFBPort): Removed.
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_chromium_port): Removed.
        (DeprecatedPortTest.test_chromium_android_port): Removed.
        (DeprecatedPortTest.test_chromium_xvfb_port): Removed.
        * Scripts/webkitpy/tool/steps/update_unittest.py:
        (UpdateTest.test_update_command_non_interactive): Use mac instead of chromium ports.
        (UpdateTest.test_update_command_interactive): Use mac instead of chromium ports.

2013-04-09  Chris Fleizach  <cfleizach@apple.com>

        AX: The bounding paths should be made available through accessibility
        https://bugs.webkit.org/show_bug.cgi?id=113817

        Reviewed by David Kilzer.

        Add a pathDescription property for testing so that it's possible
        to verify that a path is being returned correctly.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getPathDescriptionCallback):
        (AccessibilityUIElement::pathDescription):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (_CGPathEnumerationIteration):
        (AccessibilityUIElement::pathDescription):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::pathDescription):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::pathDescription):
        (WTR):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::pathDescription):
        (WTR):

2013-04-09  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL] Declare TEST_THEME_DIR in a single place.
        https://bugs.webkit.org/show_bug.cgi?id=114285

        Reviewed by Anders Carlsson.

        Adapt to the renaming of `THEME_DIR' to `TEST_THEME_DIR'.

        * DumpRenderTree/efl/CMakeLists.txt:
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::createInspectorView):
        (DumpRenderTreeChrome::initialize):
        (DumpRenderTreeChrome::onDownloadRequest):
        * EWebLauncher/CMakeLists.txt:
        * EWebLauncher/main.c:
        (findThemePath):
        * EWebLauncher/url_bar.c:
        (url_bar_add):
        * MiniBrowser/efl/CMakeLists.txt:
        * MiniBrowser/efl/main.c:
        (window_create):
        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/PlatformEfl.cmake:
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2013-04-09  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] upversion of clutter and its dependecy
        https://bugs.webkit.org/show_bug.cgi?id=114016

        Reviewed by Gustavo Noronha Silva.

        Upversion of clutter to 1.14, cogl to 1.14 and clutter-gtk to 1.4.4.

        * gtk/jhbuild-optional.modules:

2013-04-09  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [WK2] Drop WebProcess capabilities on Linux using seccomp filters
        https://bugs.webkit.org/show_bug.cgi?id=89875

        Reviewed by Maciej Stachowiak.

        Add unit tests to verify if the handling of the open, openat, creat syscall
        is being done right. We check if the Read/Write/ReadAndWrite permissions
        are respected, if the canonical path is being resolved and if
        the permissions are falling back to the topmost parent directory with a
        policy set when the directory being opened has no policy.

        We also test if any attempt of blocking SIGSYS is silently ignored.
        SIGSYS cannot be blocked because in it's handler is where we hook
        syscalls to the broker process.

        Also added libseccomp to EFL's jhbuild to make the life of developers
        willing to help easier.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/Tests/WebKit2/SeccompFilters.cpp: Added.
        (TestWebKitAPI):
        (SeccompEnvironment):
        (TestWebKitAPI::SeccompEnvironment::SetUp):
        (TestWebKitAPI::SeccompEnvironment::TearDown):
        (TestWebKitAPI::dummyHandler):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::stressTest):
        * efl/jhbuild.modules:
        * qmake/mkspecs/features/features.pri:

2013-04-09  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION: Autocorrection doesn't work in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=113846

        Reviewed by Alexey Proskuryakov.

        The problem was that we were replacing NSSpellCheck's dictionary with our own
        in DumpRenderTree but we were not adding necessary corrections to the dictionary.

        Fixed the bug by having NSSpellChecker correct "mesage" and "wouldn" to "message"
        and "would" respectively in DumpRenderTree.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):

2013-04-09  Benjamin Poulain  <benjamin@webkit.org>

        Remove the gyp files for Tools
        https://bugs.webkit.org/show_bug.cgi?id=114248

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/DumpRenderTree.gyp: Removed.
        * DumpRenderTree/DumpRenderTree.gyp/.gitignore: Removed.
        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp: Removed.
        * DumpRenderTree/DumpRenderTree.gypi: Removed.
        * TestWebKitAPI/TestWebKitAPI.gyp: Removed.
        * TestWebKitAPI/TestWebKitAPI.gyp/.gitignore: Removed.
        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp: Removed.
        * TestWebKitAPI/TestWebKitAPI.gypi: Removed.

2013-04-08  Ryosuke Niwa  <rniwa@webkit.org>

        WKR (new-commit-bot) is too slow
        https://bugs.webkit.org/show_bug.cgi?id=110087

        Reviewed by Geoffrey Garen.

        Running "svn up" or "git svn fetch" is way too slow (takes 2-3 minutes) on the machine I'm running the bot.
        Just run "svn log -r <revision>" instead to cut down the delay.

        Unfortunately, this work around doesn't work in a git checkout but who cares given I'm the one running the bot.

        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot):
        (NewCommitBot.next_work_item):
        (NewCommitBot._is_empty_log):
        (NewCommitBot._update_checkout):

2013-04-08  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. Can't remove appendCustomBuildFlags.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (appendCustomBuildFlags):

2013-04-08  Ryosuke Niwa  <rniwa@webkit.org>

        Remove Chromium builders from build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=113990

        Reviewed by Benjamin Poulain.

        Removed.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (InstallGtkDependencies):
        (RunUnitTests.start):
        (RunWebKit2Tests.start):
        (Factory.__init__):
        (unitTestsSupported):
        (TestFactory.__init__):
        (BuildAndTestFactory.__init__):
        (BuildAndPerfTestFactory.__init__):
        (BuildAndPerfTestWebKit2Factory.__init__):
        (DownloadAndPerfTestFactory.__init__):
        (loadBuilderConfig):
        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2013-04-08  Benjamin Poulain  <benjamin@webkit.org>

        Remove HTML Notification
        https://bugs.webkit.org/show_bug.cgi?id=114231

        Reviewed by Ryosuke Niwa.

        * qmake/mkspecs/features/features.pri:

2013-04-08  Glenn Adams  <glenn@skynav.com>

        Remove chromium EWS support, and fix broken test.
        https://bugs.webkit.org/show_bug.cgi?id=114221

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractChromiumEWS): Removed.
        (ChromiumLinuxEWS): Removed.
        (ChromiumLinuxDebugEWS): Removed.
        (ChromiumWindowsEWS): Removed.
        (ChromiumAndroidEWS): Removed.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSystemTest): Fix misspelled class name.
        (test_ewses): Fix entry point name to ensure test is run.

2013-04-08  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Remove WebKit2 source code
        https://bugs.webkit.org/show_bug.cgi?id=114096

        Reviewed by Anders Carlsson.

        Remove the windows specific parts of the MiniBrowser.

        * MiniBrowser/MiniBrowser.vcproj: Removed.
        * MiniBrowser/MiniBrowserLauncher.vcproj: Removed.
        * MiniBrowser/MiniBrowserPostBuild.cmd: Removed.
        * MiniBrowser/MiniBrowserPreBuild.cmd: Removed.
        * MiniBrowser/win/BrowserView.cpp: Removed.
        * MiniBrowser/win/BrowserView.h: Removed.
        * MiniBrowser/win/BrowserWindow.cpp: Removed.
        * MiniBrowser/win/BrowserWindow.h: Removed.
        * MiniBrowser/win/MiniBrowser.cpp: Removed.
        * MiniBrowser/win/MiniBrowser.h: Removed.
        * MiniBrowser/win/MiniBrowser.rc: Removed.
        * MiniBrowser/win/main.cpp: Removed.
        * MiniBrowser/win/resource.h: Removed.
        * MiniBrowser/win/stdafx.cpp: Removed.
        * MiniBrowser/win/stdafx.h: Removed.

2013-04-08  Ryosuke Niwa  <rniwa@webkit.org>

        Use port 6665 instead of 6667 since the latter doesn't seem to work well.

        * Scripts/webkitpy/common/config/irc.py:

2013-04-08  Arunprasad Rajkumar  <arunprasadr@nds.com>

        Call Netscape Plugin's toString() and valueOf() instead of providing default implementation
        https://bugs.webkit.org/show_bug.cgi?id=113139

        Reviewed by Anders Carlsson.

        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj.filters:
        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        * DumpRenderTree/TestNetscapePlugIn/Tests/ToStringAndValueOfObject.cpp: Added.
        (ToStringAndValueOfObject):
        (ToStringAndValueOfObject::ToStringAndValueOfObject):
        (ScriptableObject):
        (ToStringAndValueOfObject::ScriptableObject::hasMethod):
        (ToStringAndValueOfObject::ScriptableObject::invoke):
        (ToStringAndValueOfObject::ScriptableObject::pluginTest):
        (ToStringAndValueOfObject::NPP_GetValue):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:

2013-04-08  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Bump gnome-themes-standard to 3.6.0
        https://bugs.webkit.org/show_bug.cgi?id=114155

        Reviewed by Martin Robinson.

        * gtk/jhbuild.modules: As now we depend on GTK+ 3.6.0 bump the
        dependency of gnome-themes-standard accordingly.

2013-04-08  David Levin  <levin@chromium.org>

        Remove my watchlist entries.
        https://bugs.webkit.org/show_bug.cgi?id=114180

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/watchlist:

2013-04-08  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL] Mark ShouldGoToBackForwardListItem API test as failing
        https://bugs.webkit.org/show_bug.cgi?id=114161

        Reviewed by Gyuyoung Kim.

        Mark ShouldGoToBackForwardListItem API test as failing for EFL port
        as it is crashing due to Bug 111074.

        * TestWebKitAPI/PlatformEfl.cmake:

2013-04-07  David Kilzer  <ddkilzer@apple.com>

        Remove the rest of SVG_DOM_OBJC_BINDINGS
        <http://webkit.org/b/114112>

        Reviewed by Geoffrey Garen.

        * Scripts/webkitperl/FeatureList.pm:
        - Remove --svg-dom-objc-bindings switch.
        * qmake/mkspecs/features/features.pri:
        - Remove reference to ENABLE_SVG_DOM_OBJC_BINDINGS.

2013-04-07  Ed Bartosh  <bartosh@gmail.com>

        [EFL] -minimal build fails with error: WebCore::FrameSelection::notifyAccessibilityForSelectionChange()
        https://bugs.webkit.org/show_bug.cgi?id=114089

        Reviewed by Chris Fleizach.

        Wrapped accessibility related code in #if HAVE(ACCESSIBILITY)
        * DumpRenderTree/AccessibilityController.cpp:
        * DumpRenderTree/AccessibilityUIElement.cpp:
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::DumpRenderTreeChrome):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):

2013-04-06  Laszlo Gombos  <l.gombos@samsung.com>

        Build fix after r147857, remove remaining USE(JSC) guards.

        Unreviewed.

        * DumpRenderTree/config.h:
        * TestWebKitAPI/config.h:
        * WebKitTestRunner/config.h:

2013-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Rename sheriffbot to webkitbot
        https://bugs.webkit.org/show_bug.cgi?id=114109

        Reviewed by Benjamin Poulain.

        Renamed since sheriffbot will be used in Blink.

        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        (SheriffBot):
        (SheriffBot.begin_work_queue):

2013-04-06  Oliver Hunt  <oliver@apple.com>

        Unify the many and varied stack trace mechanisms, and make the result sane.
        https://bugs.webkit.org/show_bug.cgi?id=114072

        Reviewed by Filip Pizlo.

        The commandline jsc executable no longer requires arguments, so
        I've made run-jsc work without them.

        * Scripts/run-jsc:

2013-04-06  Ed Bartosh  <bartosh@gmail.com>

        [EFL] build fails with error: 'UINT_MAX' was not declared in this scope
        https://bugs.webkit.org/show_bug.cgi?id=114086

        Reviewed by Tim Horton.

        * DumpRenderTree/AccessibilityUIElement.cpp: Included limits.h

2013-04-06  Zan Dobersek  <zdobersek@igalia.com>

        Remove remaining PLATFORM(CHROMIUM) guards in TestWebKitAPI, WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=114083

        Reviewed by Ryosuke Niwa.

        Remove the remaining three occurrences of the PLATFORM(CHROMIUM) build guards
        in TestWebKitAPI and WebKitTestRunner.

        * TestWebKitAPI/config.h:
        * TestWebKitAPI/mac/InjectedBundleControllerMac.mm:
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):

2013-04-06  Geoffrey Garen  <ggaren@apple.com>

        Rolled out 147820 and 147818 because they caused plugins tests to ASSERT
        https://bugs.webkit.org/show_bug.cgi?id=114094

        Reviewed by Anders Carlsson.

        * Scripts/run-jsc:

2013-04-05  Ojan Vafai  <ojan@chromium.org>

        Move the flakiness dashboard to the new instance at webkit-test-results.appspot.com
        https://bugs.webkit.org/show_bug.cgi?id=114080

        Reviewed by Ryosuke Niwa.

        This way, the WebKit and Blink dashboard code can change as appropriate without
        needing to consider the other project's needs. This still doesn't update the
        buildbots to upload to the new location, or the dashboard code to pull the
        results.json files from the new location, but it at least allows for changing the
        UI code (e.g. the WebKit one can remove all knowledge of the Chromium bots).

        * TestResultServer/app.yaml:

2013-04-05  Ryosuke Niwa  <rniwa@webkit.org>

        Re-enable testing on the commit queue
        https://bugs.webkit.org/show_bug.cgi?id=114078

        Reviewed by Darin Adler.

        Re-enabled the feature and the associated tests.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        (CommitQueueTask.run):
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        (CommitQueueTaskTest._run_through_task):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (CommitQueueTest._mock_test_result):

2013-04-05  Oliver Hunt  <oliver@apple.com>

        Unify the many and varied stack trace mechanisms, and make the result sane.
        https://bugs.webkit.org/show_bug.cgi?id=114072

        Reviewed by Filip Pizlo.

        The commandline jsc executable no longer requires arguments, so
        I've made run-jsc work without them.

        * Scripts/run-jsc:

2013-04-05  Chris Fleizach  <cfleizach@apple.com>

        AX: Make SVG Group containers accessible elements
        https://bugs.webkit.org/show_bug.cgi?id=113939

        Reviewed by Simon Fraser.

        Implement axController.elementAtPoint for iOS.
        Implement a correct version of clickPoint for iOS.

        * DumpRenderTree/ios/AccessibilityControllerIOS.mm:
        (AccessibilityController::elementAtPoint):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::clickPointX):
        (AccessibilityUIElement::clickPointY):

2013-04-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r147773 and r147774.
        http://trac.webkit.org/changeset/147773
        http://trac.webkit.org/changeset/147774
        https://bugs.webkit.org/show_bug.cgi?id=114056

        Causing some exceptions on AppEngine I don't understand
        (Requested by rniwa on #webkit).

        * QueueStatusServer/config/queues.py:
        * QueueStatusServer/model/queues.py:
        (Queue.short_name):
        (Queue.display_name):
        * QueueStatusServer/model/queues_unittest.py:
        (QueueTest.test_short_name):
        (QueueTest.test_display_name):
        (QueueTest.test_name_with_underscores):

2013-04-05  Geoffrey Garen  <ggaren@apple.com>

        Fixed run-bindings-tests by removing V8
        https://bugs.webkit.org/show_bug.cgi?id=114053

        Reviewed by Benjamin Poulain.

        * Scripts/run-bindings-tests:
        (main):

2013-04-05  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix.

        * QueueStatusServer/model/queues.py:
        (Queue.short_name):
        (Queue.display_name):

2013-04-05  Ryosuke Niwa  <rniwa@webkit.org>

        Remove Chromium EWS bots from the queue status server
        https://bugs.webkit.org/show_bug.cgi?id=113988

        Reviewed by Benjamin Poulain.

        Removed Chromium EWS bots.

        * QueueStatusServer/config/queues.py:
        * QueueStatusServer/model/queues.py:
        (Queue.short_name):
        (Queue.display_name):
        * QueueStatusServer/model/queues_unittest.py:
        (QueueTest.test_short_name):
        (QueueTest.test_display_name):
        (QueueTest.test_name_with_underscores):

2013-04-05  Rijubrata Bhaumik  <rijubrata.bhaumik@intel.com>

        [EFL] Enable indexed database
        https://bugs.webkit.org/show_bug.cgi?id=107248

        Reviewed by Alexis Menard.

        * Scripts/webkitperl/FeatureList.pm:

2013-04-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Remove vestiges of Chromium bits from watchlists.
        https://bugs.webkit.org/show_bug.cgi?id=114047

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/config/watchlist: Removed vestiges.

2013-04-05  Chris Fleizach  <cfleizach@apple.com>

        Add James Craig to the contributors list.

        * Scripts/webkitpy/common/config/committers.py:

2013-04-04  Kent Tamura  <tkent@chromium.org>

        Remove ChromiumPublicApi pattern, and cc/message rules for it.

        * Scripts/webkitpy/common/config/watchlist:

2013-04-04  Benjamin Poulain  <bpoulain@apple.com>

        Temporarily disable the Python unittests broken by the commit queue not running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=113997

        Reviewed by Ryosuke Niwa.

        Disable the tests until Ryosuke gets the time and hardware to have
        a testing commit-queue.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        (CommitQueueTaskTest):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (CommitQueueTest):

2013-04-04  Ryosuke Niwa  <rniwa@webkit.org>

        Remove Chromium builders from build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=113990

        Reviewed by Benjamin Poulain.

        Land the part to disable triggering of Chromium builders first so that we may start
        deleting more Chromium code that breaks the update step.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2013-04-04  Benjamin Poulain  <bpoulain@apple.com>

        Remove Chromium's DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=113989

        Reviewed by Kent Tamura.

        On second thought, let's not go to Camelot. It is a silly place.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):

2013-04-04  Geoffrey Garen  <ggaren@apple.com>

        Nixed the defunct chromium folder from DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=113993

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/chromium: Removed.
        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp: Removed.
        * DumpRenderTree/chromium/DRTDevToolsAgent.h: Removed.
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp: Removed.
        * DumpRenderTree/chromium/DRTDevToolsClient.h: Removed.
        * DumpRenderTree/chromium/DumpRenderTree.cpp: Removed.
        * DumpRenderTree/chromium/ImageDiff.cpp: Removed.
        * DumpRenderTree/chromium/LayoutTestHelper.mm: Removed.
        * DumpRenderTree/chromium/LayoutTestHelperWin.cpp: Removed.
        * DumpRenderTree/chromium/MockPlatform.cpp: Removed.
        * DumpRenderTree/chromium/MockPlatform.h: Removed.
        * DumpRenderTree/chromium/MockWebPrerenderingSupport.cpp: Removed.
        * DumpRenderTree/chromium/MockWebPrerenderingSupport.h: Removed.
        * DumpRenderTree/chromium/Task.cpp: Removed.
        * DumpRenderTree/chromium/Task.h: Removed.
        * DumpRenderTree/chromium/TestEventPrinter.cpp: Removed.
        * DumpRenderTree/chromium/TestEventPrinter.h: Removed.
        * DumpRenderTree/chromium/TestNavigationController.cpp: Removed.
        * DumpRenderTree/chromium/TestNavigationController.h: Removed.
        * DumpRenderTree/chromium/TestNetscapePlugIn: Removed.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders: Removed.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit: Removed.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npapi.h: Removed.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npfunctions.h: Removed.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npruntime.h: Removed.
        * DumpRenderTree/chromium/TestRunner: Removed.
        * DumpRenderTree/chromium/TestRunner/public: Removed.
        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h: Removed.
        * DumpRenderTree/chromium/TestRunner/public/WebTask.h: Removed.
        * DumpRenderTree/chromium/TestRunner/public/WebTestCommon.h: Removed.
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h: Removed.
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h: Removed.
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h: Removed.
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src: Removed.
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/EventSender.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/GamepadController.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/GamepadController.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockConstraints.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockConstraints.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockWebMediaStreamCenter.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockWebMediaStreamCenter.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCDTMFSenderHandler.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCDTMFSenderHandler.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCDataChannelHandler.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCDataChannelHandler.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCPeerConnectionHandler.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCPeerConnectionHandler.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockWebSpeechInputController.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockWebSpeechInputController.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockWebSpeechRecognizer.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/MockWebSpeechRecognizer.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/NotificationPresenter.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/NotificationPresenter.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/TestCommon.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/TestCommon.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/TextInputController.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/WebPermissions.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/WebPermissions.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/WebTask.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeControlWin.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeControlWin.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.mm: Removed.
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/config.h: Removed.
        * DumpRenderTree/chromium/TestShell.cpp: Removed.
        * DumpRenderTree/chromium/TestShell.h: Removed.
        * DumpRenderTree/chromium/TestShellAndroid.cpp: Removed.
        * DumpRenderTree/chromium/TestShellMac.mm: Removed.
        * DumpRenderTree/chromium/TestShellPosix.cpp: Removed.
        * DumpRenderTree/chromium/TestShellStub.cpp: Removed.
        * DumpRenderTree/chromium/TestShellWin.cpp: Removed.
        * DumpRenderTree/chromium/TestShellX11.cpp: Removed.
        * DumpRenderTree/chromium/WebViewHost.cpp: Removed.
        * DumpRenderTree/chromium/WebViewHost.h: Removed.
        * DumpRenderTree/chromium/android_fallback_fonts.xml: Removed.
        * DumpRenderTree/chromium/android_main_fonts.xml: Removed.
        * DumpRenderTree/chromium/config.h: Removed.
        * DumpRenderTree/chromium/fonts.conf: Removed.

2013-04-04  Ryosuke Niwa  <rniwa@webkit.org>

        Remove the rebaseline queue server since nobody except maybe one person from Google uses it.

        Rubber stamped by Benjamin Poulain.

        * RebaselineQueueServer: Removed.
        * RebaselineQueueServer/app.yaml: Removed.
        * RebaselineQueueServer/handlers: Removed.
        * RebaselineQueueServer/handlers/__init__.py: Removed.
        * RebaselineQueueServer/handlers/builderqueue.py: Removed.
        * RebaselineQueueServer/handlers/pages.py: Removed.
        * RebaselineQueueServer/index.yaml: Removed.
        * RebaselineQueueServer/main.py: Removed.
        * RebaselineQueueServer/model: Removed.
        * RebaselineQueueServer/model/__init__.py: Removed.
        * RebaselineQueueServer/model/queueentry.py: Removed.
        * RebaselineQueueServer/static: Removed.
        * RebaselineQueueServer/static/builder-frame-empty.html: Removed.
        * RebaselineQueueServer/static/styles.css: Removed.
        * RebaselineQueueServer/templates: Removed.
        * RebaselineQueueServer/templates/builder-picker.html: Removed.
        * RebaselineQueueServer/templates/builder-queue-edit.html: Removed.
        * RebaselineQueueServer/templates/builder-queue-list.html: Removed.
        * RebaselineQueueServer/templates/home.html: Removed.

2013-04-04  Ryosuke Niwa  <rniwa@webkit.org>

        Fix setup-commit-queue and temporarily disable testing on commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=113979

        Reviewed by Benjamin Poulain.

        Use commit-queue@webkit.org instead of webkit.bot.review@gmail.com in commit-queue,
        and temporarily disable tests in commit-queue as we don't have enough resources at the moment.

        * EWSTools/setup-commit-queue.sh:
        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        (CommitQueueTask.run):

2013-04-04  Dirk Pranke  <dpranke@chromium.org>

        temporarily make flakiness dashboard work again webkit.org bots
        https://bugs.webkit.org/show_bug.cgi?id=113972

        Reviewed by Ojan Vafai.

        This patch disables the chromium.org layout test bots TestExpectations
        parsing temporarily until we can work out the right way to split into
        two instances for webkit.org and chromium.org and figure out which
        code to delete where :).

        * TestResultServer/static-dashboards/flakiness_dashboard.js:

2013-04-04  Ryosuke Niwa  <rniwa@webkit.org>

        Fix webkitpy tests after r147678.

        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (CommitQueueTest.test_commit_queue):
        (test_manual_reject_during_processing):

2013-04-04  Ryosuke Niwa  <rniwa@webkit.org>

        The commit queue should use Mac MountainLion port
        https://bugs.webkit.org/show_bug.cgi?id=113971

        Reviewed by Lucas Forschler.

        * EWSTools/setup-commit-queue.sh: Copied from Tools/EWSTools/GoogleComputeEngine/build-commit-queue.sh.
        * Scripts/webkitpy/tool/commands/queues.py:
        (CommitQueue):

2013-04-04  Dirk Pranke  <dpranke@chromium.org>

        turn off running tests on chromium linux EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=113959

        Reviewed by Geoffrey Garen.

        Now that the Chromium port is no longer being maintained
        there's little point in running the tests. Soon we should
        just shut this bot off altogether.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (ChromiumLinuxEWS):

2013-04-04  Andrew Scherkus  <scherkus@chromium.org>

        Unreviewed. Removing feature-media-reviews@chromium.org from Media watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2013-04-04  Pierre Rossi  <pierre.rossi@gmail.com>

        Indentation fix to get webkit-patch working again after r147625

        Unreviewed.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (MacEWS):
        (MacWK2EWS):

2013-04-04  Lucas Forschler  <lforschler@apple.com>

        Turn tests back on for Mac WK1/WK2 EWS.
        
        Unreviewed.
        
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (MacEWS):
        (MacWK2EWS):

2013-04-04  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK][WK2] MiniBrowser custom URI scheme support
        https://bugs.webkit.org/show_bug.cgi?id=112419

        Reviewed by Carlos Garcia Campos.

        Add support for about URIs in MiniBrowser. An example about page is show
        with URI "about:minibrowser", the rest of the cases it will show a
        proper message explaining that the about page didn't exist.

        Internally it uses "minibrowser-about" prefix instead of "about", but
        from the user point of view it works with "about" prefix.

        * MiniBrowser/gtk/BrowserWindow.c: Add miniBrowserAboutScheme constant.
        (getInternalURI): Method to convert URIs from "about" prefix to
        "minibrowser-about".
        (getExternalURI): Opposite method.
        (webViewURIChanged): Use "about" prefix to show the URI to users.
        (webViewEnterFullScreen): Ditto.
        (browser_window_load_uri): Use "minibrowser-about" prefix internally.
        * MiniBrowser/gtk/main.c: Add miniBrowserAboutScheme constant.
        (aboutURISchemeRequestCallback): Callback to manage about calls.
        (main): Register the URI scheme to manage about URIs.

2013-04-03  Roger Fong  <roger_fong@apple.com>

        Re-enable WinEWS tests.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-04-03  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][Jhbuild] Move ATK to the main moduleset, bump ATK, at-spi2-(atk|core) versions to 2.8.0
        https://bugs.webkit.org/show_bug.cgi?id=113883

        Reviewed by Martin Robinson.

        * gtk/jhbuild-optional.modules: Remove the ATK entry as it is now placed in jhbuild.modules.
        * gtk/jhbuild.modules: Add ATK to the list of webkitgtk-testing-dependencies metamodule, using the 2.8.0 version.
        The at-spi2-core and at-spi2-atk versions are also increased to 2.8.0.

2013-04-03  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Include Pango in jhbuild-optional.modules
        https://bugs.webkit.org/show_bug.cgi?id=113878

        Reviewed by Martin Robinson.

        Since r147547 Pango 1.32.0 is required. Including the module in the
        JHBuild optional moduleset.

        * gtk/jhbuild-optional.modules: Add Pango module.

2013-04-03  Zeno Albisser  <zeno@webkit.org>

        [Qt] Add getter for JSC TestRunner to DumpRenderTreeQt.
        https://bugs.webkit.org/show_bug.cgi?id=113864

        Moving setDefersLoading from TestRunnerQt to TestRunner
        requires access to the non-Qt TestRunner.
        As long as we instantiate both TestRunner and TestRunnerQt,
        we need a separate getter for the non-Qt TestRunner instance.

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebPage::resetSettings):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (DumpRenderTree::jscTestRunner):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::setDefersLoading):
            Moving setDefersLoading from TestRunnerQt
            to TestRunner.
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunnerQt):

2013-04-03  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK][WK2] Unskip /webkit2/WebKitWebContext/uri-scheme
        https://bugs.webkit.org/show_bug.cgi?id=104779

        Reviewed by Carlos Garcia Campos.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip /webkit2/WebKitWebContext/uri-scheme as it is
        passing in current trunk.

2013-04-03  Pierre Rossi  <pierre.rossi@digia.com>

        Fix HAVE(QTTESTSUPPORT) logic

        build_qttestsupport has not been added to WEBKIT_CONFIG in detectFeatures,
        resulting in HAVE(QTTESTSUPPORT) never being true.
        Move that logic down in sanitizeFeatures.

        Rubber-stamped by Tor Arne Vestbø.

        * qmake/mkspecs/features/features.prf:

2013-04-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bump required versions of some dependencies
        https://bugs.webkit.org/show_bug.cgi?id=113282

        Reviewed by Martin Robinson.

        * gtk/jhbuild.modules: Update libsoup, glib, at-spi2 and gtk+ versions.

2013-04-03  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] gst-plugins-good fails to build with newer Linux(v4l2)
        https://bugs.webkit.org/show_bug.cgi?id=113809

        Reviewed by Philippe Normand.

        Newer Linux kernels have removed some deprecated macros from v4l2
        headers, causing gst-plugins-good's build to break. We don't need it
        right now, so just disable it.

        * gtk/jhbuild.modules: disable v4l2 usage in gst-plugins-good.

2013-03-28  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt] Switch ContextMenu implementation to CROSS_PLATFORM_CONTEXT_MENU
        https://bugs.webkit.org/show_bug.cgi?id=113535

        Reviewed by Simon Hausmann.

        Adding USE_CROSS_PLATFORM_CONTEXT_MENUS to WEBKIT_CONFIG.

        * qmake/mkspecs/features/features.prf:

2013-04-03  Zeno Albisser  <zeno@webkit.org>

        [Qt] Move logic of simple forwarding functions to TestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=113863

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::setTextDirection):
        (TestRunner::goBack):
        (TestRunner::evaluateScriptInIsolatedWorld):
        (TestRunner::addUserStyleSheet):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunnerQt):

2013-04-03  Tor Arne Vestbø  <tor.arne.vestbo@digia.com>

        [Qt] Disable media support using QuickTime if deployment target != SDK

        We link to a single libWebKitSystemInterface static lib, so unless the
        deployment target matches the SDK let's not pretend like we'll be able
        to run on anything lower than the SDK version.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/features.prf:

2013-04-02  James Craig  <james@cookiecrook.com>

        AXRoleDescripton for DL is "list"; should be "description list"
        https://bugs.webkit.org/show_bug.cgi?id=111665

        Reviewed by Chris Fleizach.

        Defining the role and description strings.

        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:

2013-04-02  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Disable running tests on Win EWS queue.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-04-02  Lucas Forschler  <lforschler@apple.com>

        Disable running tests on the MAC WK2 EWS queue.
        
        Unreviewed.
        
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (MacWK2EWS):

2013-04-02  Julie Parent  <jparent@chromium.org>

        Dashboard refactor: Move dashboard specific history related features to History.
        https://bugs.webkit.org/show_bug.cgi?id=113717

        Reviewed by Ojan Vafai.
        
        Each dashboard now creates its own History object, with a custom
        configuration. This changes from just overriding global functions
        to passing in callbacks for generatePage, handleValidHashParameter,
        and handleQueryParameterChange. Same with passing in defaultStateValues
        and DB_SPECIFIC_INVALIDATING_PARAMS, rather than overriding the global
        variables.
        
        All functions related to these features are now (mostly) private
        function on History. 
        
        Loader no longer needs a loadingComplete callback, since it can just
        initialize the history object itself.

        * TestResultServer/static-dashboards/aggregate_results.js:
        (handleValidHashParameter):
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (generatePage):
        (.switch.return):
        (handleQueryParameterChange):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (resetGlobals):
        * TestResultServer/static-dashboards/history.js:
        (.):
        * TestResultServer/static-dashboards/loader.js:
        (.):
        * TestResultServer/static-dashboards/loader_unittests.js:
        * TestResultServer/static-dashboards/timeline_explorer.js:
        (generatePage):
        (initCurrentBuilderTestResults):
        * TestResultServer/static-dashboards/treemap.js:
        (generatePage):
        (.switch.return):
        (handleQueryParameterChange):

2013-04-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r147401.
        http://trac.webkit.org/changeset/147401
        https://bugs.webkit.org/show_bug.cgi?id=113767

        The patch makes it extremely hard to set up the dependencies
        properly on the GTK builders (Requested by zdobersek on
        #webkit).

        * gtk/jhbuild.modules:

2013-04-02  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] Empty tooltip shown when hovering over popup menu items
        https://bugs.webkit.org/show_bug.cgi?id=113382

        Reviewed by Gyuyoung Kim.

        Do not show the empty tooltip box if the text is null.

        * MiniBrowser/efl/main.c:
        (popup_menu_populate):

2013-04-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bump required versions of some dependencies
        https://bugs.webkit.org/show_bug.cgi?id=113282

        Reviewed by Martin Robinson.

        * gtk/jhbuild.modules: Update libsoup, glib, at-spi2 and gtk+ versions.

2013-04-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r147319.
        http://trac.webkit.org/changeset/147319
        https://bugs.webkit.org/show_bug.cgi?id=113707

        The unit test is still failing on the buildbot (Requested by
        zdobersek on #webkit).

        * Scripts/run-gtk-tests:
        (TestRunner):

2013-04-01  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK][WK2] Unskip /webkit2/WebKitWebContext/uri-scheme
        https://bugs.webkit.org/show_bug.cgi?id=104779

        Reviewed by Carlos Garcia Campos.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip /webkit2/WebKitWebContext/uri-scheme as it is
        passing in current trunk.

2013-03-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r147289.
        http://trac.webkit.org/changeset/147289
        https://bugs.webkit.org/show_bug.cgi?id=113678

        broke Win7 (dbg) build (Requested by shinyak|gardener on
        #webkit).

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/public/WebUserMediaClientMock.h.
        (WebTestRunner):
        (WebUserMediaClientMock):
        (WebTestRunner::WebUserMediaClientMock::~WebUserMediaClientMock):
        (WebTestRunner::WebUserMediaClientMock::taskList):
        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_function_definition):

2013-03-31  Adam Barth  <abarth@webkit.org>

        configure-svn-config.sh fails
        https://codereview.chromium.org/13392007/

        Reviewed by Eric Seidel.

        This script was trying to use "svn checkout" to dowload a file from
        svn.webkit.org, but "svn checkout" only works with directories.
        Instead, we should use "svn export".

        * EWSTools/configure-svn-config.sh:

2013-03-31  Wei Jia  <wjia@chromium.org>

        Allow WebUserMediaClientMock to be used by client
        https://bugs.webkit.org/show_bug.cgi?id=113633

        Reviewed by Adam Barth.

        Export WebUserMediaClientMock.
        Allow files in chromium/TestRunner/public to have WEBKIT_EXPORT.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebUserMediaClientMock.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.h.
        (WebUserMediaClientMock):
        * DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.h: Removed.
        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_function_definition):

2013-03-29  Alexey Proskuryakov  <ap@apple.com>

        Expose FeatureObserver data to WebKit clients
        https://bugs.webkit.org/show_bug.cgi?id=113613

        Reviewed by Sam Weinig.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Added an initializer for featuresUsedInPage.

2013-03-29  Greg Hughes  <ghughes@apple.com>

        Allow multiple searchKeys to be passed to AXUIElementCopyParameterizedAttributeValue
        https://bugs.webkit.org/show_bug.cgi?id=112276

        Reviewed by Chris Fleizach.

        Added support to test accessibility search predicates with multiple keys.  

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (uiElementForSearchPredicateCallback):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * DumpRenderTree/blackberry/AccessibilityUIElementBlackBerry.cpp:
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):

2013-03-29  Ryosuke Niwa  <rniwa@webkit.org>

        Fix a typo in r147147 to fix Mac EWS.

        * Scripts/webkitpy/tool/commands/queues.py:
        (PatchProcessingQueue._new_port_name_from_old):

2013-03-28  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Build break with latest EFL libraries after r146265
        https://bugs.webkit.org/show_bug.cgi?id=113558

        Unreviewed build fix.

        * TestWebKitAPI/PlatformWebView.h:
        * WebKitTestRunner/PlatformWebView.h:

2013-03-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed. Fix build break when running --update-efl in WebKit EFL.

        * efl/jhbuild.modules: Remove to run autogen.sh in libgcrypt autogen. It causes configuration fail
        in libgcrypt build.

2013-03-28  Lucas Forschler  <lforschler@apple.com>

        Disable running tests on Mac EWS until we can find a way to keep the queue at a reasonable length.

        Unreviewed.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (MacEWS):

2013-03-28  Ryosuke Niwa  <rniwa@webkit.org>

        Use the right OS name on Mac EWS instead of mac-future.

        Rubber-stamped by Dirk Pranke.

        * Scripts/webkitpy/tool/commands/queues.py:
        (PatchProcessingQueue._new_port_name_from_old):
        (PatchProcessingQueue.begin_work_queue):
        (PatchProcessingQueue._upload_results_archive_for_patch):

2013-03-28  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Build GTK-specific, non-layer-violating source code into WebCore-independent libPlatformGtk.la
        https://bugs.webkit.org/show_bug.cgi?id=112546

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Reference the platformgtk_cppflags amongst the libWebCoreInternals' CPPFLAGS. GtkVersioning.c file has
        moved back to Source/WebCore/platform. Fix an indentation issue as well.

2013-03-28  Ming Xie  <mxie@blackberry.com>

        [BlackBerry] Committer Email Updates
        https://bugs.webkit.org/show_bug.cgi?id=113435

        Reviewed by Rob Buis.

        Add the @blackberry.com email address for all our BlackBerry
        WebKit committers. This is the first step for our email address
        migration.

        * Scripts/webkitpy/common/config/committers.py:

2013-03-28  Philippe Normand  <pnormand@igalia.com>

        [jhbuild] GStreamer system plugins conflict with the ones built in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=113508

        Reviewed by Martin Robinson.

        Prevent the GStreamer plugin scanner to load system-wide
        plugins. Only the ones built in JHBuild should be loaded and used
        at runtime.

        * efl/jhbuildrc:
        * gtk/jhbuildrc:

2013-03-27  Philippe Normand  <pnormand@igalia.com>

        [GTK] run-launcher --gtk -2 fails on a WK2-only build
        https://bugs.webkit.org/show_bug.cgi?id=113386

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitdirs.pm:
        (builtDylibPathForName): The WebKit2GTK .so name change from 1.0
        version to 3.0. Reflect this change so the builtDylibPathForName
        function doesn't fail to report the library as found.

2013-03-28  Jaehun Lim  <ljaehun.lim@samsung.com>

        [CMAKE] Build fix after r147052. Add WebKit2/Shared/Plugins to include path
        https://bugs.webkit.org/show_bug.cgi?id=113484

        Unreviewed build fix.

        Add "WebKit2/Shared/Plugins" to include path for TestWebKitAPI, WebKitTestRunner.

        * TestWebKitAPI/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:

2013-03-27  Mario Sanchez Prada  <mario.prada@samsung.com>

        Revision for the internal jhbuild is too old
        https://bugs.webkit.org/show_bug.cgi?id=113324

        Reviewed by Martin Robinson.

        Update the minimum required version to a point where jhbuild won't
        fail installing packages when trying to remove a symlink to a directory.

        * jhbuild/jhbuild-wrapper: Updated revision.

2013-03-27  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK][jhbuild] gst-plugins-good mixes system libsoup-gnome with custom libsoup
        https://bugs.webkit.org/show_bug.cgi?id=113203

        Reviewed by Philippe Normand.

        We build our libsoup without GNOME support. gst-plugins-good does separate
        pkg-config checks for libsoup-gnome and libsoup, causing the build to use
        libsoup-gnome from the system and soup from the jhbuild prefix. This may lead to
        build failures as the headers of those diverge. We do not use souphttpsrc, so
        disable it when building gst-plugins-good.

        * gtk/jhbuild.modules: disable soup support in gst-plugins-good.

2013-03-27  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r146852. Please another reference to the Lion leaks builder.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2013-03-27  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][webkitpy] A huge list of warnings about missing bugs in expectations when running NRWT with WKTR
        https://bugs.webkit.org/show_bug.cgi?id=113421

        Reviewed by Dirk Pranke.

        When running the layout tests with WKTR through NRWT, the GTK port also uses the generic WK2 TestExpectations file.
        This file contains a large amount of expectations that are not listing a specific bug modifier, so this produces an
        equally large amount of warnings due to the GTK port preferring for every expectation to have the bug modifier present
        in the GTK-specific TestExpectations files.

        To avoid this only enable the warnings only when not using WKTR.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.warn_if_bug_missing_in_test_expectations):

2013-03-27  Antti Koivisto  <antti@apple.com>

        Fix Zalan's email.

        * Scripts/webkitpy/common/config/committers.py:

2013-03-27  Csaba Osztrogonác  <ossy@webkit.org>

        master.cfg cleanup
        https://bugs.webkit.org/show_bug.cgi?id=113195

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:

2013-03-27  Csaba Osztrogonác  <ossy@webkit.org>

        master.cfg fine-tuning for Qt Mountain Lion Release bot
        https://bugs.webkit.org/show_bug.cgi?id=113191

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
          - Rename the slave due to its location change.
          - Update the platform of the slave.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunQtAPITests): Enable running WK2 API tests on Qt.
        (RunQtAPITests.start):
        (RunWebKit2Tests.start): Force pixel tests on the Qt Mountain Lion Release builder.
        (BuildAndTestWebKit2Factory): Added. (Build WK1 and WK2 too, but run only WK2 tests.)

2013-03-27  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][jhbuild] Evas fails to build when Wayland is present on the system
        https://bugs.webkit.org/show_bug.cgi?id=113403

        Reviewed by Kenneth Rohde Christiansen.

        As of Evas 1.7.5, when Wayland is detected on the system, support for
        both Wayland SHM and Wayland EGL is automatically enabled in autoconf.
        The code, however, seems to depend on a few other flags which must be
        explicitly enabled.

        If those additional GL-related options are passed, we end up
        having issues on the WebKit side, so disable Wayland support for
        now.

        * efl/jhbuild.modules:

2013-03-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r146864.
        http://trac.webkit.org/changeset/146864
        https://bugs.webkit.org/show_bug.cgi?id=113391

        causes crashes on Wk2 EFL release bot (Requested by drott on
        #webkit).

        * Scripts/webkitperl/FeatureList.pm:

2013-03-27  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [jhbuild] Correctly specify an alternate number of make jobs.
        https://bugs.webkit.org/show_bug.cgi?id=113396

        Reviewed by Philippe Normand.

        So far, we were using the `MAKEFLAGS' environment variable to pass the
        number of compilation jobs we wanted to jhbuild. jhbuild itself, on the
        other hand, prefers to use the `jobs' variable from jhbuildrc for that.

        We now behave more closely to the rest of the WebKit tools by first
        checking the `NUMBER_OF_PROCESSORS' environment variable and, if it is
        not set, just letting jhbuild itself figure out how many jobs to use.

        * efl/jhbuildrc:
        * gtk/jhbuildrc:

2013-03-27  Zeno Albisser  <zeno@webkit.org>

        [Qt] Remove Qt specific WorkQueueItem definitions.
        https://bugs.webkit.org/show_bug.cgi?id=112891

        This patch is preparation work for removing
        WorkQueue related code from TestRunnerQt and
        replacing it with generic TestRunner code.

        Reviewed by Benjamin Poulain.

        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunnerQt::queueBackNavigation):
        (TestRunnerQt::queueForwardNavigation):
        (TestRunnerQt::queueLoadHTMLString):
        (TestRunnerQt::queueReload):
        (TestRunnerQt::queueLoadingScript):
        (TestRunnerQt::queueNonLoadingScript):
        (TestRunner::queueLoad):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunnerQt):
        * DumpRenderTree/qt/WorkQueueItemQt.cpp:
        (LoadItem::invoke):
        (LoadHTMLStringItem::invoke):
        (LoadAlternateHTMLStringItem::invoke):
        (ReloadItem::invoke):
        (ScriptItem::invoke):
        (BackForwardItem::invoke):
        * DumpRenderTree/qt/WorkQueueItemQt.h:
        (LoadAlternateHTMLStringItem::LoadAlternateHTMLStringItem):
        (LoadAlternateHTMLStringItem):

2013-03-26  Julie Parent  <jparent@chromium.org>

        Flakiness dashboard: simplify logic around which tests to show.
        https://bugs.webkit.org/show_bug.cgi?id=113250

        Reviewed by Ojan Vafai.
        
        The different filters for showing results are only used for layout
        tests, otherwise, we show everything.
        
        Change the defaults to false (what layout tests used), and only
        look at the values when viewing layout tests.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (htmlForTestsWithExpectationsButNoFailures):
        (shouldHideTest):

2013-03-26  Isaac Levy  <ilevy@google.com>

        Update bots on test-results.appspot
        https://bugs.webkit.org/show_bug.cgi?id=113333

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/builders.jsonp:

2013-03-26  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK gardening.

        * Scripts/run-gtk-tests:
        (TestRunner): A follow-up to 146859, skipping the complete WebKit2APITests/TestInspector unit test.

2013-03-26  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Enable release/debug/2/webkit2 options for run-qtwebkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=113287

        Reviewed by Jocelyn Turcotte.

        * Scripts/run-qtwebkit-tests:
        (Options.__init__):

2013-03-26  Rijubrata Bhaumik  <rijubrata.bhaumik@intel.com>

        [EFL] Enable IndexedDB by default
        https://bugs.webkit.org/show_bug.cgi?id=107248

        Reviewed by Laszlo Gombos.

        * Scripts/webkitperl/FeatureList.pm:
        Enable IndexedDB by default on EFL.

2013-03-26  Alan Cutter  <alancutter@chromium.org>

        Sheriffbot should explain rollout failures in a human readable form.
        https://bugs.webkit.org/show_bug.cgi?id=107092

        Reviewed by Ryosuke Niwa.

        Improved sheriffbot's error reporting when a rollout command fails to reverse diff files (the most common failure).

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Rollout._check_diff_failure):
        (Rollout.execute):
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_rollout):

2013-03-26  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK gardening.

        * Scripts/run-gtk-tests:
        (TestRunner): Skipping a failing unit test after r146518.

2013-03-25  Ryosuke Niwa  <rniwa@webkit.org>

        Remove Lion leaks builder
        https://bugs.webkit.org/show_bug.cgi?id=113252

        Reviewed by Andreas Kling.

        Removed.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2013-03-25  Kent Tamura  <tkent@chromium.org>

        Rename ENABLE_INPUT_TYPE_DATETIME
        https://bugs.webkit.org/show_bug.cgi?id=113254

        Reviewed by Kentaro Hara.

        Rename ENABLE_INPUT_TYPE_DATETIME to ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE.
        Actually I'd like to remove the code, but we shouldn't remove it yet
        because we shipped products with it on some platforms.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2013-03-25  Ryosuke Niwa  <rniwa@webkit.org>

        Remove one more line that was intended to be removed in r146657.

        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results):

2013-03-25  Roger Fong  <roger_fong@apple.com>

        No longer run bindings tests on WinEWS bots which are causing hangs on the bots.
        Re-enable WinEWS tests.

        * Scripts/webkitpy/common/config/ports.py:
        (WinPort.run_bindings_tests_command):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-03-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r146793.
        http://trac.webkit.org/changeset/146793
        https://bugs.webkit.org/show_bug.cgi?id=113248

        Fix did not work (Requested by rfong on #webkit).

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-03-25  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r146657): Test failures reported incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=113223

        Reviewed by Dirk Pranke.

        The bug was caused by BuildBotPrinter not taking the new behavior into account.

        Fixed the bug by exposing enabled_pixel_tests_in_retry flag via ResultDetails object and have BuildBotPrinter
        treat ['TEXT', 'IMAGE+TEXT'] as a regular failure when the flag is set true.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):

        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (RunDetails.__init__):
        (summarize_results): Remove the line I intended to remove in r146657.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (logging_run): Return details instead of the exit code.
        (run_and_capture): Ditto.

        (RunTest.test_full_results_html):
        (RunTest.test_hung_thread):
        (RunTest.test_no_tests_found):
        (RunTest.test_no_tests_found_2):
        (RunTest.test_repeat_each_iterations_num_tests):
        (RunTest.test_run_singly_actually_runs_tests):
        (RunTest.test_test_list):
        (RunTest.test_missing_and_unexpected_results):
        (RunTest.test_pixel_test_directories):
        (RunTest.test_missing_and_unexpected_results_with_custom_exit_code):
        (RunTest.test_crash_with_stderr):
        (RunTest.test_no_image_failure_with_image_diff):
        (RunTest.test_crash_log):
        (RunTest.test_exit_after_n_failures_upload):
        (RunTest.test_results_directory_absolute):
        (RunTest.test_results_directory_relative):
        (RunTest.test_retrying_and_flaky_tests):
        (RunTest.test_retrying_force_pixel_tests): Added a test case to ensure enabled_pixel_tests_in_retry is set.
        (RunTest.test_retrying_uses_retries_directory):
        (RunTest.test_reftest_should_not_use_naming_convention_if_not_listed_in_reftestlist):
        (RunTest.test_output_diffs):
        (EndToEndTest.test_reftest_with_two_notrefs):
        (RebaselineTest.test_reset_results):
        (RebaselineTest.test_missing_results):
        (RebaselineTest.test_new_baseline):

        * Scripts/webkitpy/layout_tests/views/buildbot_results.py:
        (BuildBotPrinter.print_results):
        (BuildBotPrinter.print_unexpected_results):
        (BuildBotPrinter.print_unexpected_results.add_result): Don't treat ['TEXT', 'IMAGE+TEXT'] as flaky
        when we forced pixel tests in retry (i.e. pixel test was initially disabled).

2013-03-25  Julie Parent  <jparent@chromium.org>

        Dashboard refactor: Move cross dashboard history related code into history.js.
        https://bugs.webkit.org/show_bug.cgi?id=113104

        Reviewed by Ojan Vafai.

        All functions relating to cross dashboard behavior move from being
        globals to methods on the history.History object. Names stay the same,
        except many are made private, ones that should have been constants now
        are, and the long standing TODO to change "currentState" to 
        dashboardSpecificState is done.
        
        We now create a global history object in dashboard_base, as an 
        intermediate measure.  Once the dashboard specific code is
        added to history, each DB will need to create its own, and this
        global will be eliminated.
        
        * TestResultServer/static-dashboards/aggregate_results.js:
        (handleValidHashParameter):
        (htmlForBuilder):
        (rawValuesHTML):
        * TestResultServer/static-dashboards/dashboard_base.js:
        (parseDashboardSpecificParameters):
        (defaultValue):
        (currentBuilderGroupCategory):
        (currentBuilderGroupName):
        (handleLocationChange):
        (expectationsMap):
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (generatePage):
        (.switch.return):
        (platformAndBuildType):
        (individualTests):
        (substringList):
        (processMissingAndExtraExpectations):
        (pathToFailureLog):
        (showPopupForBuild):
        (htmlForTestsWithExpectationsButNoFailures):
        (shouldHideTest):
        (isCrossBuilderView):
        (tableHeaders):
        (htmlForSingleTestRow):
        (htmlForTableColumnHeader):
        (generatePageForExpectationsUpdate):
        (handleUpdate):
        (nextUpdate):
        (setUpdateIndex):
        (htmlForIndividualTestOnAllBuildersWithResultsLinks):
        (.appendExpectationsItem):
        (loadExpectations):
        (.dummyNode.onload):
        (loadExpectationsLayoutTests):
        (appendExpectations):
        (htmlForNavBar):
        (checkBoxToToggleState):
        (linkHTMLToToggleState):
        (generatePageForBuilder):
        (isInvalidKeyForCrossBuilderView):
        (handleQueryParameterChange):
        (showLegend):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (resetGlobals):
        (test):
        * TestResultServer/static-dashboards/history.js:
        (.):
        * TestResultServer/static-dashboards/history_unittests.js:
        * TestResultServer/static-dashboards/loader.js:
        (.):
        * TestResultServer/static-dashboards/loader_unittests.js:
        * TestResultServer/static-dashboards/timeline_explorer.js:
        (generatePage):
        (initCurrentBuilderTestResults):
        (selectBuild):
        (showResultsDelta):
        * TestResultServer/static-dashboards/treemap.js:
        (generatePage):
        (.switch.return):
        (handleFocus):
        * TestResultServer/static-dashboards/ui.js:

2013-03-25  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Enable WinEWS tests again.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-03-25  Dominik Röttsches  <dominik.rottsches@intel.com>

        [HarfBuzz] ICU detection fix in HarfBuzz obsoletes our workaround
        https://bugs.webkit.org/show_bug.cgi?id=112166

        HarfBuzz 0.9.14 merged my patch for icu detection without
        pkg-config files, as needed by for example Ubuntu 12.04.
        This obsoletes our local workaround. Removed it for GTK and EFL.

        Reviewed by Martin Robinson.

        * efl/jhbuild.modules: Patch reference removed, version bumped to 0.9.14.
        * efl/patches/harfbuzz-icu-detection-fix.patch: Removed.
        * gtk/jhbuild.modules: Patch reference removed, version bumped to 0.9.14.
        * gtk/patches/harfbuzz-icu-detection-fix.patch: Removed.

2013-03-22  Kiran Muppala  <cmuppala@apple.com>

        Unreviewed.  Move self from contributor to committer list.

        * Scripts/webkitpy/common/config/committers.py:

2013-03-22  Ryosuke Niwa  <rniwa@webkit.org>

        EWS should use a human readable port name when uploading layout test archives
        https://bugs.webkit.org/show_bug.cgi?id=113099

        Reviewed by Dirk Pranke.

        Use new port's object's name() method to report human readable port names.
        This will also help us resolving the bug to apply layout test results posted by EWS.

        * Scripts/webkitpy/tool/bot/botinfo.py:
        (BotInfo.__init__): Take port's name.
        (BotInfo.summary_text):

        * Scripts/webkitpy/tool/bot/botinfo_unittest.py:
        (BotInfoTest.test_summary_text):

        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        (FlakyTestReporter.__init__): Preserve the old behavior since we don't have a real port object here.

        * Scripts/webkitpy/tool/commands/queues.py:
        (PatchProcessingQueue.__init__): Initialize self._port.
        (PatchProcessingQueue._upload_results_archive_for_patch): Intansitate a real port object if needed,
        and use that for the attachment filename and the comment posted.

        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (PatchProcessingQueueTest.test_upload_results_archive_for_patch): Port name is updated to be
        "mac-snowleopard" as expected for TestPort.

2013-03-22  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Turn off EWS test on Win again.
        The battle continues.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-03-22  Ryosuke Niwa  <rniwa@webkit.org>

        NRWT: Enable pixel tests when retrying tests
        https://bugs.webkit.org/show_bug.cgi?id=112898

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Call _force_pixel_tests_if_needed before retrying tests and set pixel_tests False
        if we've forced pixel tests in the retry.
        (Manager._run_tests):
        (Manager._clean_up_run): Fixed the capitalizations.
        (Manager._force_pixel_tests_if_needed): Added.

        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (_interpret_test_failures): Now that this function maybe called multiple times, only set
        'image_diff_percent' if it doesn't already exist.

        (summarize_results): When the first attempt resulted in a text failure and the second attempt
        resulted in image and text failures and we've forced to run pixel tests in the retry run,
        treat this as a regular regression instead of a flakiness.

        Also update test_dict with retry_result so that image_diff_percent maybe filled in if retry
        run had image diffs.

        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py:
        (summarized_results):

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (parse_full_results): Moved out of EndToEndTest to be used in test_retrying_force_pixel_tests.
        Also removed some dead code.

        (RunTest.test_retrying_force_pixel_tests): Added. Assert that we generate and only generate
        pixel results in retries when pixel tests is turned off. Also assert that image_diff_percent
        is set and pixel_tests_enabled is set to false.
        (EndToEndTest.test_reftest_with_two_notrefs):

2013-03-22  Tim Horton  <timothy_horton@apple.com>

        Make it possible to run layout tests on Retina MBP
        https://bugs.webkit.org/show_bug.cgi?id=93673

        Reviewed by Ryosuke Niwa.

        Use NSWindow SPI and override -backingScaleFactor so that WKTR and DRT
        windows on 2x machines still run at 1x.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        Reset the window resolution to 1x on creation.
        * DumpRenderTree/mac/DumpRenderTreeWindow.h: Add NSWindow details.
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow backingScaleFactor]): Override, always return 1.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (-[WebKitTestRunnerWindow backingScaleFactor]): Override, always return 1.
        (WTR::PlatformWebView::PlatformWebView):
        Add NSWindow details, reset the window resolution to 1x on creation.

2013-03-19  Ryosuke Niwa  <rniwa@webkit.org>

        Leak bots shouldn't build
        https://bugs.webkit.org/show_bug.cgi?id=112774

        Reviewed by Simon Fraser.

        Since leak bots use regular debug builds, there is no need to build on these bots.
        Simply downloading builds will dramatically improve the cycle time of these bots.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (TestLeaksFactory): Renamed from BuildAndTestLeaksFactory and changed to inherit from
        TestFactory instead of BuildAndTestFactory.

2013-03-22  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix the TestWebKitAPI build
        https://bugs.webkit.org/show_bug.cgi?id=113044

        Reviewed by Tor Arne Vestbø.

        The generate-forwarding-headers script would only be run
        after the targets in InjectedBundle.pri since the second
        addStrictSubdirOrderBetween call in
        Tools/TestWebKitAPI/TestWebKitAPI.pro would overwrite
        the derived_sources -> injected_bundle order in SUBDIRS.

        Fix it by only moving the dependent target at the end of
        SUBDIRS, don't touch its dependency.

        * qmake/mkspecs/features/functions.prf:

2013-03-22  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] View is not focused when fullscreen mode toggled
        https://bugs.webkit.org/show_bug.cgi?id=113009

        Reviewed by Laszlo Gombos.

        Set focus on view when fullscreen mode enabled/disabled
        by FullScreen API.

        * MiniBrowser/efl/main.c:
        (on_fullscreen_accept):
        (on_fullscreen_deny):

2013-03-21  Dirk Pranke  <dpranke@chromium.org>

        nrwt is no longer saving retry results in the retries/ subdirectory
        https://bugs.webkit.org/show_bug.cgi?id=112995

        Reviewed by Ojan Vafai.

        I think this has been broken a long time, unfortunately. This
        patch should fix that.

        In order to do so, I had to pass the directory to use from
        the Worker object through the SingleTestWriter to the
        TestResultWriter. While I was plumbing that through, I rationalized
        the order of the parameter arguments a bit ...

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (Worker._run_single_test):
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (run_single_test):
        (SingleTestRunner.__init__):
        (SingleTestRunner._run_compare_test):
        (SingleTestRunner._run_rebaseline):
        (SingleTestRunner._run_reftest):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer_unittest.py:
        (TestResultWriterTest.test_reftest_diff_image):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_retrying_uses_retries_directory):

2013-03-21  Filip Pizlo  <fpizlo@apple.com>

        JSC profiler should have an at-a-glance report of the success of DFG optimization
        https://bugs.webkit.org/show_bug.cgi?id=112988

        Reviewed by Geoffrey Garen.

        * Scripts/display-profiler-output:

2013-03-21  Dirk Pranke  <dpranke@chromium.org>

        [chromium] Linux ASAN WebKit canary is running out of memory
        https://bugs.webkit.org/show_bug.cgi?id=112978

        Reviewed by Tony Chang.

        Running the AddressSanitizer on a crash takes a lot of
        memory, so we should serialize access to it to avoid running
        out of memory on a machine.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/http_lock.py:
        (HttpLock.__init__):
        (HttpLock.wait_for_httpd_lock):

2013-03-21  Min Qin  <qinmin@chromium.org>

        Cleanup android media layout test code
        https://bugs.webkit.org/show_bug.cgi?id=112944

        Reviewed by Adam Barth.

        Chromium change: https://codereview.chromium.org/12892010/
        The current android layout tests are using WebmediaPlayerInProcessAndroid class.
        The code path has been largely diverged from that of the WebMediaPlayerImplAndroid.
        It is not worth the effort to keep the code path, and the layout tests will not reflect the actual behavior on the browser.
        Instead, we should switch to use content shell for layout tests.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):

2013-03-21  Dirk Pranke  <dpranke@chromium.org>

        [chromium] add missing project dependencies to DRT to fix Mac Valgrind
        https://bugs.webkit.org/show_bug.cgi?id=112953

        Reviewed by Tony Chang.

        When I created the DumpRenderTree_resources target in r144863 I
        forgot to declare the needed dependencies on the other resource
        targets. Due to a quirk of ordering, this appears to have been fine
        w/ ninja but not w/ Xcode (which is still being used on the chromium
        mac valgrind bots). Declaring the dependencies fixes the build
        failures.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2013-03-21  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Correct assert in Empty BitmapImage Test.
        https://bugs.webkit.org/show_bug.cgi?id=112934

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/win/BitmapImage.cpp:
        (TestWebKitAPI::TEST): Use proper RefPtr and adoptRef
        to avoid ref counting assertion when leaving test scope.

2013-03-21  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] generate-feature-defines-files is incompatible with Python3
        https://bugs.webkit.org/show_bug.cgi?id=112956

        Reviewed by Martin Robinson.

        Make the generate-feature-defines-files compatible with Python3 by calling the items()
        method on the dictionary objects when iterating through said dictionaries.

        * gtk/generate-feature-defines-files:
        (write_feature_defines_header):
        (write_flattened_feature_defines_file):

2013-03-20  Ryosuke Niwa  <rniwa@webkit.org>

        kill-old-processes spits out error messages on Mac
        https://bugs.webkit.org/show_bug.cgi?id=112878

        Reviewed by Jessie Berlin.

        Use grep -E instead of grep -P since grep on Mac doesn't seem to support the latter even though it's
        included in the list of options grep --help shows.

        Also use double-slash in escaping ++ in clang++ since the slashes needs to escape + inside the shell.

        * BuildSlaveSupport/kill-old-processes:
        (main):

2013-03-21  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] AccessibilityUIElement: add dummy implementations of scroll methods
        https://bugs.webkit.org/show_bug.cgi?id=112597

        Reviewed by Xan Lopez.

        These were introduced for the Chromium port in r105295. We need
        dummy implementations in order to compile the BlackBerry port.

        * DumpRenderTree/blackberry/AccessibilityUIElementBlackBerry.cpp:
        (AccessibilityUIElement::scrollToMakeVisible):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):

2013-03-21  Roger Fong  <roger_fong@apple.com>

        Re-enable WinEWS tests following r146376.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-03-21  Zoltan Horvath  <zoltan@webkit.org>

        Unreviewed. Add Bem Jones-Bey to the list of contributors.

        * Scripts/webkitpy/common/config/committers.py:

2013-03-21  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Missing atk in install-dependencies script
        https://bugs.webkit.org/show_bug.cgi?id=112272

        Reviewed by Gustavo Noronha Silva.

        * gtk/install-dependencies: Add missing atk dependency.

2013-03-21  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Missing backslash in install-dependencies script
        https://bugs.webkit.org/show_bug.cgi?id=112907

        Reviewed by Philippe Normand.

        * gtk/install-dependencies: Add missing backslash to dependencies
        list.

2013-03-20  Ryosuke Niwa  <rniwa@webkit.org>

        EWS bots have stopped uploading results to bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=101091

        Reviewed by Adam Barth.

        The bug was caused by LayoutTestResultsReader passing a relative file path to the archive zip
        to workspace.archive_zip. Because archive_zip uses the results directory as the working directory,
        this relative file path resoled to a file inside a non-existent directory for "zip".

        Fixed the bug by resolving both test results directory and zip archive paths in
        LayoutTestResultsReader.archive.

        Also made workspace.create_zip print the source_path so that we may debug these issues more easily
        in the future.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.splitext): Don't assume the entire file path is a file extension when there is no ".".

        * Scripts/webkitpy/common/system/workspace.py:
        (Workspace.create_zip): Log the source path when "zip" failed.

        * Scripts/webkitpy/common/system/workspace_mock.py:
        (MockWorkspace.create_zip): Record zip_path and source_path for testing.

        * Scripts/webkitpy/common/system/workspace_unittest.py:
        (WorkspaceTest.test_create_zip_exception): Test that.

        * Scripts/webkitpy/tool/bot/layouttestresultsreader.py:
        (LayoutTestResultsReader.archive): Resolve paths before passing them to workspace.create_zip.
        This is the actual bug fix.

        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        (test_archive_last_layout_test_results_with_relative_path): Added a test case.

2013-03-20  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move WebThemeEngine implementations to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=112751

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        (WebKit):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::themeEngine):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (WebKit):
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::themeEngine):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeControlWin.cpp: Renamed from Tools/DumpRenderTree/chromium/WebThemeControlDRTWin.cpp.
        (WebTestRunner::WebTestThemeControlWin::WebTestThemeControlWin):
        (WebTestRunner):
        (WebTestRunner::WebTestThemeControlWin::~WebTestThemeControlWin):
        (WebTestRunner::WebTestThemeControlWin::box):
        (WebTestRunner::WebTestThemeControlWin::line):
        (WebTestRunner::WebTestThemeControlWin::triangle):
        (WebTestRunner::WebTestThemeControlWin::roundRect):
        (WebTestRunner::WebTestThemeControlWin::oval):
        (WebTestRunner::WebTestThemeControlWin::circle):
        (WebTestRunner::WebTestThemeControlWin::nestedBoxes):
        (WebTestRunner::WebTestThemeControlWin::markState):
        (WebTestRunner::WebTestThemeControlWin::draw):
        (WebTestRunner::WebTestThemeControlWin::drawTextField):
        (WebTestRunner::WebTestThemeControlWin::drawProgressBar):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeControlWin.h: Renamed from Tools/DumpRenderTree/chromium/WebThemeControlDRTWin.h.
        (WebTestRunner):
        (WebTestThemeControlWin):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.h: Renamed from Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.h.
        (WebTestRunner):
        (WebTestThemeEngineMac):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.mm: Renamed from Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.mm.
        (+[FakeActiveWindow alwaysActiveWindow]):
        (+[FakeActiveWindow alwaysInactiveWindow]):
        (-[FakeActiveWindow initWithActiveControls:]):
        (-[FakeActiveWindow _hasActiveControls]):
        (WebTestRunner::WebTestThemeEngineMac::paintScrollbarThumb):
        (WebTestRunner):
        (WebTestRunner::WebTestThemeEngineMac::paintHIThemeScrollbarThumb):
        (WebTestRunner::WebTestThemeEngineMac::paintNSScrollerScrollbarThumb):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.cpp: Added.
        (WebTestRunner::WebTestThemeEngineWin::paintButton):
        (WebTestRunner):
        (WebTestRunner::WebTestThemeEngineWin::paintMenuList):
        (WebTestRunner::WebTestThemeEngineWin::paintScrollbarArrow):
        (WebTestRunner::WebTestThemeEngineWin::paintScrollbarThumb):
        (WebTestRunner::WebTestThemeEngineWin::paintScrollbarTrack):
        (WebTestRunner::WebTestThemeEngineWin::paintSpinButton):
        (WebTestRunner::WebTestThemeEngineWin::paintTextField):
        (WebTestRunner::WebTestThemeEngineWin::paintTrackbar):
        (WebTestRunner::WebTestThemeEngineWin::paintProgressBar):
        (WebTestRunner::WebTestThemeEngineWin::getSize):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.h: Renamed from Tools/DumpRenderTree/chromium/WebThemeEngineDRTWin.h.
        (WebTestRunner):
        (WebTestThemeEngineWin):
        (WebTestRunner::WebTestThemeEngineWin::WebTestThemeEngineWin):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        * DumpRenderTree/chromium/TestShell.h:
        (WebKit):
        * DumpRenderTree/chromium/TestShellMac.mm:
        (platformInit):
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (platformInit):
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp: Removed.

2013-03-20  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build fix for TestWebKitAPI under VS2010

        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommonWinCairo.props: Added.
        New property sheet that does not link against CoreFoundation and
        CFNetwork.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIDebugWinCairo.props:
        Use new TestWebKitAPICommonWinCairo property sheet.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIReleaseWinCairo.props:
        Ditto.

2013-03-20  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build fix for VS2010.

        Had to add WinCairo-specific property sheets to deal with some
        library and path differences with the main Apple port.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeDebugWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeReleaseWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffCommonWinCairo.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffDebugWinCairo.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffReleaseWinCairo.props: Added.

2013-03-20  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Remove VIEW_MODE_CSS_MEDIA from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=112849

        Reviewed by Sam Weinig.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2013-03-20  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Build WebKit Tools under VS2010
        https://bugs.webkit.org/show_bug.cgi?id=112821

        Reviewed by Tim Horton.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj:
        Add WinCairo-specific build target.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeDebugWinCairo.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj: Add WinCairo-specific build target.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeReleaseWinCairo.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeWinCairo.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiff.vcxproj:
        Add WinCairo-specific build target.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj:
        Add WinCairo-specific build target.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj: Add
        WinCairo-specific build target.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIDebugWinCairo.props: Added.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIReleaseWinCairo.props: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj: Add WinCairo-
        specific build target.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj: Add
        WinCairo-specific build target.
        * win/record-memory/record-memory.vcxproj: Add WinCairo target.
        * win/record-memory/record-memoryDebugWinCairo.props: Added.
        * win/record-memory/record-memoryReleaseWinCairo.props: Added.

2013-03-20  Roger Fong  <roger_fong@apple.com>

        API test gardening AppleWin port.

        The BitmapImageEmptyFrameTest should only be tested on Cairo not on AppleWin port.

        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2013-03-20  Roger Fong  <roger_fong@apple.com>

        Test fix for Win EWS bots, catch various errors and restart script if necessary.

        * EWSTools/start-queue-win.sh:

2013-03-20  Sami Kyostila  <skyostil@chromium.org>

        Unreviewed, add myself to committers.py.

2013-03-20  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Unreviewed. Adding another email for me.

        * Scripts/webkitpy/common/config/committers.py:

2013-03-20  Justin Novosad  <junov@google.com>

        [Chromium] Code cleanup: removing support for non-deferred 2d canvas rendering
        https://bugs.webkit.org/show_bug.cgi?id=112605

        Reviewed by James Robinson.

        Deleting all the code that was used for propagating and supporting
        the Chromium setting for disabling deferred 2d canvas rendering.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        (WebTestRunner::WebPreferences::applyTo):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        (TestShell::runFileTest):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):

2013-03-20  Ádám Kallai  <kadam@inf.u-szeged.hu>

        [Qt] Qt 4.8 tool related stuff removal from webkitpy.
        https://bugs.webkit.org/show_bug.cgi?id=112699.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._search_paths):
        (QtPort._port_specific_expectations_files):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest):
        (QtPortTest._assert_search_path):
        (QtPortTest._assert_expectations_files):

2013-03-19  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Enable kerning by default
        https://bugs.webkit.org/show_bug.cgi?id=112704

        Reviewed by Jocelyn Turcotte.

        Disable kerning by default, since some reference test expectations
        expect kerning to be default off.

        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunnerQt::reset):
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):

2013-03-20  Zeno Albisser  <zeno@webkit.org>

        [Qt] Remove empty function stubs from TestRunnerQt.
        https://bugs.webkit.org/show_bug.cgi?id=112799

        We are reducing the code in TestRunnerQt step by step,
        in order to finally replace all of it with the generic
        TestRunner implementation.
        This patch removes several simple function stubs that
        currently do not implement any actual functionality.

        Reviewed by Kenneth Rohde Christiansen.

        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunnerQt):

2013-03-20  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] Don't show the SearchBar by default when MiniBrowser opened
        https://bugs.webkit.org/show_bug.cgi?id=112687

        Reviewed by Kenneth Rohde Christiansen.

        Hide the SearchBar by default on window creation.

        * MiniBrowser/efl/main.c:
        (window_create):

2013-03-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r146304.
        http://trac.webkit.org/changeset/146304
        https://bugs.webkit.org/show_bug.cgi?id=112788

        to many expectations to update (Requested by antonm on
        #webkit).

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        (WebKit):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.cpp: Removed.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        * DumpRenderTree/chromium/TestShell.h:
        (WebKit):
        * DumpRenderTree/chromium/TestShellMac.mm:
        (platformInit):
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (platformInit):
        * DumpRenderTree/chromium/WebThemeControlDRTWin.cpp: Renamed from Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeControlWin.cpp.
        (WebThemeControlDRTWin::WebThemeControlDRTWin):
        (WebThemeControlDRTWin::~WebThemeControlDRTWin):
        (WebThemeControlDRTWin::box):
        (WebThemeControlDRTWin::line):
        (WebThemeControlDRTWin::triangle):
        (WebThemeControlDRTWin::roundRect):
        (WebThemeControlDRTWin::oval):
        (WebThemeControlDRTWin::circle):
        (WebThemeControlDRTWin::nestedBoxes):
        (WebThemeControlDRTWin::markState):
        (WebThemeControlDRTWin::draw):
        (WebThemeControlDRTWin::drawTextField):
        (WebThemeControlDRTWin::drawProgressBar):
        * DumpRenderTree/chromium/WebThemeControlDRTWin.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeControlWin.h.
        (WebThemeControlDRTWin):
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.h.
        (WebThemeEngineDRTMac):
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm: Renamed from Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.mm.
        (+[FakeActiveWindow alwaysActiveWindow]):
        (+[FakeActiveWindow alwaysInactiveWindow]):
        (-[FakeActiveWindow initWithActiveControls:]):
        (-[FakeActiveWindow _hasActiveControls]):
        (WebThemeEngineDRTMac::paintScrollbarThumb):
        (stateToHIEnableState):
        (WebThemeEngineDRTMac::paintHIThemeScrollbarThumb):
        (WebThemeEngineDRTMac::paintNSScrollerScrollbarThumb):
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp: Added.
        (webRectToSkIRect):
        (drawControl):
        (drawTextField):
        (drawProgressBar):
        (WebThemeEngineDRTWin::paintButton):
        (WebThemeEngineDRTWin::paintMenuList):
        (WebThemeEngineDRTWin::paintScrollbarArrow):
        (WebThemeEngineDRTWin::paintScrollbarThumb):
        (WebThemeEngineDRTWin::paintScrollbarTrack):
        (WebThemeEngineDRTWin::paintSpinButton):
        (WebThemeEngineDRTWin::paintTextField):
        (WebThemeEngineDRTWin::paintTrackbar):
        (WebThemeEngineDRTWin::paintProgressBar):
        (WebThemeEngineDRTWin::getSize):
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.h.
        (WebThemeEngineDRTWin):
        (WebThemeEngineDRTWin::WebThemeEngineDRTWin):

2013-03-19  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Support -webkit-font-smoothing
        https://bugs.webkit.org/show_bug.cgi?id=106009

        Reviewed by Jocelyn Turcotte.

        Set shouldUseFontSmoothing to false to match WebKitTestRunner.

        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunnerQt::reset):

2013-03-20  Krzysztof Czech  <k.czech@samsung.com>

        [GTK] accessibility/aria-scrollbar-role.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=98358

        Reviewed by Martin Robinson.

        Adds support for checking accessibility object's orientation.
        Orientation is checked by retrieving proper state of accessibility object.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (checkElementState):
        (AccessibilityUIElement::orientation):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::orientation):

2013-03-19  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move WebThemeEngine implementations to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=112751

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        (WebKit):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::themeEngine):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (WebKit):
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::themeEngine):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeControlWin.cpp: Renamed from Tools/DumpRenderTree/chromium/WebThemeControlDRTWin.cpp.
        (WebTestRunner::WebTestThemeControlWin::WebTestThemeControlWin):
        (WebTestRunner):
        (WebTestRunner::WebTestThemeControlWin::~WebTestThemeControlWin):
        (WebTestRunner::WebTestThemeControlWin::box):
        (WebTestRunner::WebTestThemeControlWin::line):
        (WebTestRunner::WebTestThemeControlWin::triangle):
        (WebTestRunner::WebTestThemeControlWin::roundRect):
        (WebTestRunner::WebTestThemeControlWin::oval):
        (WebTestRunner::WebTestThemeControlWin::circle):
        (WebTestRunner::WebTestThemeControlWin::nestedBoxes):
        (WebTestRunner::WebTestThemeControlWin::markState):
        (WebTestRunner::WebTestThemeControlWin::draw):
        (WebTestRunner::WebTestThemeControlWin::drawTextField):
        (WebTestRunner::WebTestThemeControlWin::drawProgressBar):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeControlWin.h: Renamed from Tools/DumpRenderTree/chromium/WebThemeControlDRTWin.h.
        (WebTestRunner):
        (WebTestThemeControlWin):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.h: Renamed from Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.h.
        (WebTestRunner):
        (WebTestThemeEngineMac):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.mm: Renamed from Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.mm.
        (+[FakeActiveWindow alwaysActiveWindow]):
        (+[FakeActiveWindow alwaysInactiveWindow]):
        (-[FakeActiveWindow initWithActiveControls:]):
        (-[FakeActiveWindow _hasActiveControls]):
        (WebTestRunner::WebTestThemeEngineMac::paintScrollbarThumb):
        (WebTestRunner):
        (WebTestRunner::WebTestThemeEngineMac::paintHIThemeScrollbarThumb):
        (WebTestRunner::WebTestThemeEngineMac::paintNSScrollerScrollbarThumb):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.cpp: Added.
        (WebTestRunner::WebTestThemeEngineWin::paintButton):
        (WebTestRunner):
        (WebTestRunner::WebTestThemeEngineWin::paintMenuList):
        (WebTestRunner::WebTestThemeEngineWin::paintScrollbarArrow):
        (WebTestRunner::WebTestThemeEngineWin::paintScrollbarThumb):
        (WebTestRunner::WebTestThemeEngineWin::paintScrollbarTrack):
        (WebTestRunner::WebTestThemeEngineWin::paintSpinButton):
        (WebTestRunner::WebTestThemeEngineWin::paintTextField):
        (WebTestRunner::WebTestThemeEngineWin::paintTrackbar):
        (WebTestRunner::WebTestThemeEngineWin::paintProgressBar):
        (WebTestRunner::WebTestThemeEngineWin::getSize):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.h: Renamed from Tools/DumpRenderTree/chromium/WebThemeEngineDRTWin.h.
        (WebTestRunner):
        (WebTestThemeEngineWin):
        (WebTestRunner::WebTestThemeEngineWin::WebTestThemeEngineWin):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        * DumpRenderTree/chromium/TestShell.h:
        (WebKit):
        * DumpRenderTree/chromium/TestShellMac.mm:
        (platformInit):
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (platformInit):
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp: Removed.

2013-03-19  Tony Chang  <tony@chromium.org>

        Move testRunner.setTouchDragDropEnabled to internals.settings
        https://bugs.webkit.org/show_bug.cgi?id=112739

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner): Remove unnecessary code.
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner): Remove unnecessary code.
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        (WebTestRunner::WebPreferences::applyTo): Always set to false.

2013-03-19  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Migrate to WEBKIT_USE_NEW_WEBFILESYSTEMTYPE
        https://bugs.webkit.org/show_bug.cgi?id=112754

        Reviewed by Darin Fisher.

        Remove old code behind ifndef WEBKIT_USE_NEW_WEBFILESYSTEMTYPE
        now that it's always defined.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-03-19  Kenneth Russell  <kbr@google.com>

        Unreviewed, rolling out r146290.
        http://trac.webkit.org/changeset/146290
        https://bugs.webkit.org/show_bug.cgi?id=112751

        Broke Chromium Mac build.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        (WebKit):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.cpp: Removed.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        * DumpRenderTree/chromium/TestShell.h:
        (WebKit):
        * DumpRenderTree/chromium/TestShellMac.mm:
        (platformInit):
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (platformInit):
        * DumpRenderTree/chromium/WebThemeControlDRTWin.cpp: Renamed from Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeControlWin.cpp.
        (WebThemeControlDRTWin::WebThemeControlDRTWin):
        (WebThemeControlDRTWin::~WebThemeControlDRTWin):
        (WebThemeControlDRTWin::box):
        (WebThemeControlDRTWin::line):
        (WebThemeControlDRTWin::triangle):
        (WebThemeControlDRTWin::roundRect):
        (WebThemeControlDRTWin::oval):
        (WebThemeControlDRTWin::circle):
        (WebThemeControlDRTWin::nestedBoxes):
        (WebThemeControlDRTWin::markState):
        (WebThemeControlDRTWin::draw):
        (WebThemeControlDRTWin::drawTextField):
        (WebThemeControlDRTWin::drawProgressBar):
        * DumpRenderTree/chromium/WebThemeControlDRTWin.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeControlWin.h.
        (WebThemeControlDRTWin):
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.h.
        (WebThemeEngineDRTMac):
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm: Renamed from Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.mm.
        (+[FakeActiveWindow alwaysActiveWindow]):
        (+[FakeActiveWindow alwaysInactiveWindow]):
        (-[FakeActiveWindow initWithActiveControls:]):
        (-[FakeActiveWindow _hasActiveControls]):
        (WebThemeEngineDRTMac::paintScrollbarThumb):
        (stateToHIEnableState):
        (WebThemeEngineDRTMac::paintHIThemeScrollbarThumb):
        (WebThemeEngineDRTMac::paintNSScrollerScrollbarThumb):
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp: Added.
        (webRectToSkIRect):
        (drawControl):
        (drawTextField):
        (drawProgressBar):
        (WebThemeEngineDRTWin::paintButton):
        (WebThemeEngineDRTWin::paintMenuList):
        (WebThemeEngineDRTWin::paintScrollbarArrow):
        (WebThemeEngineDRTWin::paintScrollbarThumb):
        (WebThemeEngineDRTWin::paintScrollbarTrack):
        (WebThemeEngineDRTWin::paintSpinButton):
        (WebThemeEngineDRTWin::paintTextField):
        (WebThemeEngineDRTWin::paintTrackbar):
        (WebThemeEngineDRTWin::paintProgressBar):
        (WebThemeEngineDRTWin::getSize):
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.h.
        (WebThemeEngineDRTWin):
        (WebThemeEngineDRTWin::WebThemeEngineDRTWin):

2013-03-19  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] canvas-fallback-content.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=111998

        Reviewed by Chris Fleizach.

        Adds support for getting platform name.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticValues):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::platformName):

2013-03-19  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move WebThemeEngine implementations to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=112751

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        (WebKit):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::themeEngine):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (WebKit):
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::themeEngine):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeControlWin.cpp: Renamed from Tools/DumpRenderTree/chromium/WebThemeControlDRTWin.cpp.
        (WebTestRunner::WebTestThemeControlWin::WebTestThemeControlWin):
        (WebTestRunner):
        (WebTestRunner::WebTestThemeControlWin::~WebTestThemeControlWin):
        (WebTestRunner::WebTestThemeControlWin::box):
        (WebTestRunner::WebTestThemeControlWin::line):
        (WebTestRunner::WebTestThemeControlWin::triangle):
        (WebTestRunner::WebTestThemeControlWin::roundRect):
        (WebTestRunner::WebTestThemeControlWin::oval):
        (WebTestRunner::WebTestThemeControlWin::circle):
        (WebTestRunner::WebTestThemeControlWin::nestedBoxes):
        (WebTestRunner::WebTestThemeControlWin::markState):
        (WebTestRunner::WebTestThemeControlWin::draw):
        (WebTestRunner::WebTestThemeControlWin::drawTextField):
        (WebTestRunner::WebTestThemeControlWin::drawProgressBar):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeControlWin.h: Renamed from Tools/DumpRenderTree/chromium/WebThemeControlDRTWin.h.
        (WebTestRunner):
        (WebTestThemeControlWin):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.h: Renamed from Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.h.
        (WebTestRunner):
        (WebTestThemeEngineMac):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineMac.mm: Renamed from Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.mm.
        (+[FakeActiveWindow alwaysActiveWindow]):
        (+[FakeActiveWindow alwaysInactiveWindow]):
        (-[FakeActiveWindow initWithActiveControls:]):
        (-[FakeActiveWindow _hasActiveControls]):
        (WebTestRunner::WebTestThemeEngineMac::paintScrollbarThumb):
        (WebTestRunner):
        (WebTestRunner::WebTestThemeEngineMac::paintHIThemeScrollbarThumb):
        (WebTestRunner::WebTestThemeEngineMac::paintNSScrollerScrollbarThumb):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.cpp: Added.
        (WebTestRunner::WebTestThemeEngineWin::paintButton):
        (WebTestRunner):
        (WebTestRunner::WebTestThemeEngineWin::paintMenuList):
        (WebTestRunner::WebTestThemeEngineWin::paintScrollbarArrow):
        (WebTestRunner::WebTestThemeEngineWin::paintScrollbarThumb):
        (WebTestRunner::WebTestThemeEngineWin::paintScrollbarTrack):
        (WebTestRunner::WebTestThemeEngineWin::paintSpinButton):
        (WebTestRunner::WebTestThemeEngineWin::paintTextField):
        (WebTestRunner::WebTestThemeEngineWin::paintTrackbar):
        (WebTestRunner::WebTestThemeEngineWin::paintProgressBar):
        (WebTestRunner::WebTestThemeEngineWin::getSize):
        * DumpRenderTree/chromium/TestRunner/src/WebTestThemeEngineWin.h: Renamed from Tools/DumpRenderTree/chromium/WebThemeEngineDRTWin.h.
        (WebTestRunner):
        (WebTestThemeEngineWin):
        (WebTestRunner::WebTestThemeEngineWin::WebTestThemeEngineWin):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        * DumpRenderTree/chromium/TestShell.h:
        (WebKit):
        * DumpRenderTree/chromium/TestShellMac.mm:
        (platformInit):
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (platformInit):
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp: Removed.

2013-03-19  Kenneth Rohde Christiansen  <kenneth@webkit.org> and Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Separate WebView further from EwkView
        https://bugs.webkit.org/show_bug.cgi?id=111591

        Reviewed by Caio Marcelo de Oliveira Filho.

        Updated EFL PlatformWebView to meet the new WKView API and ewk view private API.
        PlatformWKView is pointer to Evas_Object for EFL, as this is more natural and
        since we can afford it having EWKViewGetWKView() private API to access WKView.

        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewClientWebProcessCallbacks.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        (TestWebKitAPI::PlatformWebView::resizeTo):
        (TestWebKitAPI::PlatformWebView::page):
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress):
        (TestWebKitAPI::PlatformWebView::simulateMouseMove):
        (TestWebKitAPI::PlatformWebView::simulateRightClick):
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp:
        (WTR::EventSenderProxy::dispatchEvent):
        (WTR::EventSenderProxy::keyDown):
        (WTR::EventSenderProxy::sendTouchEvent):
        (WTR::EventSenderProxy::setTouchModifier):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::resizeTo):
        (WTR::PlatformWebView::page):
        (WTR::PlatformWebView::focus):
        (WTR::PlatformWebView::windowSnapshotImage):

2013-03-19  Roger Fong  <roger_fong@apple.com>

        Changes to VS2010 project files should only trigger builds on Windows bots.
        https://bugs.webkit.org/show_bug.cgi?id=112731

        Reviewed by Timothy Horton.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):

2013-03-19  Roger Fong  <roger_fong@apple.com>

        Unreviewed. webkitpy tests fix for Windows, runtests.py run-webkit-tests arguments changed.

        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        (RunTestsTest.test_webkit_run_unit_tests):

2013-03-19  Julie Parent  <jparent@chromium.org>

        Dashboards: Introduce history namespace and unit tests.
        https://bugs.webkit.org/show_bug.cgi?id=112645

        Reviewed by Ojan Vafai.
        
        Laying the framework for introducing the new history object and
        namespace.  This moves only static functions into the history
        namespace, and moves corresponding unit tests into seperate
        unit test file.

        * TestResultServer/static-dashboards/aggregate_results.html:
        * TestResultServer/static-dashboards/dashboard_base.js:
        (parseCrossDashboardParameters):
        (parseDashboardSpecificParameters):
        (parseParameters):
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (.switch.return):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        * TestResultServer/static-dashboards/history.js: Added.
        * TestResultServer/static-dashboards/history_unittests.js: Added.
        * TestResultServer/static-dashboards/loader.js:
        (.):
        * TestResultServer/static-dashboards/run-embedded-unittests.html:
        * TestResultServer/static-dashboards/run-unittests.html:
        * TestResultServer/static-dashboards/timeline_explorer.html:
        * TestResultServer/static-dashboards/timeline_explorer.js:
        * TestResultServer/static-dashboards/treemap.html:
        * TestResultServer/static-dashboards/treemap.js:
        (.switch.return):
        * TestResultServer/static-dashboards/ui.js:

2013-03-19  Daniel Bates  <dbates@webkit.org>

        svn-apply has trouble applying a patch that adds a Windows newline to EOF
        https://bugs.webkit.org/show_bug.cgi?id=112732

        Reviewed by Eric Seidel.

        Fixes an issues where a diff that adds a Windows line ending (CRLF) to the end
        of an existing file cannot be applied.

        In particular, svn-{apply, unapply} compensate for differences in line endings
        by converting the line endings in a diff to match the line endings in the target
        file. The diff(1) command precedes the last line of a diff that adds a newline
        character to the end of a file with the special character sequence "\n \\ No newline at end of file\n"
        Svn-{apply, unapply} converts the newline characters (\n) in this character sequence
        to \r\n (CRLF) when the target file has Windows line endings and patch(1) complains
        when applying this modified diff. Instead, svn-{apply, unapply} should not modify
        the newline characters in this special character sequence to match the line endings
        in the target file.

        * Scripts/VCSUtils.pm:
        (parseDiff):
        * Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:
        Added tests:
            - "SVN: Patch adds Windows newline to EOF and IndexPath has Windows line endings"
            - "SVN: Patch adds Mac newline to EOF and IndexPath has Mac line endings"
            - "Git: Patch adds Windows newline to EOF and IndexPath has Windows line endings"
            - "Git: Patch adds Mac newline to EOF and IndexPath has Mac line endings"
        (escapeNewLineCharacters): Added.
        (toMacLineEndings): Added.

2013-03-19  James Robinson  <jamesr@chromium.org>

        [chromium] Remove compositor settings that don't go through WebKit
        https://bugs.webkit.org/show_bug.cgi?id=112718

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        (WebTestRunner::WebPreferences::applyTo):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):

2013-03-19  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, rolling out r146101.
        https://bugs.webkit.org/show_bug.cgi?id=111884

        re-enable custom freetype on asan; this needs to be on
        now that the bot is running lucid.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2013-03-19  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] Enable USE_SYSTEM_MALLOC by default
        https://bugs.webkit.org/show_bug.cgi?id=112365

        Reviewed by Benjamin Poulain.

        Enable USE_SYSTEM_MALLOC by default via FeatureList.pm instead of
        harcoding it in wtf/Platform.h

        * Scripts/webkitperl/FeatureList.pm:

2013-03-19  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Make ImageDiff similar to Chromium's ImageDiff
        https://bugs.webkit.org/show_bug.cgi?id=94782

        Based on patch by Csaba Osztrogonác.
        Reviewed by Jocelyn Turcotte.

        The diff image is generated with bright red indicating errors, but letting the base image
        shine through so the context of the error-pixel can be identified.

        * DumpRenderTree/qt/ImageDiff.cpp:
        (main):

2013-03-18  Andras Becsi  <andras.becsi@digia.com>

        [Qt] Fix the build of QtTestBrowser if the print preview dialog is disabled in Qt

        Rubber-stamped by Csaba Osztrogonác.

        Check for QT_NO_PRINTPREVIEWDIALOG instead of QT_NO_PRINTER
        since the latter might not cover the former.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::print):

2013-03-18  Simon Fraser  <simon.fraser@apple.com>

        Style tweeks to default.css.
        
        Rubber-stamped by David Kilzer.
        
        Give visited links a different color to other links, so you can
        see which builds you've viewed.
        
        Make the <small> text less tiny.

        * BuildSlaveSupport/build.webkit.org-config/public_html/default.css:
        (small):
        (a:link,a:visited,a:active):
        (a:visited):

2013-03-18  Ryosuke Niwa  <rniwa@webkit.org>

        Remove the temporary hack for webkit-perf.appspot.com and cleanup the code
        https://bugs.webkit.org/show_bug.cgi?id=112494

        Reviewed by Dirk Pranke.

        Removed the code to override webkit-perf.appspot.com by perf.webkit.org.
        Also merged two pairs of methods to cleanup the code.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.run): Merged _upload_and_show_results.
        (PerfTestsRunner._generate_results): Merged _generate_output_files.

2013-03-18  Dirk Pranke  <dpranke@chromium.org>

        [chromium] build xdisplaycheck when building DRT
        https://bugs.webkit.org/show_bug.cgi?id=112636

        Reviewed by Tony Chang.

        It appears that we need xdisplaycheck to be built in order for
        Xvfb to be started correctly on the bots, and DRT was missing
        a dependency on it. This may be the cause of the ASAN bot not
        starting up properly (it only builds DRT).

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2013-03-18  David Levin  <levin@chromium.org>

        Implement icon change notification dump for Chromium's test shell.
        https://bugs.webkit.org/show_bug.cgi?id=112614

        This was previously implemented for some other platforms in r58111
        and r116547.

        In r122806, fast/dom/icon-url-property.html stopped using it, but
        it is useful for tests, so I plan to re-add it to that test again.

        Reviewed by Jochen Eisinger.

        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebTestRunner::WebTestProxy::didChangeIcon): Add handler so that
         icon change notifications from WebKit may be logged in test output.
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner): Expose dumpIconChanges.
        (WebTestRunner::TestRunner::reset): Clear the new dump variable.
        (WebTestRunner::TestRunner::shouldDumpIconChanges): Expose the dump vairable.
        (WebTestRunner):
        (WebTestRunner::TestRunner::dumpIconChanges): Implement the test method.
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::didChangeIcon):
        (WebTestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didChangeIcon): Add the output about changing the icon.
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-03-18  Julie Parent  <jparent@chromium.org>

        Cleanup: Move js for treemap and aggregate_results into own js files.
        https://bugs.webkit.org/show_bug.cgi?id=112618

        Reviewed by Dirk Pranke.
        
        No functional changes, just moving the code into separate js file
        rather than inlined in the html, so we can test it, make it more
        modular, etc.  Other dashboard types are already done this way.

        * TestResultServer/static-dashboards/aggregate_results.html:
        * TestResultServer/static-dashboards/aggregate_results.js: Copied from Tools/TestResultServer/static-dashboards/aggregate_results.html.
        (generatePage):
        (handleValidHashParameter):
        (htmlForBuilder):
        (rawValuesHTML):
        (chartHTML):
        (filteredValues):
        (chart):
        (htmlForRevisionRows):
        (wrapHTMLInTable):
        (htmlForSummaryTable):
        (valuesPerExpectation):
        (htmlForTestType):
        (htmlForTableRow):
        (extendedEncode):
        * TestResultServer/static-dashboards/treemap.html:
        * TestResultServer/static-dashboards/treemap.js: Copied from Tools/TestResultServer/static-dashboards/treemap.html.
        (humanReadableTime):
        (convertToWebTreemapFormat):
        (reverseSortByAverage):
        (generatePage):
        (focusPath):
        (.switch.return):
        (handleQueryParameterChange):
        (extractName):
        (fullName):
        (handleFocus.):
        (handleFocus):

2013-03-18  Zan Dobersek  <zdobersek@igalia.com>

        [webkitpy] '/usr/bin/interdiff' output while running test-webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=112622

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/tool/steps/haslanded_unittest.py:
        (HasLandedTest): Pipe the stdout and stderr output of the subprocess call to subprocess.PIPE, eliminating unnecessary output.

2013-03-18  Zan Dobersek  <zdobersek@igalia.com>

        [NRWT][GTK] Add gtk-wk1 directory to the list of baseline search paths when using DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=112619

        Reviewed by Dirk Pranke.

        When using DumpRenderTree on the Gtk port, NRWT should look for baselines first in the LayoutTests/platform/gtk-wk1
        directory and then fall back to the generic LayoutTests/platform/gtk directory.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.default_baseline_search_path): Implement the method on the GtkPort class, mapping every search path to the
        Port._webkit_baseline_path method.
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        (GtkPortTest.test_default_baseline_search_path): Add a test for the changes that are being introduced.
        (GtkPortTest.test_port_specific_expectations_files): Wrap a couple of long lines.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineTest.test_baseline_directory): Enhance one and add an additional test case for baseline directories
        that are expected based on the builder name.

2013-03-18  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Create WebFileSystemType enum to allow easier filesystem refactoring
        https://bugs.webkit.org/show_bug.cgi?id=112571

        Reviewed by Adam Barth.

        Update function declarations for new WebFileSystemType enum. (All
        changes are behind an #ifdef so we can sync required changes in embedders.)

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::openFileSystem):
        (WebViewHost::deleteFileSystem):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-03-18  Julie Parent  <jparent@chromium.org>

        Cleanup: Move timeline_exporer js out of html file into js.
        https://bugs.webkit.org/show_bug.cgi?id=112188

        Reviewed by Dirk Pranke.
        
        Moves the javascript out of the html file and into a new js file.
        This follows the format of flakiness_dashboard.{html|js}.
        
        Also moves code from dashboard_base that is used only by this one
        dashboard, and makes it private to the dashboard.

        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/timeline_explorer.html:
        * TestResultServer/static-dashboards/timeline_explorer.js: Copied from Tools/TestResultServer/static-dashboards/timeline_explorer.html.
        (generatePage):
        (initCurrentBuilderTestResults):
        (shouldShowWebKitRevisionsOnly):
        (updateTimelineForBuilder.):
        (updateTimelineForBuilder):
        (selectBuild):
        (updateBuildIndicator):
        (.addRow):
        (.addNumberRow):
        (.inspectorNode.getElementsByTagName.0.onclick):
        (.inspectorNode.getElementsByTagName.1.onclick):
        (.inspectorNode.getElementsByTagName.2.onclick):
        (updateBuildInspector):
        (showResultsDelta):
        (decompressResults.addFlakyDelta):
        (decompressResults):

2013-03-18  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, rolling out r145272.
        http://trac.webkit.org/changeset/145272
        https://bugs.webkit.org/show_bug.cgi?id=111884

        Turns out the ASAN build is still broken; possibly there's
        something still setting LD_LIBRARY_PATH, or possibly there's
        something else wrong. In the meantime, we need it to work again.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2013-03-18  Ryosuke Niwa  <rniwa@webkit.org>

        delete-stale-build-files is too aggressive
        https://bugs.webkit.org/show_bug.cgi?id=112595

        Reviewed by Tim Horton.

        It appears that whitelisting file extensions to keep is not a good idea.
        Blacklist files to delete instead, and only delete .o files for now.
        We can add more file extensions as needed.

        * BuildSlaveSupport/delete-stale-build-files:

2013-03-18  Simon Fraser  <simon.fraser@apple.com>

        Disable accessibility notifications after each test
        https://bugs.webkit.org/show_bug.cgi?id=112579

        Reviewed by Tim Horton.
        
        In WebKitTestRunner, if any tests triggered accessibility notifications,
        the global notification handler would thereafter be active, and fire
        notifications for all subsequent tests.
        
        Fix by implementing AccessibilityController::resetToConsistentState() for
        Mac, and using it to clear the global notification handler.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AccessibilityController::addNotificationListener): Remove stupid comment.
        (WTR::AccessibilityController::removeNotificationListener): Explicitly call
        -stopObserving so that unregistering the observer doesn't rely on object lifetimes
        (e.g. because of -autorelease).
        (WTR::AccessibilityController::logAccessibilityEvents): Stub.
        (WTR::AccessibilityController::resetToConsistentState): Remove the notification listener
        if there is one.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.h:
        Add -stopObserving
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:
        (-[AccessibilityNotificationHandler dealloc]): Call -stopObserving
        (-[AccessibilityNotificationHandler stopObserving]): Unregister from the notification
        center.

2013-03-18  Dana Jansens  <danakj@chromium.org>

        [chromium] Remove WebGraphicsContext3DInProcessImpl support from DRT.
        https://bugs.webkit.org/show_bug.cgi?id=112392

        Reviewed by James Robinson.

        Removes the command line flag option from DRT.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):

2013-03-18  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] plugins/plugin-clip-subframe.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=112570

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Add the LogNPPSetWindow.cpp file to the build.

2013-03-17  Morten Stenshorne  <mstensho@opera.com>

        Add reload button (and F5 accelerator) to the GtkLauncher toolbar
        https://bugs.webkit.org/show_bug.cgi?id=112442

        Reviewed by Gustavo Noronha Silva.

        * GtkLauncher/main.c:
        (reloadCb):
        (createToolbar):
        (createWindow):

2013-03-15  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r144884?): WebKit2.DOMWindowExtensionBasic API test is asserting
        https://bugs.webkit.org/show_bug.cgi?id=112205

        Disable this API test until Geoff can fix it.

        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic.cpp:
        (TestWebKitAPI::TEST):

2013-03-15  Jochen Eisinger  <jochen@chromium.org>

        plugins/netscape-plugin-setwindow-size*.html and plugins/pass-different-npp-struct.html should be async
        https://bugs.webkit.org/show_bug.cgi?id=112478

        Reviewed by Tony Chang.

        There is nothing that ensures that the log messages from the plugin
        come in before the layout test finished loading.

        * DumpRenderTree/TestNetscapePlugIn/Tests/PassDifferentNPPStruct.cpp:
        (PassDifferentNPPStruct::NPP_SetWindow):
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_SetWindow):

2013-03-15  Simon Fraser  <simon.fraser@apple.com>

        Have the mac port support per_test_timeout in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=112466

        Reviewed by Dirk Pranke.
        
        Both WTR and DRT handle --timeout arguments, so we can
        have the scripts pass the timeout values down to the tools.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.supports_per_test_timeout):

2013-03-15  Rouslan Solomakhin  <rouslan@chromium.org>

        Remove setAsynchronousSpellCheckingEnabled from test runners
        https://bugs.webkit.org/show_bug.cgi?id=112362

        Reviewed by Tony Chang.

        Remove setAsynchronousSpellCheckingEnabled from test runners. The setting is now
        in internals.settings, so all ports can share it.

        * DumpRenderTree/TestRunner.cpp: Remove setAsynchronousSpellCheckingEnabled() method.
        * DumpRenderTree/TestRunner.h: Remove setAsynchronousSpellCheckingEnabled() method.
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp: Remove setAsynchronousSpellCheckingEnabled() method.
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp: Remove setAsynchronousSpellCheckingEnabled() method.
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h: Remove setAsynchronousSpellCheckingEnabled() method.
        * DumpRenderTree/efl/TestRunnerEfl.cpp: Remove setAsynchronousSpellCheckingEnabled() method.
        * DumpRenderTree/gtk/TestRunnerGtk.cpp: Remove setAsynchronousSpellCheckingEnabled() method.
        * DumpRenderTree/mac/TestRunnerMac.mm: Remove setAsynchronousSpellCheckingEnabled() method.
        * DumpRenderTree/qt/TestRunnerQt.cpp: Remove setAsynchronousSpellCheckingEnabled() method.
        * DumpRenderTree/qt/TestRunnerQt.h: Remove setAsynchronousSpellCheckingEnabled() method.
        * DumpRenderTree/win/TestRunnerWin.cpp: Remove setAsynchronousSpellCheckingEnabled() method.
        * DumpRenderTree/wx/TestRunnerWx.cpp: Remove setAsynchronousSpellCheckingEnabled() method.

2013-03-15  Simon Fraser  <simon.fraser@apple.com>

        Fix the stupid unit tests.

        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_sample_process):

2013-03-14  Simon Fraser  <simon.fraser@apple.com>

        Collect samples for unresponsive web processes
        https://bugs.webkit.org/show_bug.cgi?id=112409

        Reviewed by Tim Horton.
        
        When we detect that a subprocess was unresponsive, run the 'sample'
        tool on that process, for the Mac port.
        
        The sample will be linked to from the results.html page, next
        to the crash log link.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._look_for_new_crash_logs): Before looking for crash logs,
        look for samples on disk.
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (TestResultWriter):
        (TestResultWriter.copy_sample_file): Teach TestResultWriter about
        -sample.txt files, and have it copy their contents to a new file
        next to the test that spawned them (as we do for crash logs).
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.look_for_new_samples): Base class does nothing for sampling.
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver._check_for_driver_crash): Kick off a sample if we detected
        that the subprocess was unresponsive.
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.sample_file_path): Utility to generate the file path
        to the generated sample files at the top level of layout-test-results.
        (MacPort.look_for_new_crash_logs): Fix typo
        (MacPort.look_for_new_samples): New function to find sample files.
        (MacPort.sample_process): Use the utility function to get the file path.

2013-03-15  Zeno Albisser  <zeno@webkit.org>

        [Qt] Remove simple getters and setters from TestRunnerQt
        https://bugs.webkit.org/show_bug.cgi?id=112343

        Reviewed by Benjamin Poulain.

        The removed functions and boolean members
        are being replaced by the implementations in the
        generic TestRunner.h.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (DumpRenderTree::dumpFrameScrollPosition):
        (DumpRenderTree::dumpFramesAsText):
        (DumpRenderTree::dump):
        (DumpRenderTree::titleChanged):
        (DumpRenderTree::dumpDatabaseQuota):
        (DumpRenderTree::dumpApplicationCacheQuota):
        (DumpRenderTree::statusBarMessage):
        (DumpRenderTree::createWindow):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunnerQt::reset):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunnerQt):

2013-03-15  Ryosuke Niwa  <rniwa@webkit.org>

        Update the link on build.webkit.org to refer to perf.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=112416

        Reviewed by Philip Rogers.

        Updated the link. Also updated the template to use HTML5 DOCTYPE.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2013-03-15  Tobias Mueller  <tobiasmue@gnome.org>

        Build fix for Tools/GtkLauncher/Programs_GtkLauncher-main.o if gstreamer is not installed
        https://bugs.webkit.org/show_bug.cgi?id=112394

        Reviewed by Philippe Normand.

        * GtkLauncher/main.c:
        (main): Guard using the gstreamer function with #ifdef WTF_USE_GSTREAMER

2013-03-14  Andreas Kling  <akling@apple.com>

        REGRESSION(r145169): [Mac][WK2] http/tests/security/cross-frame-access-put.html fails.
        <http://webkit.org/b/111815>
        <rdar://problem/13380145>

        Reviewed by Anders Carlsson.

        Add PlatformWebView::didInitializeClients() and call it after setting up all the clients
        after creating a PlatformWebView. Otherwise, the initial WindowAndViewFramesChanged message
        will be sent before there's a UI client set up to adjust the frame with WTR's fake origin.

        * WebKitTestRunner/PlatformWebView.h:
        (PlatformWebView):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::didInitializeClients):

2013-03-14  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][MiniBrowser] Add a search field to the MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=112122

        Reviewed by Kenneth Rohde Christiansen.

        Implement a search field to test API ewk_view_text_find() and add a shortcut 'ctrl' + f.

        * MiniBrowser/efl/main.c:
        (_Browser_Window):
        (search_box_show):
        (search_box_hide):
        (on_key_down):
        (on_url_changed):
        (on_search_field_aborted):
        (on_search_field_activated):
        (on_search_field_clicked):
        (on_search_backward_button_clicked):
        (on_search_forward_button_clicked):
        (window_create):

2013-03-14  Julie Parent  <jparent@chromium.org>

        Cleanup: Remove g_resourceLoader.
        https://bugs.webkit.org/show_bug.cgi?id=112305

        Reviewed by Dirk Pranke.
        
        Removing another global.
        
        Now, each dashboard creates its own loader, rather than having
        a general global one.
        
        Remove usage of g_resourceLoader.isLoadingComplete from 
        handleLocationChange by ensuring that handleLocationChange is
        never called before the loader is done.  It was called in two
        places before: 1 was from the callback when the loader is done,
        so that was obviously true, and the other was from onhashchange,
        where it would just return rather than running.  Instead, lets
        only register the onhashchange handler once the loader is
        setup, so the check is no longer necessary.
        
        Remove isLoadingComplete since it is now unused.
        
        Callback for loader is now initializeHistory, rather than just
        handleLocationChange which will set up the hashchange handler now.
        This will all eventually be moving to a new History object.

        * TestResultServer/static-dashboards/aggregate_results.html:
        * TestResultServer/static-dashboards/dashboard_base.js:
        (handleLocationChange):
        (intializeHistory):
        (decompressResults):
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (generatePage):
        * TestResultServer/static-dashboards/loader.js:
        (.):
        * TestResultServer/static-dashboards/loader_unittests.js:
        * TestResultServer/static-dashboards/timeline_explorer.html:
        * TestResultServer/static-dashboards/treemap.html:

2013-03-14  Manuel Rego Casasnovas  <rego@igalia.com>

        Add selectTrailingWhitespaceEnabled setting to WebCore::Page
        https://bugs.webkit.org/show_bug.cgi?id=109404

        Reviewed by Tony Chang.

        Removes all the code related to smartInsertDeleteEnabled and
        selectTrailingWhitespaceEnabled settings as they will be managed from
        internals from now on.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (WebKit):
        (BlackBerry::WebKit::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/blackberry/DumpRenderTreeBlackBerry.h:
        (DumpRenderTree):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebTestRunner::WebTestProxy::didStopLoading):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::applyTo): Set default values for
        smartInsertDeleteEnabled and selectTrailingWhitespaceEnabled settings as
        Chromium DRT default values are different from Chromium browser.
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunnerQt):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/wx/TestRunnerWx.cpp:

2013-03-14  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Disable DRT on Windows

        Reviewed by Jocelyn Turcotte.

        We don't run and maintain DRT on Windows, so let's not try to maintain the build of it.

        * qmake/mkspecs/features/configure.prf:

2013-03-14  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Add an API for adding and removing user style sheets from a page group
        https://bugs.webkit.org/show_bug.cgi?id=110728

        Reviewed by Gyuyoung Kim.

        Use the page group to create the view object.

        * MiniBrowser/efl/main.c:
        (window_create):

2013-03-14  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Improve the handling of mock geolocation, device orientation and motion clients

        Reviewed by Tor Arne Vestbø.

        The mock versions of these web facing features should be instantiated when
        running in DumpRenderTree only. In order for them to work, no extra Qt modules
        such as QtLocation are actually needed.

        This patch decouples enabling device orientation/motion and geolocation from
        the underlying Qt modules and makes them available in developer builds
        (!production_build) and backed by mock backends when running in drt.

        So if the Qt 5 modules are available, they'll be used (unless drtRun). For
        developers the web facing features are always enabled (although requests will
        time out) and the mock backends are enabled inside DRT, allowing for the layout
        tests to run with less dependencies.

        In addition this also enables the mock device motion client, which was
        previously never instantiated.

        * qmake/mkspecs/features/features.prf:

2013-03-14  Zeno Albisser  <zeno@webkit.org>

        [Qt] Removing no-ops and simple setters/getters from TestRunnerQt
        https://bugs.webkit.org/show_bug.cgi?id=112340

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (DumpRenderTree::dump):
            Replace shouldDumpBackForwardList() with TestController:dumpBackForwardList().
        (DumpRenderTree::dumpApplicationCacheQuota):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunnerQt::reset):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunnerQt):

2013-03-14  Zeno Albisser  <zeno@webkit.org>

        [Qt] Port DRT to use TestRunner::dumpAsText()
        https://bugs.webkit.org/show_bug.cgi?id=112260

        Reviewed by Benjamin Poulain.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        (WebCore::methodNameStringForFailedTest):
            Change parameter from type TestRunnerQt* to TestRunner*.
        (WebCore::DumpRenderTree::dump):
            TestRunnerQt::shouldDumpPixels() always returned true in our case.
            Instead we should rely on TestRunner::generatePixelResults().
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunnerQt::reset):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunnerQt):

2013-03-13  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Implement FontLoader interface
        https://bugs.webkit.org/show_bug.cgi?id=98395

        Reviewed by Eric Seidel.

        Enable FontLoadEvents runtime flag for TestShell.

        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):

2013-03-13  Julie Parent  <jparent@chromium.org>

        CLeanup: remove unnecessary call to parseParameters.
        https://bugs.webkit.org/show_bug.cgi?id=112309

        Reviewed by Ojan Vafai.
        
        We call parseCrossDashboardParameters when the dashboard initially
        loads to set the state required for loadBuildersList, and then we
        call it again once we are fully done with loading, so there is no
        reason to call it in the middle of the loading process here.

        * TestResultServer/static-dashboards/loader.js:
        (.):

2013-03-13  Elliott Sprehn  <esprehn@chromium.org>

        Unreviewed. Now I'm a reviewer :)

        * Scripts/webkitpy/common/config/committers.py:

2013-03-13  Ryosuke Niwa  <rniwa@webkit.org>

        Threaded HTML Parser is missing feature define flags in all but Chromium port's build files
        https://bugs.webkit.org/show_bug.cgi?id=112277

        Reviewed by Adam Barth.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2013-03-13  Adam Barth  <abarth@webkit.org>

        run-perf-tests should support content_shell
        https://bugs.webkit.org/show_bug.cgi?id=112291

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):

2013-03-13  Oliver Hunt  <oliver@apple.com>

        Simplify Checked<> multiplication
        https://bugs.webkit.org/show_bug.cgi?id=112286

        Reviewed by James Robinson.

        Add tests for multiplication by zero and max to ensure we don't
        mess them up should we ever make changes to Checked<> in future.

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        (TestWebKitAPI):

2013-03-13  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Unreviewed prospective Windows build fix

        Do the usual thing, include the moc generated code in the .cpp file instead
        of compiling it standalone, to ensure that config.h is included, too, and
        NOMINMAX is defined to avoid the min/max conflict when also including qdatetime.h.

        * DumpRenderTree/qt/EventSenderQt.cpp:

2013-03-13  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Port TestRunner::findString to shared interface
        https://bugs.webkit.org/show_bug.cgi?id=112147

        Reviewed by Jocelyn Turcotte.

        This patch also removes DumpRenderTree and some other helper classes from
        the WebCore namespace, to which they do not really belong.

        * DumpRenderTree/qt/DumpRenderTreeMain.cpp:
        (main):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (DumpRenderTree::DumpRenderTree):
        (DumpRenderTree::~DumpRenderTree):
        (DumpRenderTree::instance):
        (DumpRenderTree::setShouldTimeout):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (DumpRenderTree):
        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::contextClick):
        (EventSender::sendEvent):
        (EventSender::postEvent):
        * DumpRenderTree/qt/EventSenderQt.h:
        (EventSender::isGraphicsBased):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunnerQt::TestRunnerQt):
        (TestRunner::findString):
        (TestRunnerQt::setMockDeviceOrientation):
        (TestRunnerQt::setGeolocationPermission):
        (TestRunnerQt::numberOfPendingGeolocationPermissionRequests):
        (TestRunnerQt::setMockGeolocationPositionUnavailableError):
        (TestRunnerQt::setMockGeolocationPosition):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunnerQt):

2013-03-13  Mikhail Naganov  <mnaganov@chromium.org>

        [Chromium] Rename android_build_type to android_webview_build in .gyp files.
        https://bugs.webkit.org/show_bug.cgi?id=112129

        Reviewed by Adam Barth.

        Following Chromium
        http://src.chromium.org/viewvc/chrome?view=rev&revision=187556
        this is being renamed to better explain what it does.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2013-03-13  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Unreviewed trivial typo fix

        * DumpRenderTree/qt/DumpRenderTree.pro: It's TestRunner.h, not
        TextRunner.h. Thanks Zeno :)

2013-03-12  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Prepare DRT for transition to shared TestRunner interface
        https://bugs.webkit.org/show_bug.cgi?id=112144

        Reviewed by Benjamin Poulain.

        Prepare Qt's DRT for a transition from the QObject based TestRunner to
        the JSC C API based one.

        This is impplemented by instantiating the QObject based testRunner in
        the global object, then instantiating the JSC C based TestRunner
        separately and placing it "behind" the QObject based testRunner through
        injection of the individual functions through proxies. (prototype
        chaining doesn't work due to the this object and Function.prototype.bind
        doesn't work due to the native function)

        This allows for porting over method by method by removing the method
        from the QObject TestRunnerQt and implementing it in the JSC C based
        TestRunner.

        In order for this to link and run dummy implementations of all the
        necessary TestRunner functions are provided.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeMain.cpp:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        (WebCore::DumpRenderTree::initJSObjects):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (DumpRenderTree):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::~TestRunner):
        (TestRunner::addDisallowedURL):
        (TestRunner::queueLoad):
        (TestRunner::removeAllVisitedLinks):
        (TestRunner::setAcceptsEditing):
        (TestRunner::simulateLegacyWebNotificationClick):
        (TestRunner::setWindowIsKey):
        (TestRunner::setAlwaysAcceptCookies):
        (TestRunner::addOriginAccessWhitelistEntry):
        (TestRunner::setWebViewEditable):
        (TestRunner::clearAllApplicationCaches):
        (TestRunner::setTextDirection):
        (TestRunner::notifyDone):
        (TestRunner::numberOfPendingGeolocationPermissionRequests):
        (TestRunner::overridePreference):
        (TestRunner::pathToLocalResource):
        (TestRunner::removeAllWebNotificationPermissions):
        (TestRunner::simulateWebNotificationClick):
        (TestRunner::closeIdleLocalStorageDatabases):
        (TestRunner::focusWebView):
        (TestRunner::setBackingScaleFactor):
        (TestRunner::removeChromeInputField):
        (TestRunner::addChromeInputField):
        (TestRunner::originsWithLocalStorage):
        (TestRunner::deleteAllLocalStorage):
        (TestRunner::deleteLocalStorageForOrigin):
        (TestRunner::observeStorageTrackerNotifications):
        (TestRunner::syncLocalStorage):
        (TestRunner::windowCount):
        (TestRunner::setWaitToDump):
        (TestRunner::waitForPolicyDelegate):
        (TestRunner::webHistoryItemCount):
        (TestRunner::showWebInspector):
        (TestRunner::closeWebInspector):
        (TestRunner::evaluateInWebInspector):
        (TestRunner::setSerializeHTTPLoads):
        (TestRunner::apiTestNewWindowDataLoadBaseURL):
        (TestRunner::setCustomPolicyDelegate):
        (TestRunner::setDatabaseQuota):
        (TestRunner::setDomainRelaxationForbiddenForURLScheme):
        (TestRunner::resetPageVisibility):
        (TestRunner::keepWebHistory):
        (TestRunner::goBack):
        (TestRunner::originsWithApplicationCache):
        (TestRunner::applicationCacheDiskUsageForOrigin):
        (TestRunner::display):
        (TestRunner::dispatchPendingLoadRequests):
        (TestRunner::clearPersistentUserStyleSheet):
        (TestRunner::callShouldCloseOnWebView):
        (TestRunner::copyDecodedHostName):
        (TestRunner::clearBackForwardList):
        (TestRunner::clearAllDatabases):
        (TestRunner::clearApplicationCacheForOrigin):
        (TestRunner::apiTestGoToCurrentBackForwardItem):
        (TestRunner::authenticateSession):
        (TestRunner::abortModal):
        (TestRunner::setStorageDatabaseIdleInterval):
        (TestRunner::setAsynchronousSpellCheckingEnabled):
        (TestRunner::setXSSAuditorEnabled):
        (TestRunner::setSpatialNavigationEnabled):
        (TestRunner::setScrollbarPolicy):
        (TestRunner::setJavaScriptCanAccessClipboard):
        (TestRunner::setAutomaticLinkDetectionEnabled):
        (TestRunner::setUserStyleSheetEnabled):
        (TestRunner::setUserStyleSheetLocation):
        (TestRunner::setUseDashboardCompatibilityMode):
        (TestRunner::setTabKeyCyclesThroughElements):
        (TestRunner::setSmartInsertDeleteEnabled):
        (TestRunner::setSelectTrailingWhitespaceEnabled):
        (TestRunner::setPrivateBrowsingEnabled):
        (TestRunner::setPluginsEnabled):
        (TestRunner::setPopupBlockingEnabled):
        (TestRunner::setMockSpeechInputDumpRect):
        (TestRunner::setPersistentUserStyleSheetLocation):
        (TestRunner::setMockGeolocationPosition):
        (TestRunner::setMockGeolocationPositionUnavailableError):
        (TestRunner::setMockDeviceOrientation):
        (TestRunner::setMainFrameIsFirstResponder):
        (TestRunner::setIconDatabaseEnabled):
        (TestRunner::setGeolocationPermission):
        (TestRunner::setDefersLoading):
        (TestRunner::setCacheModel):
        (TestRunner::setAuthorAndUserStylesEnabled):
        (TestRunner::setAllowFileAccessFromFileURLs):
        (TestRunner::setAppCacheMaximumSize):
        (TestRunner::setAllowUniversalAccessFromFileURLs):
        (TestRunner::setApplicationCacheOriginQuota):
        (TestRunner::denyWebNotificationPermission):
        (TestRunner::grantWebNotificationPermission):
        (TestRunner::setValueForUser):
        (TestRunner::setViewModeMediaFeature):
        (TestRunner::setPageVisibility):
        (TestRunner::addMockSpeechInputResult):
        (TestRunner::removeOriginAccessWhitelistEntry):
        (TestRunner::addUserScript):
        (TestRunner::isCommandEnabled):
        (TestRunner::evaluateScriptInIsolatedWorld):
        (TestRunner::evaluateScriptInIsolatedWorldAndReturnValue):
        (TestRunner::copyEncodedHostName):
        (TestRunner::addUserStyleSheet):
        (TestRunner::findString):
        (TestRunner::execCommand):
        (TestRunner::localStorageDiskUsageForOrigin):

2013-03-12  Julie Parent  <jparent@chromium.org>

        Cleanup: Move flatten-trie to loader.
        https://bugs.webkit.org/show_bug.cgi?id=112196

        Reviewed by Dirk Pranke.

        flatten-trie is used only by the loader, so move it there and make it
        private, rather than global in dashbaord_base. Moved the corresponding
        unit test from flakiness_dashboard_unittests to loader_unittests.
        
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        * TestResultServer/static-dashboards/loader.js:
        (.):
        * TestResultServer/static-dashboards/loader_unittests.js:

2013-03-12  Oliver Hunt  <oliver@apple.com>

        Unbreak api tests

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        (TestWebKitAPI):

2013-03-12  Tim Horton  <timothy_horton@apple.com>

        Unreviewed, disabling tests for Win EWS.

        win-ews obviously cannot keep up with running tests, it's >300 behind.
        Probably doesn't help that its (likely) running tests serially.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-03-12  Tim Horton  <timothy_horton@apple.com>

        Add a --build-directory argument to delete-stale-build-files
        https://bugs.webkit.org/show_bug.cgi?id=112198

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/delete-stale-build-files:
        (main): Add --build-directory argument.

2013-03-12  Oliver Hunt  <oliver@apple.com>

        Appease MSVC

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        (TestWebKitAPI):

2013-03-12  Oliver Hunt  <oliver@apple.com>

        Add more Checked<> tests
        https://bugs.webkit.org/show_bug.cgi?id=112190

        Reviewed by Geoffrey Garen.

        Tests!

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        (TestWebKitAPI):

2013-03-12  Julie Parent  <jparent@chromium.org>

        Cleanup: Move loading complete function into callback, rather than global.
        https://bugs.webkit.org/show_bug.cgi?id=112167

        Reviewed by Dirk Pranke.
        
        Stop calling global functions, pass in proper handler to Loader
        constructor. Note that the callback is optional, as tests, and
        some potential dashboards, do not need one.

        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/loader.js:
        (.):
        * TestResultServer/static-dashboards/loader_unittests.js:

2013-03-12  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] Add popup menu support to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=108934

        Reviewed by Kenneth Rohde Christiansen.

        Implement popup menu support in MiniBrowser by handling popup_menu_show
        and popup_menu_hide smart functions on the view and using the Ewk popup
        menu API.

        * MiniBrowser/efl/main.c:
        (_Browser_Window):
        (on_popup_menu_discarded):
        (on_popup_menu_item_clicked):
        (popup_menu_populate):
        (on_popup_menu_show):
        (on_popup_menu_hide):
        (window_create): Use calloc() instead of malloc() to allocate memory for
        Browser_Window. This makes sure all the structs members are initialized
        to 0 (such as the new elm_popup_menu pointer).

2013-03-12  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Set up the libPlatformGtk.la library
        https://bugs.webkit.org/show_bug.cgi?id=111738

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Reference platformgtk_cppflags variable along with webcoregtk_cppflags variable.
        Adjust the path to GtkVersioning.c, the file has moved under Source/Platform.
        * TestWebKitAPI/GNUmakefile.am: Reference platformgtk_cppflags variable along with webcoregtk_cppflags variable.

2013-03-12  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Enable Web Audio in development builds
        https://bugs.webkit.org/show_bug.cgi?id=111831

        Reviewed by Philippe Normand.

        Web Audio is already quite well supported on the GTK port but still has a few issues
        that must be addressed before it is enabled by default. Despite that it should be enabled
        in development builds just so we are up-to-date with future feature infrastructure changes.
        The Web Audio-related layout tests are not run yet due to missing support in DRT/WKTR, but
        that's an obvious goal before enabling the feature in release builds.

        * Scripts/webkitperl/FeatureList.pm:

2013-03-11  Andreas Kling  <akling@apple.com>

        [Mac][WK1] Add support for alert() in MiniBrowser.
        <http://webkit.org/b/112090>

        Reviewed by Anders Carlsson.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]):

2013-03-11  Julie Parent  <jparent@chromium.org>

        Dashboard cleanup: Create ui.Errors
        https://bugs.webkit.org/show_bug.cgi?id=111785

        Reviewed by Ojan Vafai.
        
        Create ui.Errors for handling errors the dashboards
        encounter. Loader now has a Error object that it can add to,
        and individual dashboards can show errors when desired.
        Currently, only flakiness_db shows errors, but this is 
        generic and there is no reason why other dbs wouldn't want to
        show errors.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (resourceLoadingComplete):
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (generatePage):
        * TestResultServer/static-dashboards/loader.js:
        (.):
        * TestResultServer/static-dashboards/ui.js:
        (.):

2013-03-08  Geoffrey Garen  <ggaren@apple.com>

        Some StringHasher tests are broken because of missing null termination
        https://bugs.webkit.org/show_bug.cgi?id=111284

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringHasher.cpp:
        (TestWebKitAPI): Added null termination since C strings are null-terminated.
        (TestWebKitAPI::TEST): Removed #ifdef's that disabled this testing since
        the bug caught by it is now fixed.

2013-03-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145200.
        http://trac.webkit.org/changeset/145200
        https://bugs.webkit.org/show_bug.cgi?id=112063

        Broke a couple of unit tests (Requested by zdobersek on
        #webkit).

        * Scripts/webkitperl/FeatureList.pm:

2013-03-11  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] WebKit2-only build fails
        https://bugs.webkit.org/show_bug.cgi?id=112033

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Split the list of files the docs-build.stamp target depends on into the
        generic part, WebKit1-specific part and WebKit2-specific part.
        * TestWebKitAPI/GNUmakefile.am: The TestGtk executable should not link agains libwebkitgtk
        as it is not WebKit1-specific, but should rather link to libWebCore.la and libWebCoreGtk.la
        directly.

2013-03-11  Dima Gorbik  <dgorbik@apple.com>

        Adding myself to the committers list.

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py:

2013-03-11  Jeff Rogers  <jrogers@rim.com>

        [BlackBerry] Disable MathML support
        https://bugs.webkit.org/show_bug.cgi?id=111929

        Reviewed by Rob Buis.

        * Scripts/webkitperl/FeatureList.pm:

2013-03-11  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][GTK][WKTR] Regression(r145231): Undefined symbol in libTestRunnerInjectedBundle.so
        https://bugs.webkit.org/show_bug.cgi?id=111970

        Reviewed by Chris Fleizach.

        Provide dummy implementation for AccessibilityUIElement::supportedActions() in ATK
        or libTestRunnerInjectedBundle.so cannot be loaded in EFL / GTK otherwise, due to
        undefined symbol.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::supportedActions):
        (WTR):

2013-03-11  Chris Hopman  <cjhopman@chromium.org>

        [chromium] Android apk targets should depend directly on Java library targets
        https://bugs.webkit.org/show_bug.cgi?id=111746

        Reviewed by Eric Seidel.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        Make DumpRenderTree_apk depend directly on base_java and net_java.
        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:
        Make TestWebKitAPI_apk depend directly on base_java.

2013-03-11  Jochen Eisinger  <jochen@chromium.org>

        [chromium] remove obsolete user gesture methods from WebFrame
        https://bugs.webkit.org/show_bug.cgi?id=111696

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp:
        (WebTestRunner::TestPlugin::handleInputEvent):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:

2013-03-10  Silvia Pfeiffer  <silviapf@chromium.org>

        Unreviewed, add myself to commiters.py.

        * Scripts/webkitpy/common/config/committers.py:

2013-03-08  Julie Parent  <jparent@chromium.org>

        Cleanup: Remove dead code.
        https://bugs.webkit.org/show_bug.cgi?id=111900

        Reviewed by Dirk Pranke.
        
        Treemap overrides a global function that used to be in 
        dashboard_base, but was removed months ago in
        https://bugs.webkit.org/show_bug.cgi?id=99246, so this code has
        no caller. 

        * TestResultServer/static-dashboards/treemap.html:

2013-03-08  Harald Alvestrand  <hta@chromium.org>

        Implemented new API for RTCStatsReport object.
        https://bugs.webkit.org/show_bug.cgi?id=110333

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCPeerConnectionHandler.cpp:
        (WebTestRunner::MockWebRTCPeerConnectionHandler::getStats):

2013-03-08  Dirk Pranke  <dpranke@chromium.org>

        [chromium] use custom freetype on linux asan builds again
        https://bugs.webkit.org/show_bug.cgi?id=111884

        Reviewed by Tony Chang.

        We no longer need the workaround after chromium r186540.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2013-03-08  Ryosuke Niwa  <rniwa@webkit.org>

        Warning about the user not having edit rights on Bugzilla is confusing new contributors
        https://bugs.webkit.org/show_bug.cgi?id=111798

        Reviewed by Dirk Pranke.

        Don't scare people by the warning. Instead, tell them to ignore it if they don't have EditBugs privileges.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:

2013-03-08  James Robinson  <jamesr@chromium.org>

        [chromium] Remove WebLayerTreeViewClient and WebLayerTreeView::Settings
        https://bugs.webkit.org/show_bug.cgi?id=111632

        Reviewed by Adrienne Walker.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::initializeLayerTreeView):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-03-08  Benjamin Poulain  <benjamin@webkit.org>

        [Mac] Add a feature flag for 'view-mode' Media Feature, disable it on Mac
        https://bugs.webkit.org/show_bug.cgi?id=111297

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setViewModeMediaFeature):

2013-03-08  Chris Fleizach  <cfleizach@apple.com>

        [Mac] [WK2] platform/mac/accessibility/press-action-is-first.html fails
        https://bugs.webkit.org/show_bug.cgi?id=111814

        Reviewed by Ryosuke Niwa.

        Add the needed supportedActions() attribute to WKTestRunner.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::supportedActions):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::supportedActions):

2013-03-08  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL] Memory leak at WKViewClientWebProcessCallbacks API test
        https://bugs.webkit.org/show_bug.cgi?id=111851

        Reviewed by Kenneth Rohde Christiansen.

        * TestWebKitAPI/Tests/WebKit2/efl/WKViewClientWebProcessCallbacks.cpp:
        (TestWebKitAPI::TEST):

            Fixed WKURLRef instance leaking.

2013-03-08  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL] [WK2] Some authentication tests fail in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=106407

        Reviewed by Kenneth Rohde Christiansen.

        Add patch from upstream for libsoup 2.40 to fix several authentication
        test cases.

        * efl/jhbuild.modules:
        * efl/patches/libsoup-2.40-auth-fix.patch: Added.

2013-03-08  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Enable Web Audio in development builds
        https://bugs.webkit.org/show_bug.cgi?id=111831

        Reviewed by Philippe Normand.

        Web Audio is already quite well supported on the GTK port but still has a few issues
        that must be addressed before it is enabled by default. Despite that it should be enabled
        in development builds just so we are up-to-date with future feature infrastructure changes.
        The Web Audio-related layout tests are not run yet due to missing support in DRT/WKTR, but
        that's an obvious goal before enabling the feature in release builds.

        * Scripts/webkitperl/FeatureList.pm:

2013-03-07  Jochen Eisinger  <jochen@chromium.org>

        [chromium] delay clearing the TestRunners until the main view was deleted
        https://bugs.webkit.org/show_bug.cgi?id=111823

        Reviewed by Eric Seidel.

        During WebViewHost::shutdown, we navigate the WebView to about:blank.
        This may call into the test runners which assume that the delegate is
        always non-NULL.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::~TestShell):

2013-03-07  Alan Cutter  <alancutter@chromium.org>

        Sheriffbot whois command can't search by full name
        https://bugs.webkit.org/show_bug.cgi?id=111825

        Reviewed by Eric Seidel.

        Allowed multiple arguments to Sheriffbot's whois command.
        Updated test expectations.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Whois.execute):
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_whois):

2013-03-07  Nils Barth  <nbarth@chromium.org>

        Add Nils Barth and Koji Hara to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=111806

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/config/committers.py:

2013-03-07  Glenn Adams  <glenn@skynav.com>

        run-pert-tests should have a --test-runner-count option
        https://bugs.webkit.org/show_bug.cgi?id=111726

        Reviewed by Ryosuke Niwa.

        Add --test-runner-count option to run-perf-tests, with default value of 4.
        This option allows command line configuration of the number of times to invoke
        the test runner (serially, not in parallel) when running a specific test in
        a test set.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest): Add DEFAULT_TEST_RUNNER_COUNT constant.
        (PerfTest.__init__): Rename process_run_count to test_runner_count (throughout).
        (PerfTest.run): Rename process_run_count to test_runner_count.
        (SingleProcessPerfTest.__init__): Add test_runner_count optional argument.
        (ChromiumStylePerfTest.__init__): Add test_runner_count optional argument.
        (ReplayPerfTest.__init__): Add test_runner_count optional argument.
        (PerfTestFactory.create_perf_test): Add test_runner_count optional argument.
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args): Add '--test-runner-count' option.
        (PerfTestsRunner._collect_tests): Use test_runner_count when creating PerfTest.
        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        (MainTest._test_run_with_json_output): Add optional compare_logs argument.
        (MainTest.test_run_with_repeat):
        (MainTest.test_run_with_test_runner_count): Add new test for test-runner-count option semantics.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.test_default_args): Add test for default option argument values.
        (MainTest.test_parse_args): Add test for test-runner-count option parsing.

2013-03-07  Christian Biesinger  <cbiesinger@chromium.org>

        Add myself to reviewers.py
        https://bugs.webkit.org/show_bug.cgi?id=111757

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/config/committers.py:

2013-03-07  Glenn Adams  <glenn@skynav.com>

        run-perf-tests should have a --repeat option
        https://bugs.webkit.org/show_bug.cgi?id=100030

        Reviewed by Ryosuke Niwa.

        Add --repeat option to run-perf-tests, with default value of 1. When greater
        than 1, runs test set specified number of times. Note that multiple runs are
        not aggregated for statistical purposes.

        Incidentally fixed typo: s/suceeds/succeeds/.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args): Add repeat option.
        (PerfTestsRunner.run): Add outer repeat loop.
        (PerfTestsRunner._generate_results): Split from original _generate_and_show_results.
        (PerfTestsRunner._upload_and_show_results): Split from original _generate_and_show_results.
        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        (MainTest._test_run_with_json_output): Add repeat optional argument for generating expected logs. Fix typo.
        (MainTest._test_run_with_json_output.mock_upload_json): Fix typo.
        (MainTest.test_run_with_json_output): Fix typo.
        (MainTest.test_run_with_description): Fix typo.
        (MainTest.test_run_respects_no_results): Fix typo.
        (MainTest.test_run_with_slave_config_json): Fix typo.
        (MainTest.test_run_with_multiple_repositories): Fix typo.
        (MainTest.test_run_with_upload_json): Fix typo.
        (MainTest.test_run_with_upload_json_should_generate_perf_webkit_json): Fix typo.
        (MainTest.test_run_with_repeat): Added new test for repeat count semantics.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.test_parse_args): Add test for repeat option parsing.

2013-03-07  Julie Parent  <jparent@chromium.org>

        showAllRuns checkbox no longer works on the stats dashboard
        https://bugs.webkit.org/show_bug.cgi?id=111673

        Reviewed by Ojan Vafai.

        Stats dashboard does not have any DB_SPECIFIC_INVALIDATING_PARAMETERS,
        so we were trying to index into an undefined object.
        
        * TestResultServer/static-dashboards/dashboard_base.js:
        (invalidateQueryParameters):

2013-03-07  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Update #include for WebStorageNamespace.h
        https://bugs.webkit.org/show_bug.cgi?id=111748

        Reviewed by Adam Barth.

        In anticipation of removing
        WK/chromium/public/WebStorageNamespace.h (once downstream
        references have been updated)

        * DumpRenderTree/chromium/WebViewHost.cpp:

2013-03-07  Dirk Pranke  <dpranke@chromium.org>

        run-perf-tests fails due to svn_revision not working on a pure git clone
        https://bugs.webkit.org/show_bug.cgi?id=110839

        Reviewed by Ryosuke Niwa.

        Previously we would call git svn find-rev to look up the commit for
        a given revision, and that'll hang in a pure git checkout.

        This patch changes the way we look up svn revisions in a git
        repository to use git log --grep 'git-svn-id', which is much faster
        than grepping ourselves. It also renames timestamp_of_latest_commit()
        to timestamp_of_revision() in order to accurately reflect what
        the method is doing. Note that this patch only changes the logic
        inside latest_revision() and svn_revision(). I'll file a separate
        bug to change git_commit_from_svn_revision().

        This patch also contains some fixes to unit tests that had bit-rotted
        or were otherwise fragile, so that test-webkitpy --all would pass
        cleanly, and a fix to outputcapture so that
        test-webkitpy -p would work correctly again.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.svn_revision):
        (Git.timestamp_of_revision):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.svn_revision):
        (SCM.timestamp_of_revision):
        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        (MockSCM.timestamp_of_revision):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (_shared_test_commit_with_message):
        (test_commit_without_authorization):
        (test_timestamp_of_revision):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.timestamp_of_revision):
        * Scripts/webkitpy/common/system/outputcapture.py:
          Importing unittest2 directly may not be safe if this module is
          imported before the autoinstaller gets a chance to set things up
          properly. We don't actually need unittest2 here.
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._generate_results_dict):

2013-03-07  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL] Bump libsoup dependency to 2.40.3 to fix regressions
        https://bugs.webkit.org/show_bug.cgi?id=111756

        Reviewed by Kenneth Rohde Christiansen.

        Bump libsoup to v2.40.3 to fix the regressions introduced by
        previous v2.40.0 bump.

        * efl/jhbuild.modules:

2013-03-07  Roger Fong  <roger_fong@apple.com>

        Re-enable Win EWS tests.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-03-07  Dirk Pranke  <dpranke@chromium.org>

        [nrwt] handle corrupt http server pid files cleanly
        https://bugs.webkit.org/show_bug.cgi?id=111628

        Reviewed by Eric Seidel.

        If the pid file from a previous http server is corrupt for some
        reason, NRWT will just raise errors and not clean it up or recover.
        This patch fixes that to at least delete the pid file and
        not throw; not that we may still have stale http servers left on
        the system, since there's no way to know which pid to kill if
        the file was corrupted.

        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase.start):
        (HttpServerBase.stop):
        (HttpServerBase._remove_pid_file):
        * Scripts/webkitpy/layout_tests/servers/http_server_base_unittest.py: Added.
        (TestHttpServerBase):
        (TestHttpServerBase.test_corrupt_pid_file):

2013-03-07  Chris Fleizach  <cfleizach@apple.com>

        AX: Can't activate links with VoiceOver in Safari
        https://bugs.webkit.org/show_bug.cgi?id=111755

        Reviewed by Tim Horton.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (supportedActionsCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::supportedActions):

2013-03-07  Roger Fong  <roger_fong@apple.com>

        Windows debug layout tests are crashing like crazy again.
        Disable tests on Win EWS bots temporarily.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-03-07  Roger Fong  <roger_fong@apple.com>

        Make EWS bots build and test in release.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):

2013-03-07  Jochen Eisinger  <jochen@chromium.org>

        [chromium] don't track the top loading frame if no layout test is currently running
        https://bugs.webkit.org/show_bug.cgi?id=111716

        Reviewed by Kentaro Hara.

        In DRT, we synchronously stop the test and start loading the next test
        URL. However, in content_shell, this happens asynchronously. It's
        important that the top loading frame is not changed due to stray
        navigation events before the next test starts.

        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::setTopLoadingFrame):

2013-03-06  Julie Parent  <jparent@chromium.org>

        Dashboard cleanup: Move all dashboard ui related code into ui.js.
        https://bugs.webkit.org/show_bug.cgi?id=111621

        Reviewed by Ojan Vafai.
        
        Creates ui.js, a package for the common UI code the various
        dashboards use. HTML generation is now in the ui.html namespace
        and popup handling is in ui.popup.
        Also moves the event listening for popups to ui.popup.show and
        removes it on ui.popup.hid rather than having listener always
        around.

        * TestResultServer/static-dashboards/aggregate_results.html:
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (showPopupForBuild):
        (htmlForNavBar):
        (generatePageForIndividualTests.if):
        (generatePageForIndividualTests):
        * TestResultServer/static-dashboards/flakiness_dashboard_embedded_unittests.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        * TestResultServer/static-dashboards/run-embedded-unittests.html:
        * TestResultServer/static-dashboards/run-unittests.html:
        * TestResultServer/static-dashboards/timeline_explorer.html:
        * TestResultServer/static-dashboards/treemap.html:
        * TestResultServer/static-dashboards/ui.js: Added.
        (.):

2013-03-06  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Missing implementation of AccessibilityControllerEfl and AccessibilityUIElementEfl files
        https://bugs.webkit.org/show_bug.cgi?id=110584

        Reviewed by Gyuyoung Kim.

        Adds missing implementation of AccessibilityControllerEfl
        and AccessibilityUIElementEfl files. Modify DumpRenderTreeChrome
        so that it can make accessibilityController as a js object.

        * DumpRenderTree/AccessibilityController.h:
        (AccessibilityController):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/atk/AccessibilityControllerAtk.cpp:
        (AccessibilityController::childElementById): Moved declaration to base class.
        Implementation can be shared among other ports.
        * DumpRenderTree/efl/AccessibilityControllerEfl.cpp: Copied from Tools/DumpRenderTree/gtk/AccessibilityControllerGtk.cpp.
        (AccessibilityController::focusedElement):
        (AccessibilityController::rootElement):
        (AccessibilityController::accessibleElementById):
        * DumpRenderTree/efl/AccessibilityUIElementEfl.cpp: Copied from Tools/DumpRenderTree/atk/AccessibilityControllerAtk.cpp.
        (AccessibilityUIElement::helpText):
        * DumpRenderTree/efl/CMakeLists.txt:
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::DumpRenderTreeChrome):
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        (DumpRenderTreeChrome::onWindowObjectCleared):
        (DumpRenderTreeChrome::accessibilityController):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):
        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:

2013-03-06  Benjamin Poulain  <benjamin@webkit.org>

        WebKitTestRunner needs layoutTestController.elementDoesAutoCompleteForElementWithId
        https://bugs.webkit.org/show_bug.cgi?id=42696

        Reviewed by Andreas Kling.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunnerQt):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/wx/TestRunnerWx.cpp:

2013-03-06  Roger Fong  <roger_fong@apple.com>

        Re-enable WinEWS test and decrease iterations before clean build back to 10.

        * EWSTools/start-queue-win.sh:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-03-06  Manuel Rego Casasnovas  <rego@igalia.com>

        [WK2][GTK] Fix unit test WebKit2APITests/WebKitWebView/mouse-target
        https://bugs.webkit.org/show_bug.cgi?id=82866

        Reviewed by Martin Robinson.

        * Scripts/run-gtk-tests:
        (TestRunner): Unflag WebKit2APITests/WebKitWebView/mouse-target test as
        it is passing now.

2013-03-06  Julie Parent  <jparent@chromium.org>

        Dashboard cleanup: remove dashboard time logging.
        https://bugs.webkit.org/show_bug.cgi?id=111608

        Reviewed by Dirk Pranke.

        Remove logTime.  It was never accurate, and the dev tools
        have better ways to measure this if anyone cares to look
        into dashboard perf.
        
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (processTestRunsForBuilder):
        (appendHTML):

2013-03-06  Tony Chang  <tony@chromium.org>

        [chromium] making DumpRenderTree_resources a separate bundle breaks xcode
        https://bugs.webkit.org/show_bug.cgi?id=111509

        Reviewed by Dirk Pranke.

        Add DumpRenderTree.pak to DumpRenderTree.app again.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2013-03-06  Jochen Eisinger  <jochen@chromium.org>

        [chromium] introduce WebUserGestureIndicator
        https://bugs.webkit.org/show_bug.cgi?id=111531

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createView):

2013-03-06  Alan Cutter  <alancutter@chromium.org>

        sheriffbot roll-chromium-deps shouldn't create a bug with None as the new revision.
        https://bugs.webkit.org/show_bug.cgi?id=73482

        Reviewed by Ryosuke Niwa.

        Added input checking to the UpdateChromiumDEPS step.
        Removed the default use of LKGR when the revision input is invalid. "LKGR" must be explicitly given instead.

        * Scripts/webkitpy/tool/bot/irc_command.py: Updated input validation and error message handling.
        (RollChromiumDEPS):
        (RollChromiumDEPS._parse_args):
        (RollChromiumDEPS.execute):
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py: Updated unit tests.
        (IRCCommandTest.test_roll_chromium_deps):
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py: Updated unit tests.
        (IRCBotTest.test_roll_chromium_deps_to_lkgr):
        * Scripts/webkitpy/tool/commands/roll_unittest.py: Updated unit tests.
        * Scripts/webkitpy/tool/steps/updatechromiumdeps.py: Added input validation and added new error handling cases. Changed the logic of deciding to use LKGR to be only when the input is "LKGR".
        (UpdateChromiumDEPS._fetch_last_known_good_revision):
        (UpdateChromiumDEPS):
        (UpdateChromiumDEPS._parse_revision_number):
        (UpdateChromiumDEPS._validate_revisions):
        (UpdateChromiumDEPS.run):
        * Scripts/webkitpy/tool/steps/updatechromiumdeps_unittest.py: Added unit tests.
        (UpdateChromiumDEPSTest):
        (UpdateChromiumDEPSTest.test_parse_revision_number):
        * Scripts/webkitpy/tool/commands/roll.py: Updated help text.
        (RollChromiumDEPS):
        (PostChromiumDEPSRoll):

2013-03-06  Andras Becsi  <andras.becsi@digia.com>

        [Qt][MiniBrowser] Touch mocking broken for chained getures
        https://bugs.webkit.org/show_bug.cgi?id=111430

        Reviewed by Jocelyn Turcotte.

        Make it possible again to use touch mocking to test gesture chains
        like pan->pinch->pan->pinch without lifting the primary "finger".
        For this to work we need to track the pressed mouse buttons and
        only synthesize touch release events when the ctrl key is released
        if no mouse button is pressed. Else the pressed mouse button(s)
        should result in a stationary touch point in a touch update event.
        Since it has been fixed in Qt 5.0.1 use QGuiApplication::keyboardModifiers()
        to check for the state of the ctrl key modifier instead of getting
        it from the mouse events.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication):
        (MiniBrowserApplication::notify):

2013-03-05  Dirk Pranke  <dpranke@chromium.org>

        [chromium] don't use custom freetype on linux asan for now
        https://bugs.webkit.org/show_bug.cgi?id=111516

        Unreviewed, build fix.

        Turns out the custom lib is getting picked up by other binaries
        on our bot, which is bad.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2013-03-05  Dirk Pranke  <dpranke@chromium.org>

        [chromium] making DumpRenderTree_resources a separate bundle breaks xcode
        https://bugs.webkit.org/show_bug.cgi?id=111509

        Unreviewed, build fix.

        Actually comment out the flag :(.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2013-03-05  Dirk Pranke  <dpranke@chromium.org>

        [chromium] making DumpRenderTree_resources a separate bundle breaks xcode
        https://bugs.webkit.org/show_bug.cgi?id=111509

        Unreviewed, build fix.

        r144863 appears to have broken the xcode build; I'm temporarily
        trying this instead, and if this doesn't work, I'll revert the
        other changes.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2013-03-05  Dirk Pranke  <dpranke@chromium.org>

        [chromium] build a DumpRenderTree.pak even on windows
        https://bugs.webkit.org/show_bug.cgi?id=111504

        Reviewed by Tony Chang.

        The Chromium Aura build uses the default theme to draw
        controls, and that theme requires the ui ResourceBundle
        to be initialized. On every other platform, we build
        a DumpRenderTree.pak that works for this, but on Windows we
        still compile the resources directly into DRT. As a first step,
        let's build the pak file. I will then need to land a patch
        in Chromium to actually load it. Then I can go back and move
        the resources over to just use the .pak file and no longer need
        the .rc's.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2013-03-05  Julie Parent  <jparent@chromium.org>
        Dashboard cleanup: move string utilities into their own namespace.
        
        https://bugs.webkit.org/show_bug.cgi?id=111485

        Reviewed by Ojan Vafai.
        
        One of many pieces to clean up dashboard_base.
        
        Moves string utility functions into separate file (string.js) and into their own namespace rather than cluttering up the global scope.

        * TestResultServer/static-dashboards/aggregate_results.html:
        * TestResultServer/static-dashboards/dashboard_base.js:
        (isTreeMap):
        (isFlakinessDashboard):
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (determineWKPlatform):
        (chromiumPlatform):
        (platformAndBuildType):
        (substringList):
        (individualTestsForSubstringList):
        (filterBugs):
        (populateExpectationsData):
        (processMissingTestsWithExpectations):
        (processMissingAndExtraExpectations):
        (htmlForSingleTestRow):
        (.dummyNode.onload):
        (expectationsTitle):
        * TestResultServer/static-dashboards/run-embedded-unittests.html:
        * TestResultServer/static-dashboards/run-unittests.html:
        * TestResultServer/static-dashboards/string.js: Added.
        * TestResultServer/static-dashboards/timeline_explorer.html:
        * TestResultServer/static-dashboards/treemap.html:

2013-03-05  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Build break with latest EFL libraries
        https://bugs.webkit.org/show_bug.cgi?id=111028

        Reviewed by Dirk Pranke.

        * MiniBrowser/efl/CMakeLists.txt: Added ECORE_XXX_INCLUDE_DIRS.
        * TestWebKitAPI/PlatformEfl.cmake: Ditto.
        * WebKitTestRunner/PlatformEfl.cmake: Ditto.

2013-03-05  Roger Fong  <roger_fong@apple.com>

        Increase number of WinEWS iterations to 20.
        Don't reboot after each iteration set.
        Make EWS bots just build temporarily so that the queue catches up again.

        * EWSTools/start-queue-win.sh:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-03-04  James Robinson  <jamesr@chromium.org>

        [chromium] Move check for threaded compositing from WebCompositorSupport to Platform
        https://bugs.webkit.org/show_bug.cgi?id=111386

        Reviewed by Adrienne Walker.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):

2013-03-05  Min Qin  <qinmin@chromium.org>

        Copy dictionary to the external storage before running layout test on android
        https://bugs.webkit.org/show_bug.cgi?id=111480

        Reviewed by Adam Barth.

        TestWebKitPlatformSupport now needs to read an external dictionary file.
        This file does not exist on the device. We need to copy it before running layout tests.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver._setup_md5sum_and_push_data_if_needed):
        (ChromiumAndroidDriver._push_platform_resources):

2013-03-05  Dirk Pranke  <dpranke@chromium.org>

        [chromium] DRT crashes in an Aura/Win build
        https://bugs.webkit.org/show_bug.cgi?id=111394

        Reviewed by Tony Chang.

        When building (and running) with use_aura=1, we assume that
        we're using the default theme engine, but DRT creates the
        DRTWin theme engine and overwrites the default, leading to crashes
        in basically every test from the mismatch.

        This fix gets us down to at least "lots of crashes" :).

        * DumpRenderTree/chromium/TestShellWin.cpp:
        (platformInit):

2013-03-05  Eric Seidel  <eric@webkit.org>

        Add html-parser-threaded perf test now that the threaded parser is enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=111200

        Reviewed by Ryosuke Niwa.

        Had to teach run-perf-tests to ignore one more warning.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest):

2013-03-05  Jochen Eisinger  <jochen@chromium.org>

        Update list of builders for test results server
        https://bugs.webkit.org/show_bug.cgi?id=111166

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/builders.jsonp:

2013-03-05  Martin Robinson  <mrobinson@igalia.com> and Tomas Popela  <tpopela@redhat.com>

        [GTK] Move basic dependency installation to a script
        https://bugs.webkit.org/show_bug.cgi?id=110692

        Reviewed by Gustavo Noronha Silva.

        * gtk/install-dependencies: Added. A Script which installs all dependencies
        necessary for building for Debian-based distributions and Fedora.

2013-03-05  James Robinson  <jamesr@chromium.org>

        Chromium DumpRenderTree dumps a core every time it's run (Linux/Debug)
        https://bugs.webkit.org/show_bug.cgi?id=111440

        Reviewed by Adrienne Walker.

        Remove unnecessary WebCompositorSupport::shutdown call

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):

2013-03-05  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed build fix.

        * GNUmakefile.am: add generate-feature-defines-files scripts to EXTRA_DIST.

2013-03-05  Andras Becsi  <andras.becsi@digia.com>

        [Qt][MiniBrowser] Improve the update of touch indicators
        https://bugs.webkit.org/show_bug.cgi?id=111429

        Reviewed by Jocelyn Turcotte.

        MiniBrowserApplication::sendTouchEvent sends an empty list
        to BrowserWindow::updateVisualMockTouchPoints if the control
        button is released, in which case the touch indicators should
        be hidden so that we never end up with a leftover indicator
        sticking on the screen.
        This patch also simplifies the lookup of the indicator items by
        replacing the findChild search in the item tree with a QHash
        that stores the touch ID's and the pointers to the corresponding
        indicator items.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::updateVisualMockTouchPoints):
        * MiniBrowser/qt/BrowserWindow.h:
        (BrowserWindow):

2013-03-05  Tim Horton  <timothy_horton@apple.com>, Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [WK2] WTR needs an implementation of setAsynchronousSpellCheckingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=81042

        Reviewed by Enrica Casucci.

        Add setAsynchronousSpellCheckingEnabled implementation for
        WebKitTestRunner to have the possibility to test asynchronous
        spell checking implementation from bug 109577.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setAsynchronousSpellCheckingEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2013-03-05  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Add the getStreamById method on RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=111311

        Reviewed by Adam Barth.

        Changing mocks to be more realistic.

        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCPeerConnectionHandler.cpp:
        (WebTestRunner::MockWebRTCPeerConnectionHandler::addStream):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::removeStream):
        * DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.cpp:
        (WebTestRunner::WebUserMediaClientMock::requestUserMedia):

2013-03-05  Jochen Eisinger  <jochen@chromium.org>

        Add content shell bots to garden-o-matic for general failurse
        https://bugs.webkit.org/show_bug.cgi?id=111168

        Reviewed by Adam Barth.

        All but the WebKit (Content Shell) Android bot is stable enough. While
        they're not green yet, there must not be any non-layout test failures on
        them.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        (.):

2013-03-04  Jochen Eisinger  <jochen@chromium.org>

        [chromium] remove deprecated WebTestRunner::setFocus API
        https://bugs.webkit.org/show_bug.cgi?id=111354

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestDelegate):

2013-03-04  Jochen Eisinger  <jochen@chromium.org>

        Run the bindings generation tests on EWS and CQ bots
        https://bugs.webkit.org/show_bug.cgi?id=111358

        Reviewed by Adam Barth.

        The tests are super fast and not flaky.

        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.run_bindings_tests_command):
        * Scripts/webkitpy/common/config/ports_mock.py:
        (MockPort.run_webkit_tests_command):
        (MockPort):
        (MockPort.run_bindings_tests_command):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        (RunTestsTest.test_webkit_run_unit_tests):
        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2013-03-04  Eric Seidel  <eric@webkit.org>

        run-webkit-tests should support --profile and --profiler= just like run-perf-tests does
        https://bugs.webkit.org/show_bug.cgi?id=111384

        Reviewed by Ryosuke Niwa.

        Sometimes I want to know why various LayoutTests are slow
        without having to convert them into PerformanceTests in order
        to use our fancy profiling.  The Driver already knows how to
        do the right thing, we just need to expose the options to the user.

        Handling of these options is already unittested in the perftests_unittest.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2013-03-04  Alan Cutter  <alancutter@chromium.org>

        check-webkit-style says "Have to enable auto props in the subversion config file"
        https://bugs.webkit.org/show_bug.cgi?id=107724

        Reviewed by Tony Chang.

        Added a standard svn config file for WebKit developers to use.
        Updated the style and commit queue bot build scripts to load this file.

        * EWSTools/GoogleComputeEngine/build-commit-queue.sh:
        * EWSTools/GoogleComputeEngine/build-feeder-style-sheriffbot.sh:
        * EWSTools/configure-svn-config.sh: Copied from Tools/EWSTools/GoogleComputeEngine/build-commit-queue.sh.
        * svn-config: Added.

2013-03-04  James Robinson  <jamesr@chromium.org>

        [chromium] Switch to new webkit_support::CreateLayerTreeView interface
        https://bugs.webkit.org/show_bug.cgi?id=111285

        Reviewed by Adrienne Walker.

        This removes the need for WebCompositorSupport::initialize and exposes
        slightly fewer entry points across the repository boundary.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::webCompositorThread):
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::initializeLayerTreeView):

2013-03-04  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Get rid of some AppleWin VS2010 build warnings.

        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginCommon.props:

2013-03-04  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r144657): Fix DumpRenderTree build failure on iOS

            Tools/DumpRenderTree/ios/AccessibilityControllerIOS.mm:95:29: error: class method '+stringWithJSStringRef:' not found (return type defaults to 'id') [-Werror,-Wobjc-method-access]
                NSString *idAttribute = [NSString stringWithJSStringRef:idAttributeRef];
                                        ^         ~~~~~~~~~~~~~~~~~~~~~
            1 error generated.

        * DumpRenderTree/ios/AccessibilityControllerIOS.mm: Import
        AccessibilityCommonMac.h.

2013-03-04  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] Add callbacks to the WKViewClient to handle Web Process crash and relaunch
        https://bugs.webkit.org/show_bug.cgi?id=109828

        Reviewed by Kenneth Rohde Christiansen.

        Added API test for newly added Web Process crash and Web Process relaunch WKViewClient
        callbacks.

        * TestWebKitAPI/CMakeLists.txt:

            Tests located in 'TestWebKitAPI/Tests/WebKit2' subdirectories are also
            considered.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewClientWebProcessCallbacks.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::webProcessCrashed):
        (TestWebKitAPI::webProcessDidRelaunch):
        (TestWebKitAPI::setViewClient):
        (TestWebKitAPI::TEST):

2013-03-04  Chris Fleizach  <cfleizach@apple.com>

        AX: Upstream iOS Accessibility DumpRenderTree changes
        https://bugs.webkit.org/show_bug.cgi?id=111220

        Reviewed by David Kilzer.

        Upstream the iOS changes for accessibility in DumpRenderTree.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (headerElementAtIndexCallback):
        (linkedElementCallback):
        (elementsForRangeCallback):
        (increaseTextSelectionCallback):
        (decreaseTextSelectionCallback):
        (assistiveTechnologySimulatedFocusCallback):
        (stringForSelectionCallback):
        (getIPhoneLabelCallback):
        (getIPhoneHintCallback):
        (getIPhoneValueCallback):
        (getIPhoneIdentifierCallback):
        (getIPhoneTraitsCallback):
        (getIPhoneIsElementCallback):
        (getIPhoneElementTextPositionCallback):
        (getIPhoneElementTextLengthCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ios: Added.
        * DumpRenderTree/ios/AccessibilityControllerIOS.mm: Added.
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::~AccessibilityController):
        (AccessibilityController::elementAtPoint):
        (AccessibilityController::focusedElement):
        (AccessibilityController::rootElement):
        (findAccessibleObjectById):
        (AccessibilityController::accessibleElementById):
        (AccessibilityController::setLogFocusEvents):
        (AccessibilityController::setLogScrollingStartEvents):
        (AccessibilityController::setLogValueChangeEvents):
        (AccessibilityController::setLogAccessibilityEvents):
        (AccessibilityController::addNotificationListener):
        (AccessibilityController::removeNotificationListener):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: Added.
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::~AccessibilityUIElement):
        (concatenateAttributeAndValue):
        (AccessibilityUIElement::iphoneLabel):
        (AccessibilityUIElement::iphoneHint):
        (AccessibilityUIElement::iphoneValue):
        (AccessibilityUIElement::iphoneIdentifier):
        (AccessibilityUIElement::iphoneTraits):
        (AccessibilityUIElement::iphoneIsElement):
        (AccessibilityUIElement::iphoneElementTextPosition):
        (AccessibilityUIElement::iphoneElementTextLength):
        (AccessibilityUIElement::url):
        (AccessibilityUIElement::x):
        (AccessibilityUIElement::y):
        (AccessibilityUIElement::width):
        (AccessibilityUIElement::height):
        (AccessibilityUIElement::clickPointX):
        (AccessibilityUIElement::clickPointY):
        (AccessibilityUIElement::getChildren):
        (AccessibilityUIElement::getChildrenWithRange):
        (AccessibilityUIElement::childrenCount):
        (AccessibilityUIElement::elementAtPoint):
        (AccessibilityUIElement::indexOfChild):
        (AccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElement::headerElementAtIndex):
        (AccessibilityUIElement::linkedElement):
        (AccessibilityUIElement::linkedUIElementAtIndex):
        (AccessibilityUIElement::ariaOwnsElementAtIndex):
        (AccessibilityUIElement::ariaFlowToElementAtIndex):
        (AccessibilityUIElement::disclosedRowAtIndex):
        (AccessibilityUIElement::selectedRowAtIndex):
        (AccessibilityUIElement::rowAtIndex):
        (AccessibilityUIElement::titleUIElement):
        (AccessibilityUIElement::parentElement):
        (AccessibilityUIElement::disclosedByRow):
        (AccessibilityUIElement::increaseTextSelection):
        (AccessibilityUIElement::decreaseTextSelection):
        (AccessibilityUIElement::stringForSelection):
        (AccessibilityUIElement::stringForRange):
        (AccessibilityUIElement::attributedStringForRange):
        (AccessibilityUIElement::attributedStringRangeIsMisspelled):
        (AccessibilityUIElement::elementsForRange):
        (AccessibilityUIElement::getLinkedUIElements):
        (AccessibilityUIElement::getDocumentLinks):
        (AccessibilityUIElement::attributesOfLinkedUIElements):
        (AccessibilityUIElement::attributesOfDocumentLinks):
        (AccessibilityUIElement::attributesOfChildren):
        (AccessibilityUIElement::allAttributes):
        (AccessibilityUIElement::stringAttributeValue):
        (AccessibilityUIElement::isPressActionSupported):
        (AccessibilityUIElement::isIncrementActionSupported):
        (AccessibilityUIElement::isDecrementActionSupported):
        (AccessibilityUIElement::boolAttributeValue):
        (AccessibilityUIElement::isAttributeSettable):
        (AccessibilityUIElement::isAttributeSupported):
        (AccessibilityUIElement::parameterizedAttributeNames):
        (AccessibilityUIElement::role):
        (AccessibilityUIElement::subrole):
        (AccessibilityUIElement::roleDescription):
        (AccessibilityUIElement::title):
        (AccessibilityUIElement::description):
        (AccessibilityUIElement::orientation):
        (AccessibilityUIElement::stringValue):
        (AccessibilityUIElement::language):
        (AccessibilityUIElement::helpText):
        (AccessibilityUIElement::intValue):
        (AccessibilityUIElement::minValue):
        (AccessibilityUIElement::maxValue):
        (AccessibilityUIElement::valueDescription):
        (AccessibilityUIElement::insertionPointLineNumber):
        (AccessibilityUIElement::isEnabled):
        (AccessibilityUIElement::isRequired):
        (AccessibilityUIElement::isFocused):
        (AccessibilityUIElement::isSelected):
        (AccessibilityUIElement::isExpanded):
        (AccessibilityUIElement::isChecked):
        (AccessibilityUIElement::hierarchicalLevel):
        (AccessibilityUIElement::ariaIsGrabbed):
        (AccessibilityUIElement::ariaDropEffects):
        (AccessibilityUIElement::lineForIndex):
        (AccessibilityUIElement::boundsForRange):
        (AccessibilityUIElement::attributesOfColumnHeaders):
        (AccessibilityUIElement::attributesOfRowHeaders):
        (AccessibilityUIElement::attributesOfColumns):
        (AccessibilityUIElement::attributesOfRows):
        (AccessibilityUIElement::attributesOfVisibleCells):
        (AccessibilityUIElement::attributesOfHeader):
        (AccessibilityUIElement::rowCount):
        (AccessibilityUIElement::columnCount):
        (AccessibilityUIElement::indexInTable):
        (AccessibilityUIElement::rowIndexRange):
        (AccessibilityUIElement::columnIndexRange):
        (AccessibilityUIElement::cellForColumnAndRow):
        (AccessibilityUIElement::selectedTextRange):
        (AccessibilityUIElement::assistiveTechnologySimulatedFocus):
        (AccessibilityUIElement::setSelectedTextRange):
        (AccessibilityUIElement::increment):
        (AccessibilityUIElement::decrement):
        (AccessibilityUIElement::showMenu):
        (AccessibilityUIElement::press):
        (AccessibilityUIElement::accessibilityValue):
        (AccessibilityUIElement::documentEncoding):
        (AccessibilityUIElement::documentURI):
        (_accessibilityNotificationCallback):
        (AccessibilityUIElement::addNotificationListener):
        (AccessibilityUIElement::removeNotificationListener):
        (AccessibilityUIElement::isFocusable):
        (AccessibilityUIElement::isSelectable):
        (AccessibilityUIElement::isMultiSelectable):
        (AccessibilityUIElement::isSelectedOptionActive):
        (AccessibilityUIElement::isVisible):
        (AccessibilityUIElement::isOffScreen):
        (AccessibilityUIElement::isCollapsed):
        (AccessibilityUIElement::isIgnored):
        (AccessibilityUIElement::hasPopup):
        (AccessibilityUIElement::takeFocus):
        (AccessibilityUIElement::takeSelection):
        (AccessibilityUIElement::addSelection):
        (AccessibilityUIElement::removeSelection):
        (AccessibilityUIElement::uiElementForSearchPredicate):
        (AccessibilityUIElement::numberAttributeValue):

2013-03-04  Jochen Eisinger  <jochen@chromium.org>

        [chromium] pass all focus handling methods through the WebTestDelegate
        https://bugs.webkit.org/show_bug.cgi?id=111328

        Reviewed by Nico Weber.

        In content_shell, the focus handling is asynchronous. To allow for
        switching the focus synchronously between WebViews, we need to intercept
        didFocus and didBlur and forward it to the WebTestDelegate.

        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestDelegate):
        (WebTestRunner::WebTestDelegate::setFocus):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebTestRunner::WebTestProxy::didFocus):
        (WebTestRunner::WebTestProxy::didBlur):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::setWindowIsKey):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::didFocus):
        (WebTestRunner):
        (WebTestRunner::WebTestProxyBase::didBlur):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didFocus):
        (WebViewHost::didBlur):
        (WebViewHost::setFocus):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-03-04  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] No need to manually add system paths to jhbuildrc
        https://bugs.webkit.org/show_bug.cgi?id=110850

        Reviewed by Gustavo Noronha Silva.

        * gtk/jhbuildrc: Remove calls to addpath() for items that jhbuild
        already takes care of.

2013-03-04  Kinuko Yasuda  <kinuko@chromium.org>

        [chromium] TestWebKitAPI WTF.StringHasher_addCharacters is broken on Chromium Android
        https://bugs.webkit.org/show_bug.cgi?id=111284

        Disabling the failing two tests on Android.

        Reviewed by Jochen Eisinger.

        * TestWebKitAPI/Tests/WTF/StringHasher.cpp:
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2013-03-04  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Add build flag for FontLoader
        https://bugs.webkit.org/show_bug.cgi?id=111289

        Reviewed by Benjamin Poulain.

        Add ENABLE_FONT_LOAD_EVENTS build flag (disabled by default).

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2013-03-03  Benjamin Poulain  <benjamin@webkit.org>

        [Mac] Get rid of a useless method from DOMHTMLInputElement
        https://bugs.webkit.org/show_bug.cgi?id=111279

        Reviewed by Sam Weinig.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setValueForUser):
        The method _setValueForUser: was added for testing. This feature is already
        exposed by DOMHTMLInputElement as a private API and it is how this code is exercised
        in real use cases. Get rid of the method created for testing, use the real thing
        instead.

2013-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        Some perf. tests have variances that differ greatly between runs
        https://bugs.webkit.org/show_bug.cgi?id=97510

        Reviewed by Benjamin Poulain.

        Use multiple instances of DumpRenderTree or WebKitTestRunner to amortize the effect of the runtime
        environment on test results (we run each instance after one another, not in parallel).

        We use 4 instances of the test runner, each executing 5 in-process iterations, for the total of 20
        iterations as it was done previously in single process. These values are hard-coded in perftest.py
        and runner.js but they are to be configurable in the future.

        Set of 5 iterations obtained by the same test runner is treated as an "iteration group" and each
        metric now reports an array of the length 4 with each element containing an array of 5 iteration
        values obtained by each test runner instance as opposed to a flattened array of 20 iteration values.

        Unfortunately, we can use the same trick on Dromaeo because we're already doing only 5 iterations
        and repeating the entire Dromaeo 4 times will take too long. We need to disable more Dromaeo tests
        as needed. To this end, added SingleProcessPerfTest to preserve the old behavior.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTestMetric.append_group): Renamed from append.
        (PerfTestMetric.grouped_iteration_values): Added.
        (PerfTestMetric.flattened_iteration_values): Renamed from iteration_values.

        (PerfTest.__init__): Takes the number of processes (drivers) to run tests with.
        This parameter is only used by SingleProcessPerfTest.

        (PerfTest.run): Repeat tests using different driver processes.
        (PerfTest._run_with_driver): Returns a boolean instead of a list of measured metrics
        since metrics are shared between multiple drivers (i.e. multiple calls to _run_with_driver).
        We instead use _ensure_metrics to obtain the matched metrics and store the data there.
        (PerfTest._ensure_metrics): Added.

        (SingleProcessPerfTest): Added. Used to run Dromaeo tests where running it on 4 different
        instances of DumpRenderTree/WebKitTestRunner takes too long.
        (SingleProcessPerfTest.__init__):

        (ReplayPerfTest._run_with_driver): Updated to use _ensure_metrics.

        (PerfTestFactory): Use SingleProcessPerfTest to run Dromaeo tests.

        * Scripts/webkitpy/performance_tests/perftest_unittest.py: Updated various tests that expect
        _run_with_driver to return a list of metrics. Now it returns a boolean indicating whether
        the test succeeded or not. Obtain the dictionary of metrics via test._metrics instead.

        (TestPerfTestMetric.test_append): Updated per name and added some test cases for
        grouped_iteration_values.

        (TestPerfTest._assert_results_are_correct):

        (TestSingleProcessPerfTest): Added.
        (TestSingleProcessPerfTest.test_use_only_one_process):
        (TestSingleProcessPerfTest.test_use_only_one_process.run_single):

        (TestReplayPerfTest.test_run_with_driver_accumulates_results):
        (TestReplayPerfTest.test_run_with_driver_accumulates_memory_results):

        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py: Updated values of
        sample standard deviations since we're now running tests 4 times.
        (MainTest._test_run_with_json_output.mock_upload_json):
        (MainTest.test_run_with_upload_json_should_generate_perf_webkit_json):

2013-03-03  Alexandre Elias  <aelias@chromium.org>

        [chromium] Remove WebLayerTreeView::setViewportSize call
        https://bugs.webkit.org/show_bug.cgi?id=110727

        Reviewed by James Robinson.

        After https://codereview.chromium.org/12328080 lands,
        setViewportSize is called from the Chromium side. The multiplication
        by deviceScaleFactor here was prone to off-by-one errors.
        The layoutSize() function was only used here so delete it as well.

        DumpRenderTree WebViewHost must now call this method as well.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::initializeLayerTreeView):
        (WebViewHost::setWindowRect):
        (WebViewHost::setDeviceScaleFactor):
        (WebViewHost::updateViewportSize):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-02-27  Darin Adler  <darin@apple.com>

        StringHasher functions require alignment that call sites do not all guarantee
        https://bugs.webkit.org/show_bug.cgi?id=110171

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/WTF.pro:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Added the StringHasher.cpp file.

        * TestWebKitAPI/Tests/WTF/StringHasher.cpp: Added. Contains a bunch of tests
        for the functions in the StringHasher class.

2013-03-02  Benjamin Poulain  <bpoulain@apple.com>

        Move computedStyleIncludingVisitedInfo from TestRunner to Internals
        https://bugs.webkit.org/show_bug.cgi?id=109772

        Reviewed by Andreas Kling.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/wx/TestRunnerWx.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2013-03-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: do not visit raw pointers by default.
        https://bugs.webkit.org/show_bug.cgi?id=110943

        Reviewed by Yury Semikhatsky.

        Unfortunately in many cases raw pointer may point to an object that has been deleted.
        There is no working solution to solve this problem in general.
        It could be solved only on case by case basis.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:
        * TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:
        (TestWebKitAPI::TEST):

2013-03-01  Jason Anderssen  <janderssen@gmail.com>

        Move markerTextForListItem from TestRunner to Internals
        https://bugs.webkit.org/show_bug.cgi?id=110939

        Reviewed by Benjamin Poulain.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunnerQt):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/wx/TestRunnerWx.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2013-03-01  Ryosuke Niwa  <rniwa@webkit.org>

        Don't use legacy test names when returning results from PerfTest.run
        https://bugs.webkit.org/show_bug.cgi?id=111148

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTestMetric.name): Renamed from metric.
        (PerfTest.test_name_without_file_extension): Extracted from legacy_chromium_bot_compatible_test_name.
        (PerfTest.run): Use metric name instead of the legacy name to store iteration values.
        (ChromiumStylePerfTest.parse_and_log_output): Use the metric name to store results as done in PerfTest.run.

        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPerfTestMetric.test_init_set_time_metric):
        (TestPerfTestMetric.legacy_chromium_bot_compatible_test_name): Removed. The integration tests test this.
        (TestReplayPerfTest.test_run_with_driver_accumulates_results):
        (TestReplayPerfTest.test_run_with_driver_accumulates_memory_results):

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__):
        (PerfTestsRunner._generate_results_dict): Updated to iterate over (test, metrics) pair. Use view_source_url
        to obtain the trac URL instead of hard coding it.
        (PerfTestsRunner._run_tests_set):

2013-03-01  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Add an extra project that assembles all project build logs on Windows into a single file.
        https://bugs.webkit.org/show_bug.cgi?id=111202

        This is useful for running VCExpress builds from command line because there is
        no unified solution output, only per project build logs.
        The project will be run as the last project in the solution.

        * win/AssembleBuildLogs: Added.
        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj: Added.
        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj.filters: Added.
        * win/AssembleBuildLogs/AssembleLogs.cmd: Added.
        * win/AssembleBuildLogs/README: Added.

2013-03-01  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Increase number of patches processed before clean building on WinEWS bots.

        * EWSTools/start-queue-win.sh:

2013-03-01  Ryosuke Niwa  <rniwa@webkit.org>

        Don't return statistics in PerfTest.run
        https://bugs.webkit.org/show_bug.cgi?id=111145

        Reviewed by Dirk Pranke.

        Simply return a list of values obtained in each iteration from PerfTest.run.
        Also simplify various methods as needed.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTestMetric.__init__): Moved the code to convert 'Time' metric to 'FrameRate' and 'Runs'
        as needed from PerfTestsRunner._generate_results_dict.

        (PerfTestMetric.legacy_chromium_bot_compatible_test_name): Always append the metric name now
        that we don't have to worry about the backward compatibility here.

        (PerfTestMetric.iteration_values): Added.
        (PerfTestMetric.unit): Added.
        (PerfTestMetric.metric_to_unit):
        (PerfTestMetric.time_unit_to_metric): Extracted from PerfTestsRunner._generate_results_dict.

        (PerfTest.run):
        (PerfTest.log_statistics): Merged compute_statistics and self.output_statistics.

        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPerfTestMetric.test_init_set_missing_unit):
        (TestPerfTestMetric.test_init_set_time_metric): Added.
        (TestPerfTestMetric.test_legacy_chromium_bot_compatible_test_name):
        (TestPerfTestMetric.test_append):
        (TestPerfTestMetric.test_compute_statistics): Removed. Integration tests check some of these
        test cases and it's not critical to keep math right as they're not used in output JSON anymore.
        (TestPerfTest._assert_results_are_correct):
        (TestReplayPerfTest.test_run_with_driver_accumulates_results):
        (TestReplayPerfTest.test_run_with_driver_accumulates_memory_results):

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._generate_results_dict):

        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        (EventTargetWrapperTestData): The metric name shows up at the end of the test name as expected.
        (SomeParserTestData): Ditto.
        (MemoryTestData): Ditto.

2013-03-01  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Enable LINK_PREFETCH
        https://bugs.webkit.org/show_bug.cgi?id=111158

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/features.pri:

2013-03-01  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Update features.pri with new features
        https://bugs.webkit.org/show_bug.cgi?id=111157

        Reviewed by Jocelyn Turcotte.

        * qmake/mkspecs/features/features.pri:

2013-03-01  Jochen Eisinger  <jochen@chromium.org>

        [chromium] put WebTestProxy::scheduleComposite back in place
        https://bugs.webkit.org/show_bug.cgi?id=111146

        Reviewed by Nico Weber.

        The call was removed in http://trac.webkit.org/changeset/144398 because
        DRT doesn't need it. However, content shell depends on this call.

        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebTestRunner::WebTestProxy::scheduleComposite):

2013-02-28  Ryosuke Niwa  <rniwa@webkit.org>

        Merge PerfTestRunner._run_single_test into PerfTestRunner._run_tests_set
        https://bugs.webkit.org/show_bug.cgi?id=111142

        Reviewed by Adam Barth.

        Merged _run_single_test into _run_tests_set. The code looks much cleaner now.

        Also removed _print_status since it's never used anywhere.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.run):
        (PerfTestsRunner._run_tests_set):
        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        (MainTest.run_test):
        (MainTest.test_run_test_set):
        (MainTest.test_run_test_set_kills_drt_per_run):
        (MainTest.test_run_test_set_for_parser_tests):

2013-02-28  Kiran Muppala  <cmuppala@apple.com>

        Disable window occlusion detection for WebKitTestRunner Web View on Mac
        https://bugs.webkit.org/show_bug.cgi?id=111116

        Reviewed by Simon Fraser.

        Window occlusion notifications were causing WebKitTestRunner's Web View
        to be detected as occluded and causing a few JavaScript timer layout
        tests to fail.  https://bugs.webkit.org/show_bug.cgi?id=111025, fixed this
        by initializing the page visibility to "visible" after creating the view.
        But a better solution is to disable window occlusion detection, so that
        not only the page but also the view is treated as visible.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions): Remove call to
        setVisibilityState, since it is no longer necessary.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView): Disable window occlusion
        detection for the created WKView.

2013-02-28  Li Yin  <li.yin@intel.com>

        [chromium] Events can't be triggered on MediaStreamTrack
        https://bugs.webkit.org/show_bug.cgi?id=110930

        Reviewed by Kentaro Hara.

        Related code was moved to MediaStreamCenterChromium::didStopLocalMediaStream

        * DumpRenderTree/chromium/TestRunner/src/MockWebMediaStreamCenter.cpp:
        (WebTestRunner::MockWebMediaStreamCenter::didStopLocalMediaStream):

2013-02-27  James Robinson  <jamesr@chromium.org>

        [chromium] Use DumpRenderTree-specific interface for DRT's compositor embedding
        https://bugs.webkit.org/show_bug.cgi?id=111017

        Reviewed by Adam Barth.

        This decouples DumpRenderTree from WebLayerTreeViewClient.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHostDRTLayerTreeViewClient):
        (WebViewHostDRTLayerTreeViewClient::WebViewHostDRTLayerTreeViewClient):
        (WebViewHostDRTLayerTreeViewClient::~WebViewHostDRTLayerTreeViewClient):
        (WebViewHostDRTLayerTreeViewClient::Layout):
        (WebViewHostDRTLayerTreeViewClient::ScheduleComposite):
        (WebViewHost::initializeLayerTreeView):
        * DumpRenderTree/chromium/WebViewHost.h:
        (webkit_support):
        (WebViewHost):

2013-02-28  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed, add my secondary email address to the list.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-28  Philip Rogers  <pdr@google.com>

        Add Philip Rogers as a reviewer.

        Unreviewed update of committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-28  Ryosuke Niwa  <rniwa@webkit.org>

        Merge more methods on PerfTest
        https://bugs.webkit.org/show_bug.cgi?id=111030

        Reviewed by Dirk Pranke.

        Merged parse_output into _run_with_driver as it was the only caller. Also merged _should_ignore_line_in_stderr
        and _should_ignore_line_in_parser_test_result into _filter_output since it was their only caller.

        This makes the control flow a lot more comprehensible.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest._run_with_driver):
        (PerfTest._should_ignore_line):
        (PerfTest._filter_output):

        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPerfTest._assert_results_are_correct):
        (test_ignored_stderr_lines):

2013-02-28  Robert Hogan  <robert@webkit.org>

        Update my IRC nick

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-28  Andras Becsi  <andras.becsi@digia.com>

        [Qt] Enable thin archives before parsing the project files

        Rubber-stamped by Simon Hausmann.

        The targetSubDir() function can be called before default_post.prf has been
        parsed therefore the gnu_thin_archives option has to be set in default_pre.prf
        which is parsed before the main project file.
        This issue was revealed by r144299 and fixes the clean build.

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:

2013-02-28  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Enable CANVAS_PATH flag
        https://bugs.webkit.org/show_bug.cgi?id=108508

        Reviewed by Simon Hausmann.

        Also enable CANVAS_PATH flag for Qt.

        * qmake/mkspecs/features/features.pri:

2013-02-28  Andras Becsi  <andras.becsi@digia.com>

        [Qt][TestWebKitAPI] The activeBuildConfig() function has been replaced with targetSubDir()

        Rubber-stamped by Csaba Osztrogonác.

        Besides suppressing a warning about the non-existing function this
        fixes the build if there is a subdirectory (eg. debug-and-release).

        * TestWebKitAPI/InjectedBundle.pri:
        * TestWebKitAPI/TestWebKitAPI.pri:

2013-02-28  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WTR] WTR cannot load injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=111063

        Reviewed by Csaba Osztrogonác.

        WTR was not able to load injected bundle because of undefined 
        symbols for AccessibilityUIElement::scrollToMakeVisible(). 
        Adding empty implementation of this function to AccessibilityUIElementAtk.cpp
        solves the problem.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::scrollToMakeVisible):

2013-02-28  Alberto Garcia  <albgarcia@rim.com>

        [BlackBerry] TestRunnerBlackBerry: remove layerTreeAsText, it's gone from upstream
        https://bugs.webkit.org/show_bug.cgi?id=110464

        Reviewed by Rob Buis.

        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:

2013-02-28  Xan Lopez  <xlopez@rim.com>

        [BlackBerry] DumpRenderTreeSupport: update the set position methods
        https://bugs.webkit.org/show_bug.cgi?id=110578

        Reviewed by Rob Buis.

        TestRunner::setMockGeolocationPosition() changed in r130416:
        http://trac.webkit.org/changeset/130416/trunk/Tools/DumpRenderTree/TestRunner.h

        DumpRenderTreeSupport::setMockGeolocationError() was renamed to
        setMockGeolocationPositionUnavailableError() in r129444:
        http://trac.webkit.org/changeset/129444/trunk/Source/WebKit/blackberry/WebKitSupport/DumpRenderTreeSupport.h

        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        (TestRunner::setMockGeolocationPosition):
        (TestRunner::setMockGeolocationPositionUnavailableError):

2013-02-28  Xan Lopez  <xlopez@rim.com>

        [BlackBerry] WorkQueueItemBlackBerry: use the new FrameLoader API
        https://bugs.webkit.org/show_bug.cgi?id=110465

        Reviewed by Rob Buis.

        * DumpRenderTree/blackberry/WorkQueueItemBlackBerry.cpp:
        (LoadItem::invoke):

2013-02-27  Ryosuke Niwa  <rniwa@webkit.org>

        PerfTestRunner doesn't need _needs_http and _has_http_lock
        https://bugs.webkit.org/show_bug.cgi?id=111037

        Reviewed by Adam Barth.

        Delete these variables in favor of using a local variable.

        Member variables are like global variables. They introduce implicit dependencies
        between member functions.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__):
        (PerfTestsRunner._start_http_servers):
        (PerfTestsRunner):
        (PerfTestsRunner._stop_http_servers):
        (PerfTestsRunner.run):

2013-02-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144224.
        http://trac.webkit.org/changeset/144224
        https://bugs.webkit.org/show_bug.cgi?id=111045

        Caused plugins/pass-different-npp-struct.html to time out
        (Requested by abarth on #webkit).

        * DumpRenderTree/TestNetscapePlugIn/Tests/PassDifferentNPPStruct.cpp:
        (PassDifferentNPPStruct::NPP_SetWindow):
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_SetWindow):

2013-02-27  Adam Barth  <abarth@webkit.org>

        [Chromium] Enable threaded HTML parser by default in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=110907

        Reviewed by Eric Seidel.

        This patch changes --enable-threaded-html-parser into
        --disable-threaded-html-parser and thereby enables the threaded HTML
        parser by default for the Chromium port.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2013-02-27  Kiran Muppala  <cmuppala@apple.com>

        Initialize page visibility after creating WebKitTestRunner WebView on Mac
        https://bugs.webkit.org/show_bug.cgi?id=111025

        Reviewed by Simon Fraser.

        Set page visibility to "visible" after creating WebView to override
        visibility state inferred from window occlusion notifications on Mac.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions): Add call to
        setVisibilityState.

2013-02-27  Ryosuke Niwa  <rniwa@webkit.org>

        Merge PageLoadingPerfTest into ReplayPerfTest
        https://bugs.webkit.org/show_bug.cgi?id=111027

        Reviewed by Dirk Pranke.

        Merged two classes.

        We should really move ahead with the bug 100991 and get rid of PageLoadingPerfTest
        part of ReplayPerfTest.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (ReplayPerfTest): Moved _FORCE_GC_FILE here.
        (ReplayPerfTest.__init__):
        (ReplayPerfTest._run_with_driver): Moved from PageLoadingPerfTest.
        (ReplayPerfTest.run_single): Load the GC page as run_single on PageLoadingPerfTest did.
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestReplayPerfTest):
        (TestReplayPerfTest.test_run_single.run_test):
        (TestReplayPerfTest.test_run_single): Make sure test_time is passed down properly from output.
        (TestReplayPerfTest.test_run_with_driver_accumulates_results): Renamed from
        TestPageLoadingPerfTest.test_run.
        (TestReplayPerfTest.test_run_with_driver_accumulates_results.mock_run_signle):
        (TestReplayPerfTest.test_run_with_driver_accumulates_memory_results): Renamed from
        TestPageLoadingPerfTest.test_run_with_memory_output
        (TestReplayPerfTest.test_run_with_driver_accumulates_memory_results.mock_run_signle):
        (TestReplayPerfTest.test_prepare_calls_run_single):

2013-02-27  Eric Seidel  <eric@webkit.org>

        Add --additional-drt-flag option to run-perf-tests to make it easy to test runtime options
        https://bugs.webkit.org/show_bug.cgi?id=111021

        Reviewed by Dirk Pranke.

        The underlying code (which is shared with run-webkit-tests)
        already knew how to support this option, it just wasn't exposed
        via the run-perf-tests front-end.  This patch fixes that.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):

2013-02-27  Ryosuke Niwa  <rniwa@webkit.org>

        Stop uploading results to webkit-perf.appspot.com
        https://bugs.webkit.org/show_bug.cgi?id=110954

        Reviewed by Benjamin Poulain.

        Pass in perf.webkit.org instead of webkit-perf.appspot.com as the test results server.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunAndUploadPerfTests):

2013-02-27  James Simonsen  <simonjam@chromium.org>

        [chromium] Lower priority of preloaded images
        https://bugs.webkit.org/show_bug.cgi?id=110527

        Plumb the didChangePriority signal into DRT so it can be tested.

        Reviewed by Nate Chapin.

        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestRunner::WebTestProxy::didChangeResourcePriority):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::shouldDumpResourcePriorities):
        (WebTestRunner):
        (WebTestRunner::TestRunner::dumpResourceRequestPriorities):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::assignIdentifierToRequest):
        (WebTestRunner::WebTestProxyBase::willSendRequest):
        (WebTestRunner::WebTestProxyBase::didChangeResourcePriority):
        (WebTestRunner):

2013-02-27  Chris Fleizach  <cfleizach@apple.com>

        AX: Mac platform should support ability to scroll an element into visible
        https://bugs.webkit.org/show_bug.cgi?id=109860

        Reviewed by Beth Dakin.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (scrollToMakeVisibleCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::scrollToMakeVisible):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::scrollToMakeVisible):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::scrollToMakeVisible):
        (WTR):

2013-02-27  John Bauman  <jbauman@chromium.org>

        Plugin in iframe may not display
        https://bugs.webkit.org/show_bug.cgi?id=109879

        Reviewed by Simon Fraser.

        LogNPPSetWindow will be used with other ports as well.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:

2013-02-27  Jochen Eisinger  <jochen@chromium.org>

        plugins/netscape-plugin-setwindow-size*.html and plugins/pass-different-npp-struct.html should be async
        https://bugs.webkit.org/show_bug.cgi?id=110973

        Reviewed by Adam Barth.

        There is nothing that ensures that the log messages from the plugin
        come in before the layout test finished loading.

        * DumpRenderTree/TestNetscapePlugIn/Tests/PassDifferentNPPStruct.cpp:
        (PassDifferentNPPStruct::NPP_SetWindow):
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_SetWindow):

2013-02-27  Glenn Adams  <glenn@skynav.com>

        Add ENABLE_CSS3_TEXT_LINE_BREAK flag.
        https://bugs.webkit.org/show_bug.cgi?id=110944

        Reviewed by Dean Jackson.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2013-02-27  Yong Li  <yong.li.webkit@outlook.com>

        Unreviewed. Remove myself from watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2013-02-27  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Switch QtWebKit to GStreamer 1.0.
        https://bugs.webkit.org/show_bug.cgi?id=106669.

        Original patch by Sebastian Dröge.
        Reviewed by Csaba Osztrogonác.

        Build with GStreamer 1.0 if available, but support GStreamer 0.10 
        temporarily to make upgrading easy and the patch suitable for Qt5.

        * qmake/mkspecs/features/features.prf:

2013-02-27  Szilard Ledan  <szledan@inf.u-szeged.hu>

        Unreviewed. Added myself to committers.py

        * Scripts/webkitpy/common/config/committers.py:

2013-02-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144192.
        http://trac.webkit.org/changeset/144192
        https://bugs.webkit.org/show_bug.cgi?id=110984

        Stored svn password on wrong computer (Requested by kkristof
        on #webkit).

        * Scripts/webkitpy/common/config/committers.py:

2013-02-27  Szilard Ledan  <szledan@inf.u-szeged.hu>

        Unreviewed. Added myself to committers.py

        * Scripts/webkitpy/common/config/committers.py:

2013-02-27  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r144155. The report page is located at /api/report, not /api/test/report.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._upload_json):

2013-02-27  Ryosuke Niwa  <rniwa@webkit.org>

        Stop uploading results to webkit-perf.appspot.com
        https://bugs.webkit.org/show_bug.cgi?id=110954

        Reviewed by Benjamin Poulain.

        When the specified test results server was webkit-perf.appspot.com, replace it by perf.webkit.org.
        Also, always use the new JSON format. Removed the code to generate the old format.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._generate_and_show_results):
        (PerfTestsRunner._generate_results_dict):
        (PerfTestsRunner._merge_slave_config_json):
        (PerfTestsRunner._generate_output_files):

2013-02-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144136, r144143, and r144147.
        http://trac.webkit.org/changeset/144136
        http://trac.webkit.org/changeset/144143
        http://trac.webkit.org/changeset/144147
        https://bugs.webkit.org/show_bug.cgi?id=110950

        Caused some timeouts and flaky crashes (Requested by abarth on
        #webkit).

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2013-02-25  Ryosuke Niwa  <rniwa@webkit.org>

        Use perf.webkit.org JSON format in results page
        https://bugs.webkit.org/show_bug.cgi?id=110842

        Reviewed by Benjamin Poulain.

        Change the default JSON format from that of webkit-perf.appspot.com to that of perf.webkit.org.

        A whole bunch of integration tests have been updated to use the new JSON format.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._generate_and_show_results): Renamed output and output_path to legacy_output
        and legacy_output_json_path respectively.
        (PerfTestsRunner._generate_results_dict): Don't assume meta build information is always available.
        (PerfTestsRunner._generate_output_files): Make json_output, which is used to generate the default
        JSON file and the results page out of perf_webkit_output instead of legacy_output.

        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        (MainTest.test_run_memory_test):
        (MainTest._test_run_with_json_output.mock_upload_json):
        (MainTest):
        (MainTest.test_run_with_json_output):
        (MainTest.test_run_with_description):
        (MainTest.test_run_generates_json_by_default):
        (MainTest.test_run_merges_output_by_default):
        (MainTest.test_run_respects_reset_results):
        (MainTest.test_run_generates_and_show_results_page):
        (MainTest.test_run_with_slave_config_json):
        (MainTest.test_run_with_multiple_repositories):
        (MainTest.test_run_with_upload_json):
        (MainTest.test_run_with_upload_json_should_generate_perf_webkit_json):

2013-02-26  Adam Barth  <abarth@webkit.org>

        [Chromium] Enable threaded HTML parser by default in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=110907

        Reviewed by Eric Seidel.

        This patch changes --enable-threaded-html-parser into
        --disable-threaded-html-parser and thereby enables the threaded HTML
        parser by default for the Chromium port.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2013-02-26  Dirk Pranke  <dpranke@chromium.org>

        [chromium] Re-enable the fixed version of freetype on linux
        https://bugs.webkit.org/show_bug.cgi?id=110542

        Reviewed by Tony Chang.

        Re-land the change in r143794 to switch to building with a fixed
        version of FreeType for just DumpRenderTree. This allows us to share
        one version of pixel baselines for both Lucid and Precise, and run the
        layout tests in a stock Precise install (instead of a Lucid chroot).
        Going forward, this approach isolates us from os-level changes to the
        version of FreeType. Note that Chromium itself still uses the system
        FreeType and is unaffected by this change.
        
        This setting can still be turned off (at compile/gyp-time) by
        manually setting use_custom_freetype=0.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2013-02-26  Nico Weber  <thakis@chromium.org>

        [chromium] content shell drt: Enable WebKit::setLayoutTestMode()
        https://bugs.webkit.org/show_bug.cgi?id=110890

        Reviewed by Jochen Eisinger.

        Several functions in webkit check that bit to change rendering
        in layout test mode. For example, platform/graphics/skia/FrontSkia.cpp
        disables font smoothing in this mode. TestShell and DRT both set
        this flag, so content shell drt should set it too.

        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):

2013-02-26  Vivek Galatage  <vivek.vg@samsung.com>

        new-commit-bot: Fix the unit test newcommitbot-unittest.py due to r144040
        https://bugs.webkit.org/show_bug.cgi?id=110884

        Reviewed by Csaba Osztrogonác.

        Adding the missing spaces before ':' in the unit test.

        * Scripts/webkitpy/tool/commands/newcommitbot_unittest.py:

2013-02-26  Vivek Galatage  <vivek.vg@samsung.com>

        new-commit-bot: Some IRC clients doesn't linkify rollout messages
        https://bugs.webkit.org/show_bug.cgi?id=110861

        Reviewed by Ryosuke Niwa.

        Adding the space before ':' in order to fix the links shown for the rollout message.

        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot._summarize_commit_log):

2013-02-26  Joone Hur  <joone.hur@intel.com>

        [GTK] Add Clutter to jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=110245

        Reviewed by Martin Robinson.

        Add clutter, cogl, clutter-gtk, and atk to the optional moduleset.
        This allows to build WebKitGtk+ with clutter as an acceleration backend
        within the jhbuild environment. 

        * gtk/jhbuild-optional.modules:

2013-02-25  Ryosuke Niwa  <rniwa@webkit.org>

        Another fix attempt after r143991 since having \r? after a greedy match doesn't help.

        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.value_from_svn_info):

2013-02-25  Alan Cutter  <alancutter@chromium.org>

        GCE EWS bots failing intermittently on HTTP 502 error while updating their status
        https://bugs.webkit.org/show_bug.cgi?id=110845

        Unreviewed EWS bot fix.

        Switch the Queue Status Server address the EWS bots use to a more direct URL that
        doesn't seem to be having problems from GCE like queues.webkit.org.

        * Scripts/webkitpy/common/net/statusserver.py:
        (StatusServer):

2013-02-25  Dirk Pranke  <dpranke@chromium.org>

        Forgot to delete a no-longer-needed unit test after r143980.

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest.test_path_to_image_diff):

2013-02-25  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. run-perf-tests was reporting with revision numbers ending with \r.
        Don't include \r at the end of svn info lines on Windows.

        This is similar to r143839.

        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.value_from_svn_info):

2013-02-25  James Simonsen  <simonjam@chromium.org>

        [Resource Timing] Update test suite so it can be exported to the W3C
        https://bugs.webkit.org/show_bug.cgi?id=107343

        Reviewed by Tony Gentilcore.

        * Scripts/export-w3c-performance-wg-tests: Clean up output.
        * Scripts/import-w3c-performance-wg-tests:

2013-02-25  Anders Carlsson  <andersca@apple.com>

        Add a new unavailablePluginButtonClicked callback that takes a WKDictionary of plug-in information
        https://bugs.webkit.org/show_bug.cgi?id=110821
        <rdar://problem/13265303>

        Reviewed by Beth Dakin.

        Update for WebKit2 changes.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::unavailablePluginButtonClicked):
        * WebKitTestRunner/TestController.h:
        (TestController):

2013-02-21  Jeffrey Pfau  <jpfau@apple.com>

        Optionally partition cache to prevent using cache for tracking
        https://bugs.webkit.org/show_bug.cgi?id=110269

        Reviewed by Maciej Stachowiak.

        Add test suite for public suffix functions on Mac.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/PublicSuffix.mm: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::TEST_F):

2013-02-25  Dirk Pranke  <dpranke@chromium.org>

        nrwt: reenable multiple http shards on chromium win
        https://bugs.webkit.org/show_bug.cgi?id=110814

        Reviewed by Tony Chang.

        The underlying bug in DumpRenderTree that was causing us to look for a
        pac file and timeout under load was fixed a while ago.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort.relative_test_filename):

2013-02-25  Dirk Pranke  <dpranke@chromium.org>

        Make ninja the default w/ build-webkit --chromium on windows.
        https://bugs.webkit.org/show_bug.cgi?id=110731

        Unreviewed - TBR'ing thakis :).

        * Scripts/update-webkit-chromium:

2013-02-25  Anders Carlsson  <andersca@apple.com>

        Add a new pluginDidFail callback that takes a WKDictionary of plug-in information
        https://bugs.webkit.org/show_bug.cgi?id=110793
        <rdar://problem/13265303>

        Reviewed by Sam Weinig.

        Update for WebKit2 API changes.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):

2013-02-25  Nico Weber  <thakis@chromium.org>

        Fix python unit tests after yoli's email address update in http://trac.webkit.org/changeset/143922
        https://bugs.webkit.org/show_bug.cgi?id=110775

        Unreviewed, basically a rebaseline.

        * Scripts/webkitpy/common/config/watchlist:

2013-02-25  Nico Weber  <thakis@chromium.org>

        [chromium] Try to get the webkit builder to use msvs again
        https://bugs.webkit.org/show_bug.cgi?id=110771

        Reviewed by Eric Seidel.

        The msvs gyp generator apparently doesn't write the sln file on every
        run, so check the vcxproj file instead.

        * Scripts/webkitdirs.pm:
        (determineIsChromiumNinja):

2013-02-25  Nico Weber  <thakis@chromium.org>

        [chromium] try to unbreak run-chromium-webkit-unit-tests on the mac bots
        https://bugs.webkit.org/show_bug.cgi?id=110767

        Reviewed by Eric Seidel.

        The tester runs gyp, which generates out/Release/build.ninja. The bot
        scripts use existence (and timestamp) of that file to decide if the
        current build is supposed to be ninja or xcodebuild. The file exists,
        so the snapshot is extracted to out/Release. The snapshot doesn't
        contain build.ninja however due to
        http://trac.webkit.org/changeset/140375 , so after extracting the
        snapshot the scripts think that this is an xcodebuild build. So remove
        the part of that revision that removed ninja files from the archive,
        and the bots should be happy again.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):

2013-02-25  Nico Weber  <thakis@chromium.org>

        Fix tests after r143910
        https://bugs.webkit.org/show_bug.cgi?id=110757

        Reviewed by Andreas Kling.

        While here, also add a test for the bug r143910 fixed.

        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ScriptErrorTest.test_message_with_output):
        (ScriptErrorTest):
        (ScriptErrorTest.test_message_with_tuple):

2013-02-25  Nico Weber  <thakis@chromium.org>

        [chromium] Apparently built-product-archive is written in Python, not Perl :-/
        https://bugs.webkit.org/show_bug.cgi?id=110755

        Reviewed by Jochen Eisinger.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):
        (extractBuiltProduct):

2013-02-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143895.
        http://trac.webkit.org/changeset/143895
        https://bugs.webkit.org/show_bug.cgi?id=110758

        broke a bunch of tests (Requested by thakis__ on #webkit).

        * Scripts/update-webkit-chromium:

2013-02-25  Andreas Kling  <akling@apple.com>

        Unreviewed, fix simple mistake in r143903.
        <http://webkit.org/b/110746>

        Reviewed by Andreas Kling.

        Pass git revision, not svn revision, to git shell command.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.timestamp_of_latest_commit):

2013-02-25  Nico Weber  <thakis@chromium.org>

        [chromium] Let built-product-archive log which directory it's archiving from and extracting to
        https://bugs.webkit.org/show_bug.cgi?id=110748

        Reviewed by Jochen Eisinger.

        One of the mac testers runs DRT from out/ but WebKitUnitTests from
        xcodebuild. I'm trying to understand what's going on.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):
        (extractBuiltProduct):

2013-02-23  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: replace String with const char* in MemoryObjectInfo
        https://bugs.webkit.org/show_bug.cgi?id=110599

        Reviewed by Yury Semikhatsky.

        Due to potentially dynamic nature of names and classNames we need to make a copy of the strings
        that were given us via MemoryInstrumentation calls.
        So I extended client api with registerString method that pushes the strings
        down to the serializer.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:
        * TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:
        (TestWebKitAPI::Helper::Helper):
        (Helper):
        (TestWebKitAPI::Helper::addNode):
        (TestWebKitAPI::TEST):

2013-02-25  Nico Weber  <thakis@chromium.org>

        Make ScriptError not crash when args is a tuple
        https://bugs.webkit.org/show_bug.cgi?id=110747

        Reviewed by Jochen Eisinger.

        I'm trying to understand the error on
        http://build.webkit.org/builders/Chromium%20Win%20Release%20%28Tests%29/builds/34563/steps/layout-test/logs/stdio
        better. I'll likely have to revert the ninja switch on windows, but
        having error reporting code that doesn't itself crash sounds like a
        good thing to have anyways.

        The problem is that '%s' % (1, 2) errors out, and args is sometimes a
        tuple not a list.

        * Scripts/run-chromium-webkit-unit-tests:
        * Scripts/webkitpy/common/system/executive.py:
        (ScriptError.__init__):

2013-02-25  Laszlo Gombos  <l.gombos@samsung.com>

        [EFL] Align feature defaults
        https://bugs.webkit.org/show_bug.cgi?id=110715

        Enable 3D_RENDERING in FeatureList.pm as it is enabled by default in
        OptionsEfl.cmake.

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitperl/FeatureList.pm:

2013-02-25  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests reports wrong commit time
        https://bugs.webkit.org/show_bug.cgi?id=110746

        Reviewed by Andreas Kling.

        The bug was caused by running "svn info" on a subdirectory, which returns a timestamp
        of when the subdirectory was last modified.

        Run "svn info -r <revision> <repository root>" instead. Specifying revision number is
        insufficient since running "svn log -r <revision>" on a partial checkout only returns
        an empty result if the revision didn't modify the subdirectory.

        For git, there is no partial checkout, so we just need to pass in "-r" option to keep
        the interface compatible with svn.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.timestamp_of_latest_commit):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.timestamp_of_latest_commit):
        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        (MockSCM.timestamp_of_latest_commit):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (test_timestamp_of_latest_commit):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.timestamp_of_latest_commit):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._generate_results_dict):

2013-02-25  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move WebRuntimeFeatures configuration to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=110712

        Reviewed by Nico Weber.

        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2013-02-25  Nico Weber  <thakis@chromium.org>

        Make ninja the default build system for build-webkit --chromium on windows
        https://bugs.webkit.org/show_bug.cgi?id=110731

        Reviewed by Jochen Eisinger.

        With http://crbug.com/169945 fixed, this should now work.

        * Scripts/update-webkit-chromium:

2013-02-24  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] GTK+ 2 build broken since GTK_API_VERSION_2 moved to autoconfig.h
        https://bugs.webkit.org/show_bug.cgi?id=110702

        Reviewed by Martin Robinson.

        * GtkLauncher/main.c: include autotoolsconfig.h.
        * Scripts/webkitpy/style/checker.py: make GtkLauncher/main.c exempt of
        the include ordering check, since it uses autotoolsconfig.h which needs to
        come first.

2013-02-24  Hajime Morrita  <morrita@google.com>

        [Custom Elements] Implement bare-bone document.register()
        https://bugs.webkit.org/show_bug.cgi?id=100229

        Reviewed by Adam Barth.

        Added enableCustomDOMElements flag.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2013-02-23  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] DumpRenderTree TestShell::initialize should take Platform* now that WebKitPlatformSupport is empty
        https://bugs.webkit.org/show_bug.cgi?id=110606

        Reviewed by Adam Barth.

        Part of a larger refactoring series; see tracking bug 82948.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (WebKitSupportTestEnvironment::WebKitSupportTestEnvironment):
        (WebKitSupportTestEnvironment::mockPlatform):
        (WebKitSupportTestEnvironment):
        * DumpRenderTree/chromium/MockPlatform.cpp: Copied from Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp.
        (MockPlatform::create):
        (MockPlatform::MockPlatform):
        (MockPlatform::~MockPlatform):
        (MockPlatform::setInterfaces):
        (MockPlatform::cryptographicallyRandomValues):
        (MockPlatform::createMediaStreamCenter):
        (MockPlatform::createRTCPeerConnectionHandler):
        * DumpRenderTree/chromium/MockPlatform.h: Copied from Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.h.
        (MockPlatform):
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp: Removed.
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.h: Removed.
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestDelegate):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):

2013-02-23  Ryosuke Niwa  <rniwa@webkit.org>

        Chromium Windows Perf bot fix. Tolerate CR at the end of the line that contains the timestamp.

        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.timestamp_of_latest_commit):

2013-02-23  Jason Anderssen  <janderssen@gmail.com>

        Move setAutofilled from TestRunner to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=110521

        Reviewed by Benjamin Poulain.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunnerQt):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/wx/TestRunnerWx.cpp:

2013-02-22  Ryosuke Niwa  <rniwa@webkit.org>

        Upload results to perf.webkit.org in addition to the one specified by --test-results-server
        https://bugs.webkit.org/show_bug.cgi?id=108577

        Reviewed by Dirk Pranke.

        Upload results to perf.webkit.org using new JSON format as well as the host specified by
        --test-results-server. The new format is needed to provide extra information perf.webkit.org
        need such as the subversion commit time and test URLs. This is a temporarily measure until
        we complete the transition and the old JSON format and the code to upload results to
        webkit-perf.appspot.com can be deleted.

        This patch adds scm.timestamp_of_latest_commit to obtain the timestamp of the latest commit present
        in a svn checkout or a git clone. This information is embedded in JSON submitted to perf.webkit.org
        so that the app can sort performance test results based on the timestamp of the last commit.

        It also changes the repository names returned by port objects to be properly capitalized
        human readable names such as WebKit instead of lowercased names such as webkit since these names
        are displayed on perf.webkit.org for humans. Several users of this feature has been updated
        to explicitly lowercase the names.


        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.timestamp_of_latest_commit): Added. Obtains the timestamp of the last commit. Unfortunately,
        git's timestamp granularity is seconds so we're losing some information compared to using a regular
        subversion client. To make matters worse, git doesn't have any option to show ISO-format timestamp in
        UTC so we're going to manually fiddle with timezone.

        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.timestamp_of_latest_commit): Added.

        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        (MockSCM.timestamp_of_latest_commit): Added.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (test_timestamp_of_latest_commit): Added a test for Git.timestamp_of_latest_commit.

        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.timestamp_of_latest_commit): Added. With svn, all we need to do is to use --xml option and parse
        the timestamp which is always in UTC.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGeneratorBase._insert_generic_metadata): Lowercase the name. Note that the name
        'chromium' needs to be substituted by 'chrome' for historical reasons.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.repository_paths): Return WebKit instead of webkit as noted above.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.repository_paths): Return Chromium instead of chromium as noted above.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__): Store the current time in UTC as well as in local time.
        (PerfTestsRunner._collect_tests):

        (PerfTestsRunner._generate_and_show_results): Retrieve both regular output and one for perf.webkit.org,
        and upload them appropriately.

        (PerfTestsRunner._generate_results_dict): Store WebKit and Chromium revisions at which tests were ran
        in revisions_for_perf_webkit and construct an output for perf.webkit.org.

        (PerfTestsRunner._datetime_in_ES5_compatible_iso_format): Added.

        (PerfTestsRunner._merge_slave_config_json): Merge slave configuration files into both regular output
        and one for perf.webkit.org. Here, we prefix each key with "builder" for perf.webkit.org.
        e.g. "processor" would be renamed to "builderProcessor".

        (PerfTestsRunner._generate_output_files):

        (PerfTestsRunner._upload_json): Added a remote path as an argument since we upload JSONs to /api/report
        on perf.webkit.org whereas we upload it to /api/test/report on webkit-perf.appspot.com. Also added the code
        to parse response as JSON when possible since perf.webkit.org returns a JSON response as opposed to
        webkit-perf.appspot.com which spits out a plaintext response.

        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        (MainTest._test_run_with_json_output.mock_upload_json): Tolerate perf.webkit.org/api/report for now.
        (MainTest._test_run_with_json_output): Store a UTC time as perftestrunner would do.
        (MainTest.test_run_with_upload_json_should_generate_perf_webkit_json): Added.

        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.test_upload_json): Moved from itegrationtest.py since it really is a unit test. Also added test
        cases to parse JSON responses.
        (MainTest.test_upload_json.MockFileUploader): Refactored.
        (MainTest.test_upload_json.MockFileUploader.reset): Added.
        (MainTest.test_upload_json.MockFileUploader.__init__):
        (MainTest.test_upload_json.MockFileUploader.upload_single_text_file):

2013-02-22  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Update bot config for OpenSource bots to add two new Win7 Debug testers and get rid of WinXP Debug testers.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2013-02-22  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, rolling out r143794.
        http://trac.webkit.org/changeset/143794
        https://bugs.webkit.org/show_bug.cgi?id=110542

        debug linux builds broken?

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2013-02-22  Dirk Pranke  <dpranke@chromium.org>

        [chromium] enable the fixed version of freetype on linux
        https://bugs.webkit.org/show_bug.cgi?id=110542

        Reviewed by Tony Chang.

        Switch to building with a fixed version of FreeType for
        just DumpRenderTree. This allows us to share one version
        of pixel baselines for both Lucid and Precise, and run
        the layout tests in a stock Precise install (instead of a Lucid
        chroot). Going forward, this approach isolates us from os-level
        changes to the version of FreeType. Note that Chromium itself
        still uses the system FreeType and is unaffected by this change.
        
        This setting can still be turned off (at compile/gyp-time) by
        manually setting use_custom_freetype=0.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2013-02-22  Anders Carlsson  <andersca@apple.com>

        Move pluginLoadPolicy to the page loader client
        https://bugs.webkit.org/show_bug.cgi?id=110635

        Reviewed by Sam Weinig.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):

2013-02-22  Kenneth Russell  <kbr@google.com>

        Unreviewed. Changed gman's primary address for auto-complete in Bugzilla.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-22  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [WTR] Do not dump information about empty subframes.
        https://bugs.webkit.org/show_bug.cgi?id=110585

        Reviewed by Simon Fraser.

        Follow DumpRenderTree more closely by skipping empty frames
        (frames which have no document). We are not really interested in
        showing anything about them.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpDescendantFramesText): Do not print subframe names when they
        have no associated Document.

2013-02-21  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][DRT] Do not dump empty frames.
        https://bugs.webkit.org/show_bug.cgi?id=110474

        Reviewed by Kenneth Rohde Christiansen.

        Follow the original Mac implementation more closely by skipping
        empty frames (frames which have no document). We are not really
        interested in showing anything about them.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (dumpFramesAsText):

2013-02-21  Dirk Pranke  <dpranke@chromium.org>

        [chromium] support the lucid version of freetype on precise in DRT
        https://bugs.webkit.org/show_bug.cgi?id=107338

        Reviewed by Tony Chang.

        Modify the DRT build so that we can optionally link against
        a fixed version of Freetype2. This allows us to share pixel test
        results across multiple versions of Ubuntu without having to
        worry about differences in font rendering.

        At the moment this feature is off by default. Eventually it will
        be on by default on linux.

        Note that this only affects DRT; the regular Chromium binary
        (and, for now, content_shell) will still use the system version
        of Freetype.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2013-02-21  Rouslan Solomakhin  <rouslan@chromium.org>

        [Chromium] Remove the word "cheher" from the list of misspelled words
        https://bugs.webkit.org/show_bug.cgi?id=110447

        Reviewed by Tony Chang.

        Other platforms do not mark "cheher" as a misspelled word in layout tests.
        This change is to bring Chromium platform in line with the rest of the
        platforms.

        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp:
        (WebTestRunner::MockSpellCheck::hasInCache): Changed "cheher" to "wellcome".
        (WebTestRunner::MockSpellCheck::fillSuggestionList): Removed "cheher" misspelling and "checker" suggestion.
        (WebTestRunner::MockSpellCheck::initializeIfNeeded): Removed "cheher" misspelling.

2013-02-21  Jochen Eisinger  <jochen@chromium.org>

        [chromium] document WebTestDelegate and WebTestRunner interfaces
        https://bugs.webkit.org/show_bug.cgi?id=110472

        Reviewed by Adam Barth.

        Also remove the default implementation of the remaining WebTestDelegate
        methods now that all embedders provide this interface.

        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestDelegate):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner):

2013-02-19  Mark Hahnenberg  <mhahnenberg@apple.com>

        Objective-C API: Need a way to use the Objective-C JavaScript API with WebKit
        https://bugs.webkit.org/show_bug.cgi?id=106059

        Reviewed by Geoffrey Garen.

        Added new tests for the WebKit API portion of the JSC Objective-C API.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/JSContextBackForwardCache1.html: Added.
        * TestWebKitAPI/Tests/mac/JSContextBackForwardCache2.html: Added.
        * TestWebKitAPI/Tests/mac/WebViewDidCreateJavaScriptContext.mm: Added.
        (-[MyConsole log:]):
        (-[MyConsole printHelloWorld]):
        (-[MyConsole add:to:]):
        (-[DidCreateJavaScriptContextFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[DidCreateJavaScriptContextFrameLoadDelegate webView:didCreateJavaScriptContext:forFrame:]):
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2013-02-21  Stephen Chenney  <schenney@chromium.org>

        Unreviewed, add myself as a reviewer

        * Scripts/webkitpy/common/config/committers.py:

2013-02-21  Jer Noble  <jer.noble@apple.com>

        Unreviewed; add myself to the Media watchlist and update my committers.py setting to Reviewer.

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/watchlist:

2013-02-21  Martin Robinson  <mrobinson@igalia.com>

        gtk/DumpRenderTree.cpp is missing <locale.h> include
        https://bugs.webkit.org/show_bug.cgi?id=109386

        * DumpRenderTree/gtk/DumpRenderTree.cpp: Fix the WebKitGTK+ Mac build
        by include locale.h when we use setlocale.

2013-02-21  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Move feature overriding to the configure phase
        https://bugs.webkit.org/show_bug.cgi?id=110293

        Reviewed by Gustavo Noronha Silva.

        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProjectIfNecessary): Rename the feature file to
        WebKitFeatureOverrides.txt to better match the other filenames used in
        the new feature processing.
        * gtk/generate-feature-defines-files: Added. A script which takes as an argument
        the default features, overrides them with the contents of WebKitFeatureOverrrides.txt
        and writes WebKitFeatures.txt and WebKitFeatures.h.
        * gtk/override-feature-defines: Removed.

2013-02-21  Oswald Buddenhagen  <oswald.buddenhagen@digia.com>

        [Qt] Remove obsolete DEPENDPATH assignment

        Reviewed by Simon Hausmann

        qmake now adds CONFIG+=depend_includepath by default, making manual
        DEPENDPATH setup unnecessary.

        * qmake/mkspecs/features/default_post.prf:

2013-02-20  Vivek Galatage  <vivekg@webkit.org>

        Unreviewed. Changing primary email id.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-14  James Robinson  <jamesr@chromium.org>

        [chromium] Request WebLayerTreeView for DumpRenderTree via explicit testing path
        https://bugs.webkit.org/show_bug.cgi?id=109634

        Reviewed by Adrienne Walker.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createOutputSurface):
        (WebViewHost::initializeLayerTreeView):

2013-02-20  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Re-enable 3D CSS transforms when using build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=110402

        Reviewed by Xan Lopez.

        * Scripts/webkitperl/FeatureList.pm: Enable 3D rendering by default
        when building WebKitGTK+.

2013-02-20  Roger Fong  <roger_fong@apple.com>

        Get VS2010 Solution B&I ready.
        <rdar://problem/1322988>

        Rubberstamped by Timothy Horton.        
        
        Add Production configurations.
        
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherProduction.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeProduction.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiff.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherProduction.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffProduction.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginProduction.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginRelease.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIProduction.props: Added.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIRelease.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibProduction.props: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibRelease.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherProduction.props: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherRelease.props:
        * win/record-memory/record-memory.vcxproj:
        * win/record-memory/record-memoryProduction.props: Added.
        * win/record-memory/record-memoryRelease.props:

2013-02-20  Dirk Schulze  <krit@webkit.org>

        Enable CANVAS_PATH flag
        https://bugs.webkit.org/show_bug.cgi?id=108508

        Reviewed by Simon Fraser.

        Enable CANVAS_PATH flag on trunk.

        * Scripts/webkitperl/FeatureList.pm:

2013-02-20  Tony Chang  <tony@chromium.org>

        Parse author names with commas in ChangeLogs
        https://bugs.webkit.org/show_bug.cgi?id=110356

        Reviewed by Dirk Pranke.

        Paweł's name has a comma in it, which was confusing the ChangeLog parser.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLogEntry): Move name splitting regexp into a constant.
        (ChangeLogEntry._parse_reviewer_text): Use _split_reviewer_names.
        (ChangeLogEntry._split_reviewer_names): Rename to be more specific.
        (ChangeLogEntry._split_author_names_with_emails): Rename to be more specific and require emails.
        (ChangeLogEntry._parse_author_text): Use _split_author_names_with_emails.
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_parse_authors): Test case with Paweł's name.

2013-02-15  Dirk Schulze  <krit@webkit.org>

        [Chromium] Add runtime flag for CanvasPath
        https://bugs.webkit.org/show_bug.cgi?id=109997

        Reviewed by Adam Barth.

        Added runtime flag for Canvas Path. Enabled it by default for TestShell. Otherwise
        the constructor for Path on DOMWindow would never be activatable, since the script
        is running after creating the DOMWindow object.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2013-02-20  Jochen Eisinger  <jochen@chromium.org>

        [chromium] use a WebTestProxyBase pointer to identify the window we need the history for
        https://bugs.webkit.org/show_bug.cgi?id=110346

        Reviewed by Adam Barth.

        Using an index is very brittle, as the TestRunner API does not define
        any ordering of windows.

        Also, make TestRunner::shouldDumpBackForwardList() so content shell can
        trigger the capturing in the browser process before generating the
        text dump.

        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestRunner):
        (WebTestRunner::WebTestDelegate::captureHistoryForWindow):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::captureTree):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::captureHistoryForWindow):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-02-19  Rouslan Solomakhin  <rouslan@chromium.org>

        [Chromium] Serve spellcheck suggestions for editing/spelling/spelling-changed-text.html from cache
        https://bugs.webkit.org/show_bug.cgi?id=109220

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp:
        (WebTestRunner::MockSpellCheck::hasInCache): Added a method to detect whether spellcheck results can be served from cache.
        (WebTestRunner):
        (WebTestRunner::MockSpellCheck::fillSuggestionList): Modified to suggest "checker" for the word "cheher".
        (WebTestRunner::MockSpellCheck::initializeIfNeeded): Modified to mark "cheher" as misspelling.
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.h:
        (MockSpellCheck):
        * DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp:
        (WebTestRunner::SpellCheckClient::requestCheckingOfText): Modified to serve spellcheck suggestions from cache when possible.

2013-02-20  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Gtk] HTML5 Media controls require a design refresh
        https://bugs.webkit.org/show_bug.cgi?id=83869

        Reviewed by Philippe Normand.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeGtkFontSettings): Added gnome as default icon theme for
        the DRT.
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::initializeGtkSettings): Added gnome as default icon theme for
        the WTR.
        * gtk/jhbuild.modules: Added gnome-icon-theme-symbolic as external
        dependency.

2013-02-20  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move most of the remaining mocks to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=110217

        Reviewed by Nico Weber.

        While most of the functionality provided by these mocks is also
        available in the content module, there is no straight forward way to
        inject the mock results required for layout tests.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestRunner):
        (WebTestRunner::WebTestProxy::geolocationClient):
        (WebTestRunner::WebTestProxy::speechInputController):
        (WebTestRunner::WebTestProxy::speechRecognizer):
        (WebTestRunner::WebTestProxy::deviceOrientationClient):
        (WebTestRunner::WebTestProxy::requestPointerLock):
        (WebTestRunner::WebTestProxy::requestPointerUnlock):
        (WebTestRunner::WebTestProxy::isPointerLocked):
        * DumpRenderTree/chromium/TestRunner/src/MockWebSpeechInputController.cpp: Renamed from Tools/DumpRenderTree/chromium/MockWebSpeechInputController.cpp.
        (WebTestRunner::MockWebSpeechInputController::MockWebSpeechInputController):
        (WebTestRunner):
        (WebTestRunner::MockWebSpeechInputController::~MockWebSpeechInputController):
        (WebTestRunner::MockWebSpeechInputController::setDelegate):
        (WebTestRunner::MockWebSpeechInputController::addMockRecognitionResult):
        (WebTestRunner::MockWebSpeechInputController::setDumpRect):
        (WebTestRunner::MockWebSpeechInputController::clearResults):
        (WebTestRunner::MockWebSpeechInputController::startRecognition):
        (WebTestRunner::MockWebSpeechInputController::cancelRecognition):
        (WebTestRunner::MockWebSpeechInputController::stopRecording):
        (WebTestRunner::MockWebSpeechInputController::speechTaskFired):
        (WebTestRunner::MockWebSpeechInputController::SpeechTask::SpeechTask):
        (WebTestRunner::MockWebSpeechInputController::SpeechTask::stop):
        (WebTestRunner::MockWebSpeechInputController::SpeechTask::runIfValid):
        * DumpRenderTree/chromium/TestRunner/src/MockWebSpeechInputController.h: Renamed from Tools/DumpRenderTree/chromium/MockWebSpeechInputController.h.
        (WebKit):
        (WebTestRunner):
        (MockWebSpeechInputController):
        (WebTestRunner::MockWebSpeechInputController::taskList):
        (SpeechTask):
        * DumpRenderTree/chromium/TestRunner/src/MockWebSpeechRecognizer.cpp: Renamed from Tools/DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp.
        (WebTestRunner::MockWebSpeechRecognizer::MockWebSpeechRecognizer):
        (WebTestRunner):
        (WebTestRunner::MockWebSpeechRecognizer::~MockWebSpeechRecognizer):
        (WebTestRunner::MockWebSpeechRecognizer::setDelegate):
        (WebTestRunner::MockWebSpeechRecognizer::start):
        (WebTestRunner::MockWebSpeechRecognizer::stop):
        (WebTestRunner::MockWebSpeechRecognizer::abort):
        (WebTestRunner::MockWebSpeechRecognizer::addMockResult):
        (WebTestRunner::MockWebSpeechRecognizer::setError):
        (WebTestRunner::MockWebSpeechRecognizer::startTaskQueue):
        (WebTestRunner::MockWebSpeechRecognizer::clearTaskQueue):
        (WebTestRunner::MockWebSpeechRecognizer::StepTask::runIfValid):
        * DumpRenderTree/chromium/TestRunner/src/MockWebSpeechRecognizer.h: Renamed from Tools/DumpRenderTree/chromium/MockWebSpeechRecognizer.h.
        (WebKit):
        (WebTestRunner):
        (MockWebSpeechRecognizer):
        (WebTestRunner::MockWebSpeechRecognizer::wasAborted):
        (WebTestRunner::MockWebSpeechRecognizer::client):
        (WebTestRunner::MockWebSpeechRecognizer::handle):
        (WebTestRunner::MockWebSpeechRecognizer::taskList):
        (Task):
        (WebTestRunner::MockWebSpeechRecognizer::Task::Task):
        (WebTestRunner::MockWebSpeechRecognizer::Task::~Task):
        (StepTask):
        (WebTestRunner::MockWebSpeechRecognizer::StepTask::StepTask):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):
        (WebTestRunner::TestInterfaces::windowOpened):
        (WebTestRunner):
        (WebTestRunner::TestInterfaces::windowClosed):
        (WebTestRunner::TestInterfaces::windowList):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::requestPointerLock):
        (WebTestRunner):
        (WebTestRunner::TestRunner::requestPointerUnlock):
        (WebTestRunner::TestRunner::isPointerLocked):
        (WebTestRunner::TestRunner::didAcquirePointerLockInternal):
        (WebTestRunner::TestRunner::didNotAcquirePointerLockInternal):
        (WebTestRunner::TestRunner::didLosePointerLockInternal):
        (WebTestRunner::TestRunner::windowCount):
        (WebTestRunner::TestRunner::setMockDeviceOrientation):
        (WebTestRunner::TestRunner::numberOfPendingGeolocationPermissionRequests):
        (WebTestRunner::TestRunner::setGeolocationPermission):
        (WebTestRunner::TestRunner::setMockGeolocationPosition):
        (WebTestRunner::TestRunner::setMockGeolocationPositionUnavailableError):
        (WebTestRunner::TestRunner::addMockSpeechInputResult):
        (WebTestRunner::TestRunner::setMockSpeechInputDumpRect):
        (WebTestRunner::TestRunner::addMockSpeechRecognitionResult):
        (WebTestRunner::TestRunner::setMockSpeechRecognitionError):
        (WebTestRunner::TestRunner::wasMockSpeechRecognitionAborted):
        (WebTestRunner::TestRunner::didAcquirePointerLock):
        (WebTestRunner::TestRunner::didNotAcquirePointerLock):
        (WebTestRunner::TestRunner::didLosePointerLock):
        (WebTestRunner::TestRunner::setPointerLockWillRespondAsynchronously):
        (WebTestRunner::TestRunner::setPointerLockWillFailSynchronously):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebTestRunner):
        (TestRunner):
        (HostMethodTask):
        (WebTestRunner::TestRunner::HostMethodTask::HostMethodTask):
        (WebTestRunner::TestRunner::HostMethodTask::runIfValid):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::~WebTestProxyBase):
        (WebTestRunner::WebTestProxyBase::setInterfaces):
        (WebTestRunner::WebTestProxyBase::setDelegate):
        (WebTestRunner::WebTestProxyBase::reset):
        (WebTestRunner::WebTestProxyBase::captureTree):
        (WebTestRunner::WebTestProxyBase::geolocationClientMock):
        (WebTestRunner):
        (WebTestRunner::WebTestProxyBase::deviceOrientationClientMock):
        (WebTestRunner::WebTestProxyBase::speechInputControllerMock):
        (WebTestRunner::WebTestProxyBase::speechRecognizerMock):
        (WebTestRunner::WebTestProxyBase::geolocationClient):
        (WebTestRunner::WebTestProxyBase::speechInputController):
        (WebTestRunner::WebTestProxyBase::speechRecognizer):
        (WebTestRunner::WebTestProxyBase::deviceOrientationClient):
        (WebTestRunner::WebTestProxyBase::requestPointerLock):
        (WebTestRunner::WebTestProxyBase::requestPointerUnlock):
        (WebTestRunner::WebTestProxyBase::isPointerLocked):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::reset):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebKit):
        (WebViewHost):

2013-02-20  Andras Becsi  <andras.becsi@digia.com>

        [Qt] Make debug builds possible on 32bit Linux
        https://bugs.webkit.org/show_bug.cgi?id=110231

        Reviewed by Tor Arne Vestbø.

        Use the stabs format for debug builds to make the object files
        a bit smaller so that they can be linked on a 32bit system.

        * qmake/mkspecs/features/unix/default_post.prf:

2013-02-20  Takashi Toyoshima  <toyoshim@chromium.org>

        Unreviewed. Add myself to watch lists.

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/watchlist:

2013-02-19  Joshua Bell  <jsbell@chromium.org>

        Remove warning from run-bindings-tests
        https://bugs.webkit.org/show_bug.cgi?id=110285

        Reviewed by Kentaro Hara.

        Since wkrev.com/139331 run-bindings-tests has been harmlessly emitting
        "Unknown option: idlattributesfile". That option was removed from
        bindings/scripts/preprocess-idls.pl but was still being passed by
        the test script. Remove it.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency): Remove unused arg.

2013-02-19  Elliott Sprehn  <esprehn@chromium.org>

        Unreviewed. Add myself to watch lists.

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/watchlist:

2013-02-19  Hans Muller  <hmuller@adobe.com>

        Unreviewed, corrected primary email.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-19  Hans Muller  <hmuller@adobe.com>

        Unreviewed. Adding myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-19  Pravin D  <pravind@webkit.org>

        Unreviewed, changing primary email.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-19  Alan Cutter  <alancutter@chromium.org>

        REGRESSION: Sheriffbot is failing to process rollout requests
        https://bugs.webkit.org/show_bug.cgi?id=106945

        Reviewed by Adam Barth.

        Modified Sheriffbot build script to track the svn repo from git and add bot user details to the git repo config file.
        This resolves problems when Sheriffbot attempts to perform a rollout request.

        * EWSTools/GoogleComputeEngine/build-feeder-style-sheriffbot.sh:
        * EWSTools/configure-git-svn.sh: Copied from Tools/EWSTools/create-webkit-git.
        * EWSTools/configure-git-user.sh: Renamed from Tools/EWSTools/create-webkit-git.

2013-02-19  Claudio Saavedra  <csaavedra@igalia.com>

        Unreviewed build fix.

        * efl/jhbuild.modules:
        * gtk/jhbuild.modules:

        Bump harfbuzz module to 0.9.7. See related bug 110145.

2013-02-19  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Skip the build with a warning if certain tools cannot be found in the PATH
        https://bugs.webkit.org/show_bug.cgi?id=110215

        Reviewed by Tor Arne Vestbø.

        Check that gperf, python, ruby, perl, bison and flex are in the PATH before
        continuing the build. Otherwise skip with an error message explaining which
        programs are missing from the build.

        * qmake/mkspecs/features/configure.prf:
        * qmake/mkspecs/features/functions.prf:

2013-02-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143319.
        http://trac.webkit.org/changeset/143319
        https://bugs.webkit.org/show_bug.cgi?id=110214

        Causes build issues on win32 (Requested by carewolf on
        #webkit).

        * qmake/mkspecs/features/features.pri:

2013-02-19  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Enable MathML
        https://bugs.webkit.org/show_bug.cgi?id=110205

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/features.pri:

2013-02-17  Andrei Bucur  <abucur@adobe.com>

        Unreviewed. Adding myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-19  Hajime Morrita  <morrita@google.com>

        Unreviewed, updated spelling of my name.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed. Adjust expectations.

        * TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:
        (TestWebKitAPI::TEST):

2013-02-18  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK gardening.

        * Scripts/run-gtk-tests:
        (TestRunner): Skipped the ReloadPageAfterCrash unit test as it is flakily timing out.

2013-02-18  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        [Qt][WK2] Remove duped test name and append new test in project file
        https://bugs.webkit.org/show_bug.cgi?id=110117

        A new WK2 API test has landed recently (ResizeWindowAfterCrash), this patch will
        add this test into the runnable test suite and remove a duped test in project file.

        Reviewed by Jocelyn Turcotte.

        * TestWebKitAPI/Tests/WebKit2/WebKit2.pro:

2013-02-18  Jochen Eisinger  <jochen@chromium.org>

        [chromium] remove log spew from dumpAllBackForwardLists
        https://bugs.webkit.org/show_bug.cgi?id=110108

        Reviewed by Nico Weber.

        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:

2013-02-18  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] Disable failing API tests
        https://bugs.webkit.org/show_bug.cgi?id=110081

        Reviewed by Kenneth Rohde Christiansen.

        Disable DOMWindowExtensionBasic WK2 test on EFL port as it times out.

        * TestWebKitAPI/PlatformEfl.cmake:

2013-02-18  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Disable the build if certain configure checks fail
        https://bugs.webkit.org/show_bug.cgi?id=110094

        Reviewed by Tor Arne Vestbø.

        Allow for the build to be skipped (clear out SUBDIRS) if certain
        configure conditions aren't met.

        * qmake/mkspecs/features/configure.prf:

2013-02-15  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt][WK2] Support WK2 API tests
        https://bugs.webkit.org/show_bug.cgi?id=109843

        Reviewed by Jocelyn Turcotte.

        * TestWebKitAPI/DerivedSources.pri: Added.
        * TestWebKitAPI/InjectedBundle.pri: Added.
        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/TestWebKitAPI.pri:
        * TestWebKitAPI/TestWebKitAPI.pro:
        * TestWebKitAPI/Tests/JavaScriptCore/JavaScriptCore.pro: Added.
        * TestWebKitAPI/Tests/WTF/WTF.pro:
        * TestWebKitAPI/Tests/WebKit2/WebKit2.pro: Added.
        * TestWebKitAPI/qt/PlatformUtilitiesQt.cpp:
        (TestWebKitAPI::Util::sleep):
        (TestWebKitAPI::Util::createInjectedBundlePath):
        (TestWebKitAPI::Util::createURLForResource):
        (TestWebKitAPI::Util::isKeyDown):
        (Util):
        * TestWebKitAPI/qt/PlatformWebViewQt.cpp: Added.
        (TestWebKitAPI):
        (WrapperWindow):
        (TestWebKitAPI::WrapperWindow::WrapperWindow):
        (TestWebKitAPI::WrapperWindow::handleStatusChanged):
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        (TestWebKitAPI::PlatformWebView::resizeTo):
        (TestWebKitAPI::PlatformWebView::page):
        (TestWebKitAPI::PlatformWebView::focus):
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress):
        (TestWebKitAPI::PlatformWebView::simulateAltKeyPress):
        (TestWebKitAPI::PlatformWebView::simulateMouseMove):
        (TestWebKitAPI::PlatformWebView::simulateRightClick):
        * TestWebKitAPI/qt/main.cpp:
        (addQtWebProcessToPath):
        (main):

2013-02-18  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] Refactor Ewk_Favicon code and stop relying on internal C++ API
        https://bugs.webkit.org/show_bug.cgi?id=108598

        Reviewed by Kenneth Rohde Christiansen.

        Update EFL's MiniBrowser to make use of new Ewk_Favicon API.

        * MiniBrowser/efl/main.c:
        (update_view_favicon):
        (on_view_favicon_changed):
        (window_create):

2013-02-18  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        Unreviewed. Add myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: reportLeaf method doesn't report the leaf node properly.
        https://bugs.webkit.org/show_bug.cgi?id=109554

        In some cases leaves have no pointer so with the old schema we can't generate nodeId for them because we
        can't insert 0 into hashmap. It happens when we call addPrivateBuffer method.

        Drive by fix: I introduced a client interface for the HeapGraphSerializer.
        It helps me to do the tests for the serializer.

        Reviewed by Yury Semikhatsky.

        It is covered by newly added tests in TestWebKitAPI.

        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp: Added.
        (TestWebKitAPI):
        (HeapGraphReceiver):
        (TestWebKitAPI::HeapGraphReceiver::HeapGraphReceiver):
        (TestWebKitAPI::HeapGraphReceiver::printGraph):
        (TestWebKitAPI::HeapGraphReceiver::dumpNodes):
        (TestWebKitAPI::HeapGraphReceiver::dumpEdges):
        (TestWebKitAPI::HeapGraphReceiver::dumpBaseToRealNodeId):
        (TestWebKitAPI::HeapGraphReceiver::dumpStrings):
        (TestWebKitAPI::HeapGraphReceiver::serializer):
        (TestWebKitAPI::HeapGraphReceiver::chunkPart):
        (TestWebKitAPI::HeapGraphReceiver::dumpPart):
        (TestWebKitAPI::HeapGraphReceiver::stringValue):
        (TestWebKitAPI::HeapGraphReceiver::intValue):
        (TestWebKitAPI::HeapGraphReceiver::nodeToString):
        (TestWebKitAPI::HeapGraphReceiver::edgeToString):
        (TestWebKitAPI::HeapGraphReceiver::printNode):
        (Helper):
        (TestWebKitAPI::Helper::Helper):
        (TestWebKitAPI::Helper::addNode):
        (TestWebKitAPI::Helper::addEdge):
        (TestWebKitAPI::Helper::done):
        (Object):
        (TestWebKitAPI::Helper::Object::Object):
        (TestWebKitAPI::TEST):
        (Owner):
        (TestWebKitAPI::Owner::Owner):
        (TestWebKitAPI::Owner::reportMemoryUsage):

2013-02-18  Ryosuke Niwa  <rniwa@webkit.org>

        WKR build fix. Always use ascii since irclib/ircbot doesn't support unicode.

        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot.next_work_item):

2013-02-17  Kangil Han  <kangil.han@samsung.com>

        Unreviewed. Add myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-17  Alan Cutter  <alancutter@chromium.org>

        GCE EWS bots are all offline
        https://bugs.webkit.org/show_bug.cgi?id=110069

        Reviewed by Eric Seidel.

        Updated GCE EWS build scripts to use the gcel-10-04-v20130104 image instead of the obsoleted ubuntu-10-04-v20120621.
        This changed the ephemeral disk path to /dev/sdb and required /etc/hosts to be chmodded to 644.

        * EWSTools/GoogleComputeEngine/build-chromium-ews.sh:
        * EWSTools/GoogleComputeEngine/build-commit-queue.sh:
        * EWSTools/GoogleComputeEngine/build-cr-linux-debug-ews.sh:
        * EWSTools/GoogleComputeEngine/build-feeder-style-sheriffbot.sh:
        * EWSTools/build-vm.sh:
        * EWSTools/start-queue.sh:

2013-02-18  Eugene Klyuchnikov  <eustas@chromium.org>

        Unreviewed, add myself to commiters.py.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-17  Dongwoo Joshua Im  <dw.im@samsung.com>

        Unreviewed. Add myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-17  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Fix typo in script.

        * EWSTools/start-queue-win.sh:

2013-02-15  Roger Fong  <roger_fong@apple.com>

        Pass in bot name as parameter to start-queue-win script.
        https://bugs.webkit.org/show_bug.cgi?id=109998.

        Reviewed by Darin Adler.

        * EWSTools/start-queue-win.sh:

2013-02-18  Byungwoo Lee  <bw80.lee@samsung.com>

        Unreviewed. Add myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-17  Ryosuke Niwa  <rniwa@webkit.org>

        Rename new-commit-bot to WKR to disambiguate it from commit-queue.

        Rubber-stamped by Andreas Kling.

        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot.begin_work_queue):

2013-02-16  Glenn Adams  <glenn@skynav.com>

        Unreviewed. Add myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-16  Ryosuke Niwa  <rniwa@webkit.org>

        new-commit-bot should report the full name of committer and reviewer instead of just nicks
        https://bugs.webkit.org/show_bug.cgi?id=110040

        Reviewed by Darin Adler.

        Have it report names like "Ryosuke Niwa (rniwa)" instead of just "rniwa".

        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot):
        (NewCommitBot._summarize_commit_log):
        * Scripts/webkitpy/tool/commands/newcommitbot_unittest.py:

2013-02-16  Ryosuke Niwa  <rniwa@webkit.org>

        We need a CIA replacement
        https://bugs.webkit.org/show_bug.cgi?id=110008

        Reviewed by Andreas Kling.

        Added new-commit-bot.

        * Scripts/webkitpy/tool/bot/queueengine.py:
        (QueueEngine.__init__):
        (QueueEngine): Made the sleep tiem configurable.
        (QueueEngine._sleep_message):
        (QueueEngine._sleep):
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        (QueueEngineTest.test_sleep_message):
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/newcommitbot.py: Added.
        (PingPong): Added. Implements the ping pong protocol.
        (NewCommitBot):
        (NewCommitBot.begin_work_queue):
        (NewCommitBot.work_item_log_path):
        (NewCommitBot.next_work_item): Update SVN revision and report any new commits made since
        the last time we checked the head SVN revision.
        (NewCommitBot.process_work_item):
        (NewCommitBot._update_checkout): svn up.
        (NewCommitBot._new_svn_revisions): Returns a range of new revisions.
        (NewCommitBot._summarize_commit_log): Summarize a commit log to be posted on IRC.
        (NewCommitBot.handle_unexpected_error):
        (NewCommitBot.handle_script_error):
        * Scripts/webkitpy/tool/commands/newcommitbot_unittest.py: Added.
        (NewCommitBotTest.test_summarize_commit_log_basic): Tests for summarizing non-rollout commits.
        (NewCommitBotTest.test_summarize_commit_log_rollout): Tests for summarizing rollouts.
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractQueue.execute):
        * Scripts/webkitpy/tool/commands/queuestest.py:
        (MockQueueEngine.__init__):
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:
        (SheriffBotTest.test_command_aliases):
        * Scripts/webkitpy/tool/main.py:
        (WebKitPatch):

2013-02-16  Jochen Eisinger  <jochen@chromium.org>

        [chromium] initialize all variables of TestRunner classes
        https://bugs.webkit.org/show_bug.cgi?id=110013

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):

2013-02-16  Jochen Eisinger  <jochen@chromium.org>

        [chromium] destroy the TestPlugin when the destroy() method is invoked.
        https://bugs.webkit.org/show_bug.cgi?id=110012

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp:
        (WebTestRunner::TestPlugin::destroy):

2013-02-15  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        [WK2] Write a test to simulate crashed WebProcess followed by Window resize
        https://bugs.webkit.org/show_bug.cgi?id=109842

        Reviewed by Benjamin Poulain.

        This new test will kill WebProcess, followed by next resizing the Window. It helps to
        identify if the port is testing for WebPageProxy data members state (e.g. DrawingArea, Frames)
        before making calls into them.

        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/ResizeWindowAfterCrash.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::didFinishLoad):
        (TestWebKitAPI::didCrash):
        (TestWebKitAPI::TEST):

2013-02-15  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Add CString operators for comparison with const char*
        https://bugs.webkit.org/show_bug.cgi?id=109947

        Reviewed by Darin Adler.

        Add tests for WTF::CString's comparison operators.

        * TestWebKitAPI/Tests/WTF/CString.cpp:
        (TEST):

2013-02-15  Zan Dobersek  <zdobersek@igalia.com>

        webkit-patch suggest-reviewers should limit itself to 5 reviewers
        https://bugs.webkit.org/show_bug.cgi?id=107528

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout.suggested_reviewers): Iterate through the sorted commit info list,
        scraping reviewers from the commit information and in the end producing a list
        of reviewers that's sorted from the most to least recent activity of any reviewer
        that has reviewed or authored patches for the changed files.
        * Scripts/webkitpy/tool/commands/queries.py:
        (SuggestReviewers): Use the SuggestReviewers step instead of reimplementing much of
        the same logic.
        (SuggestReviewers._prepare_state): Force the reviewer suggestion because the option
        defaults to False.
        * Scripts/webkitpy/tool/steps/suggestreviewers.py:
        (SuggestReviewers.run): Only list the first five suggested reviewers, now printed out
        on a single line.  Only ask for CC-ing the suggested reviewers to the bug if the
        bug ID is located in the command's state.

2013-02-15  Pablo Flouret  <pablof@motorola.com>

        Unreviewed. Add myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-15  Roger Fong  <roger_fong@apple.com>

        Get Win EWS startup script checked into tree so we can make changes to all the EWS bots more easily.

        * EWSTools/start-queue-win.sh: Added.

2013-02-15  Andreas Kling  <akling@apple.com>

        Unbreak webkit-patch -- can't have both Committer and Contributor entry with same e-mail address.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-15  Joanmarie Diggs  <jdiggs@igalia.com>

        Unreviewed. Add myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-15  Ryosuke Niwa  <rniwa@webkit.org>

        NRWT: ML Debug Test bot is timing out after cleaning up ports
        https://bugs.webkit.org/show_bug.cgi?id=109912

        Reviewed by Simon Fraser.

        Added more debug messgaes to diagnose the issue.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):

2013-02-15  Claudio Saavedra  <csaavedra@igalia.com>

        Unreviewed. Add myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-15  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed. Update Yi Shen, Antonio Gomes and Laszlo Gombos'
        emails on their behalf.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-15  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: implement smart braces functionality
        https://bugs.webkit.org/show_bug.cgi?id=109200

        Reviewed by Pavel Feldman.

        Fix eventSender.keyDown implementation to correctly process opening
        round brace symbol.

        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::keyDown):

2013-02-15  Jochen Eisinger  <jochen@chromium.org>

        Speculative build fix for chromium-win.

        Unreviewed build fix.

        Add declarations of the copy constructor and assignment operator to
        WebTestProxyBase, so VS doesn't try to generate them.

        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:

2013-02-15  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Port GCController to JSC C API
        https://bugs.webkit.org/show_bug.cgi?id=109690

        Reviewed by Benjamin Poulain.

        Rename TestRunner to TestRunnerQt to avoid conflict when
        including TestRunner.h in the future.

        Replaced QObject based GCController implementation with JSC C API
        based one.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::methodNameStringForFailedTest):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (WebCore::DumpRenderTree::testRunner):
        (DumpRenderTree):
        * DumpRenderTree/qt/GCControllerQt.cpp:
        (GCController::getJSObjectCount):
        * DumpRenderTree/qt/GCControllerQt.h: Removed.
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunnerQt::TestRunnerQt):
        (TestRunnerQt::reset):
        (TestRunnerQt::dumpNotifications):
        (TestRunnerQt::processWork):
        (TestRunnerQt::maybeDump):
        (TestRunnerQt::dumpAsText):
        (TestRunnerQt::waitUntilDone):
        (TestRunnerQt::setViewModeMediaFeature):
        (TestRunnerQt::webHistoryItemCount):
        (TestRunnerQt::keepWebHistory):
        (TestRunnerQt::notifyDone):
        (TestRunnerQt::windowCount):
        (TestRunnerQt::grantWebNotificationPermission):
        (TestRunnerQt::ignoreLegacyWebNotificationPermissionRequests):
        (TestRunnerQt::denyWebNotificationPermission):
        (TestRunnerQt::removeAllWebNotificationPermissions):
        (TestRunnerQt::simulateWebNotificationClick):
        (TestRunnerQt::simulateLegacyWebNotificationClick):
        (TestRunnerQt::display):
        (TestRunnerQt::displayInvalidatedRegion):
        (TestRunnerQt::clearBackForwardList):
        (TestRunnerQt::pathToLocalResource):
        (TestRunnerQt::dumpEditingCallbacks):
        (TestRunnerQt::dumpFrameLoadCallbacks):
        (TestRunnerQt::dumpProgressFinishedCallback):
        (TestRunnerQt::dumpUserGestureInFrameLoadCallbacks):
        (TestRunnerQt::dumpResourceLoadCallbacks):
        (TestRunnerQt::dumpResourceResponseMIMETypes):
        (TestRunnerQt::dumpWillCacheResponse):
        (TestRunnerQt::dumpHistoryCallbacks):
        (TestRunnerQt::setWillSendRequestReturnsNullOnRedirect):
        (TestRunnerQt::setWillSendRequestReturnsNull):
        (TestRunnerQt::setWillSendRequestClearHeader):
        (TestRunnerQt::setDeferMainResourceDataLoad):
        (TestRunnerQt::queueBackNavigation):
        (TestRunnerQt::queueForwardNavigation):
        (TestRunnerQt::queueLoad):
        (TestRunnerQt::queueLoadHTMLString):
        (TestRunnerQt::queueReload):
        (TestRunnerQt::queueLoadingScript):
        (TestRunnerQt::queueNonLoadingScript):
        (TestRunnerQt::provisionalLoad):
        (TestRunnerQt::timerEvent):
        (TestRunnerQt::encodeHostName):
        (TestRunnerQt::decodeHostName):
        (TestRunnerQt::closeWebInspector):
        (TestRunnerQt::setDeveloperExtrasEnabled):
        (TestRunnerQt::setAsynchronousSpellCheckingEnabled):
        (TestRunnerQt::showWebInspector):
        (TestRunnerQt::evaluateInWebInspector):
        (TestRunnerQt::goBack):
        (TestRunnerQt::setDefersLoading):
        (TestRunnerQt::setAllowUniversalAccessFromFileURLs):
        (TestRunnerQt::setAllowFileAccessFromFileURLs):
        (TestRunnerQt::setAppCacheMaximumSize):
        (TestRunnerQt::setAutofilled):
        (TestRunnerQt::setValueForUser):
        (TestRunnerQt::setFixedContentsSize):
        (TestRunnerQt::setPrivateBrowsingEnabled):
        (TestRunnerQt::setSpatialNavigationEnabled):
        (TestRunnerQt::setPopupBlockingEnabled):
        (TestRunnerQt::setPluginsEnabled):
        (TestRunnerQt::setPOSIXLocale):
        (TestRunnerQt::setWindowIsKey):
        (TestRunnerQt::setMainFrameIsFirstResponder):
        (TestRunnerQt::setJavaScriptCanAccessClipboard):
        (TestRunnerQt::setXSSAuditorEnabled):
        (TestRunnerQt::dispatchPendingLoadRequests):
        (TestRunnerQt::clearAllApplicationCaches):
        (TestRunnerQt::clearApplicationCacheForOrigin):
        (TestRunnerQt::localStorageDiskUsageForOrigin):
        (TestRunnerQt::setApplicationCacheOriginQuota):
        (TestRunnerQt::applicationCacheDiskUsageForOrigin):
        (TestRunnerQt::originsWithApplicationCache):
        (TestRunnerQt::setCacheModel):
        (TestRunnerQt::setDatabaseQuota):
        (TestRunnerQt::clearAllDatabases):
        (TestRunnerQt::addOriginAccessWhitelistEntry):
        (TestRunnerQt::removeOriginAccessWhitelistEntry):
        (TestRunnerQt::setCustomPolicyDelegate):
        (TestRunnerQt::waitForPolicyDelegate):
        (TestRunnerQt::overridePreference):
        (TestRunnerQt::setUserStyleSheetLocation):
        (TestRunnerQt::setCaretBrowsingEnabled):
        (TestRunnerQt::setAuthorAndUserStylesEnabled):
        (TestRunnerQt::setUserStyleSheetEnabled):
        (TestRunnerQt::setDomainRelaxationForbiddenForURLScheme):
        (TestRunnerQt::callShouldCloseOnWebView):
        (TestRunnerQt::setScrollbarPolicy):
        (TestRunnerQt::setSmartInsertDeleteEnabled):
        (TestRunnerQt::setSelectTrailingWhitespaceEnabled):
        (TestRunnerQt::execCommand):
        (TestRunnerQt::isCommandEnabled):
        (TestRunnerQt::findString):
        (TestRunnerQt::markerTextForListItem):
        (TestRunnerQt::computedStyleIncludingVisitedInfo):
        (TestRunnerQt::elementDoesAutoCompleteForElementWithId):
        (TestRunnerQt::authenticateSession):
        (TestRunnerQt::setIconDatabaseEnabled):
        (TestRunnerQt::setMockDeviceOrientation):
        (TestRunnerQt::setGeolocationPermission):
        (TestRunnerQt::numberOfPendingGeolocationPermissionRequests):
        (TestRunnerQt::setGeolocationPermissionCommon):
        (TestRunnerQt::setMockGeolocationPositionUnavailableError):
        (TestRunnerQt::setMockGeolocationPosition):
        (TestRunnerQt::addMockSpeechInputResult):
        (TestRunnerQt::setMockSpeechInputDumpRect):
        (TestRunnerQt::startSpeechInput):
        (TestRunnerQt::evaluateScriptInIsolatedWorldAndReturnValue):
        (TestRunnerQt::evaluateScriptInIsolatedWorld):
        (TestRunnerQt::addUserStyleSheet):
        (TestRunnerQt::removeAllVisitedLinks):
        (TestRunnerQt::addURLToRedirect):
        (TestRunnerQt::originsWithLocalStorage):
        (TestRunnerQt::deleteAllLocalStorage):
        (TestRunnerQt::deleteLocalStorageForOrigin):
        (TestRunnerQt::observeStorageTrackerNotifications):
        (TestRunnerQt::syncLocalStorage):
        (TestRunnerQt::resetPageVisibility):
        (TestRunnerQt::setPageVisibility):
        (TestRunnerQt::setAutomaticLinkDetectionEnabled):
        (TestRunnerQt::setTextDirection):
        (TestRunnerQt::setAlwaysAcceptCookies):
        (TestRunnerQt::setAlwaysBlockCookies):
        (TestRunnerQt::setAudioData):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunnerQt):

2013-02-14  Karen Grunberg  <kareng@chromium.org>

        adding myself as a committer

        * Scripts/webkitpy/common/config/committers.py:

2013-02-14  Glenn Adams  <glenn@skynav.com>

        new-run-webkit-tests needs a shared TestExpectations between all WebKit ports
        https://bugs.webkit.org/show_bug.cgi?id=37565

        Introduce generic TestExpectations file that applies as a fallback for all ports, the location of which
        is LayoutTests/TestExpectations.

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/lint_test_expectations_unittest.py:
        (FakePort.path_to_generic_test_expectations_file):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.path_to_generic_test_expectations_file):
        (Port):
        (Port._port_specific_expectations_files):
        (Port.expectations_files):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort._port_specific_expectations_files):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort._port_specific_expectations_files):
        * Scripts/webkitpy/layout_tests/port/chromium_port_testcase.py:
        (ChromiumPortTestCase.test_expectations_files):
        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort._port_specific_expectations_files):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._port_specific_expectations_files):
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        (GtkPortTest.test_expectations_files):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort._port_specific_expectations_files):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_expectations_ordering):
        (test_expectations_files):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._port_specific_expectations_files):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest.test_expectations_files):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest.test_expectations_files):
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (PrintExpectationsTest.test_paths):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._update_expectations_file):

2013-02-14  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move pixel generation logic to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=109686

        Reviewed by Stephen White.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::~TestInterfaces):
        (WebTestRunner::TestInterfaces::setWebView):
        (WebTestRunner::TestInterfaces::proxy):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (WebTestRunner):
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::setWebView):
        (WebTestRunner):
        (WebTestRunner::TestRunner::setBackingScaleFactor):
        (WebTestRunner::TestRunner::display):
        (WebTestRunner::TestRunner::displayInvalidatedRegion):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebTestRunner):
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::setWebView):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::reset):
        (WebTestRunner::WebTestProxyBase::capturePixels):
        (WebTestRunner):
        (WebTestRunner::WebTestProxyBase::paintRect):
        (WebTestRunner::WebTestProxyBase::paintInvalidatedRegion):
        (WebTestRunner::WebTestProxyBase::paintPagesWithBoundaries):
        (WebTestRunner::WebTestProxyBase::canvas):
        (WebTestRunner::WebTestProxyBase::displayRepaintMask):
        (WebTestRunner::WebTestProxyBase::display):
        (WebTestRunner::WebTestProxyBase::displayInvalidatedRegion):
        (WebTestRunner::WebTestProxyBase::discardBackingStore):
        (WebTestRunner::WebTestProxyBase::setWindowRect):
        (WebTestRunner::WebTestProxyBase::userMediaClient):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::createMainWindow):
        (TestShell::~TestShell):
        (TestShell::showDevTools):
        (TestShell::closeDevTools):
        (TestShell::dump):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::setWindowRect):
        (WebViewHost::setDeviceScaleFactor):
        (WebViewHost::reset):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-02-14  Tony Chang  <tony@chromium.org>

        Unreviewed, set svn:eol-style native for .sln, .vcproj, and .vsprops files.
        https://bugs.webkit.org/show_bug.cgi?id=96934

        * CLWrapper/CLWrapper.sln: Modified property svn:eol-style.
        * DumpRenderTree/DumpRenderTree.sln: Modified property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTreeLauncherCommon.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTreeLauncherDebug.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTreeLauncherDebugAll.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTreeLauncherDebugCairoCFLite.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTreeLauncherProduction.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTreeLauncherRelease.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTreeLauncherReleaseCairoCFLite.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/ImageDiffLauncherCommon.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/ImageDiffLauncherDebug.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/ImageDiffLauncherDebugAll.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/ImageDiffLauncherDebugCairoCFLite.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/ImageDiffLauncherProduction.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/ImageDiffLauncherRelease.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/ImageDiffLauncherReleaseCairoCFLite.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/ImageDiffWinCairoCommon.vsprops: Added property svn:eol-style.
        * MIDLWrapper/MIDLWrapper.sln: Modified property svn:eol-style.
        * MiniBrowser/Configurations/MiniBrowserLauncherCommon.vsprops: Added property svn:eol-style.
        * MiniBrowser/Configurations/MiniBrowserLauncherDebug.vsprops: Added property svn:eol-style.
        * MiniBrowser/Configurations/MiniBrowserLauncherDebugAll.vsprops: Added property svn:eol-style.
        * MiniBrowser/Configurations/MiniBrowserLauncherDebugCairoCFLite.vsprops: Added property svn:eol-style.
        * MiniBrowser/Configurations/MiniBrowserLauncherProduction.vsprops: Added property svn:eol-style.
        * MiniBrowser/Configurations/MiniBrowserLauncherRelease.vsprops: Added property svn:eol-style.
        * MiniBrowser/Configurations/MiniBrowserLauncherReleaseCairoCFLite.vsprops: Added property svn:eol-style.
        * TestWebKitAPI/Configurations/TestWebKitAPICFNetwork.vsprops: Added property svn:eol-style.
        * TestWebKitAPI/Configurations/TestWebKitAPIDebug.vsprops: Added property svn:eol-style.
        * TestWebKitAPI/Configurations/TestWebKitAPIDebugAll.vsprops: Added property svn:eol-style.
        * TestWebKitAPI/Configurations/TestWebKitAPIDebugCairoCFLite.vsprops: Added property svn:eol-style.
        * TestWebKitAPI/Configurations/TestWebKitAPIInjectedBundleCommon.vsprops: Added property svn:eol-style.
        * TestWebKitAPI/Configurations/TestWebKitAPIRelease.vsprops: Added property svn:eol-style.
        * TestWebKitAPI/Configurations/TestWebKitAPIReleaseCairoCFLite.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/Configurations/WebKitTestRunnerCoreGraphics.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/WebKitTestRunner.sln: Modified property svn:eol-style.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherCommon.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherDebug.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherDebugAll.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherDebugCairoCFLite.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherProduction.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherRelease.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherReleaseCairoCFLite.vsprops: Added property svn:eol-style.
        * WinLauncher/WinLauncherLauncherCommon.vsprops: Added property svn:eol-style.
        * WinLauncher/WinLauncherLauncherDebug.vsprops: Added property svn:eol-style.
        * WinLauncher/WinLauncherLauncherDebugAll.vsprops: Added property svn:eol-style.
        * WinLauncher/WinLauncherLauncherDebugCairoCFLite.vsprops: Added property svn:eol-style.
        * WinLauncher/WinLauncherLauncherProduction.vsprops: Added property svn:eol-style.
        * WinLauncher/WinLauncherLauncherRelease.vsprops: Added property svn:eol-style.
        * WinLauncher/WinLauncherLauncherReleaseCairoCFLite.vsprops: Added property svn:eol-style.

2013-02-14  Tony Chang  <tony@chromium.org>

        Unreviewed, set svn:eol-style CRLF for .sln files.

        * CLWrapper/CLWrapper.sln: Modified property svn:eol-style.
        * DumpRenderTree/DumpRenderTree.sln: Modified property svn:eol-style.
        * MIDLWrapper/MIDLWrapper.sln: Modified property svn:eol-style.
        * WebKitTestRunner/WebKitTestRunner.sln: Modified property svn:eol-style.

2013-02-14  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Errors when building WebKit2 with Clang
        https://bugs.webkit.org/show_bug.cgi?id=109603

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::resizeTo): Cast the width and height parameters to the integer
        type when constructing the GtkAllocation.

        * CLWrapper/CLWrapper.sln: Modified property svn:eol-style.
        * DumpRenderTree/DumpRenderTree.sln: Modified property svn:eol-style.
        * MIDLWrapper/MIDLWrapper.sln: Modified property svn:eol-style.
        * WebKitTestRunner/WebKitTestRunner.sln: Modified property svn:eol-style.

2013-02-14  Roger Fong  <roger_fong@apple.com>

        Add eol-style=native to solution files. Add a new solution file.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree.sln: Added property svn:eol-style.
        * TestWebKitAPI/TestWebKitAPI.vcxproj: Added property svn:eol-style. Modified property svn:ignore.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.sln: Added.

2013-02-14  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Missing call to g_object_ref while retrieving accessible table cells
        https://bugs.webkit.org/show_bug.cgi?id=106903

        Reviewed by Martin Robinson.

        Both DRT and WKTR need to call g_object_unref() now that an extra
        reference is added in the implementation of atk_table_ref_at().

        * DumpRenderTree/atk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::cellForColumnAndRow): Call g_object_unref
        before returning the new instance of AccessibilityUIElement.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::cellForColumnAndRow): Ditto.

2013-02-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142841.
        http://trac.webkit.org/changeset/142841
        https://bugs.webkit.org/show_bug.cgi?id=109791

        Caused webkit_unit_tests to crash on chromium bots. (Requested
        by atwilson_ on #webkit).

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createOutputSurface):
        (WebViewHost::initializeLayerTreeView):

2013-02-13  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][jhbuild] Silence GSettings-related warning.
        https://bugs.webkit.org/show_bug.cgi?id=109749

        Reviewed by Martin Robinson.

        Apply the same change done to the GTK+ port in r109127; this
        silences the warnings printed by glib about the memory GSettings
        backend being used.

        Not only does this make the bots (as well as manual runs of, say,
        WebKitTestRunner) much more silent, but it also removes an stderr
        line (which run-perf-tests considers as a failure).

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort.setup_environ_for_server): Explicitly set the
        GSETTINGS_BACKEND environment variable to "memory".

2013-02-14  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move mock notification presenter to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=109706

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestRunner::WebTestProxy::notificationPresenter):
        * DumpRenderTree/chromium/TestRunner/src/NotificationPresenter.cpp: Renamed from Tools/DumpRenderTree/chromium/NotificationPresenter.cpp.
        (WebTestRunner::NotificationPresenter::NotificationPresenter):
        (WebTestRunner):
        (WebTestRunner::NotificationPresenter::~NotificationPresenter):
        (WebTestRunner::NotificationPresenter::grantPermission):
        (WebTestRunner::NotificationPresenter::simulateClick):
        (WebTestRunner::NotificationPresenter::show):
        (WebTestRunner::NotificationPresenter::cancel):
        (WebTestRunner::NotificationPresenter::objectDestroyed):
        (WebTestRunner::NotificationPresenter::checkPermission):
        (WebTestRunner::NotificationPresenter::requestPermission):
        * DumpRenderTree/chromium/TestRunner/src/NotificationPresenter.h: Renamed from Tools/DumpRenderTree/chromium/NotificationPresenter.h.
        (WebTestRunner):
        (NotificationPresenter):
        (WebTestRunner::NotificationPresenter::setDelegate):
        (WebTestRunner::NotificationPresenter::reset):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::setDelegate):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::notificationPresenter):
        (WebTestRunner):
        (WebTestRunner::TestRunner::grantWebNotificationPermission):
        (WebTestRunner::TestRunner::simulateLegacyWebNotificationClick):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebKit):
        (WebTestRunner):
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::notificationPresenter):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        (TestShell::resetTestController):
        * DumpRenderTree/chromium/TestShell.h:
        (WebKit):
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:

2013-02-13  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Add separate DumpRenderTree VS2010 solution file.

        * DumpRenderTree/DumpRenderTree.vcxproj: Added property svn:ignore.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree.sln: Added.

2013-02-12  James Robinson  <jamesr@chromium.org>

        [chromium] Request WebLayerTreeView for DumpRenderTree via explicit testing path
        https://bugs.webkit.org/show_bug.cgi?id=109634

        Reviewed by Adrienne Walker.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createOutputSurface):
        (WebViewHost::initializeLayerTreeView):

2013-02-13  David Farler  <dfarler@apple.com>

        TestWebKitAPI fails to build for iphonesimulator: 'CFNetwork/CFNetworkDefs.h' file not found
        https://bugs.webkit.org/show_bug.cgi?id=109766

        Reviewed by David Kilzer.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        - Don't search Mac OS X header search paths when building on iOS

2013-02-13  Zan Dobersek  <zdobersek@igalia.com>

        The 'global isinf/isnan' compiler quirk required when using clang with libstdc++
        https://bugs.webkit.org/show_bug.cgi?id=109325

        Reviewed by Anders Carlsson.

        Prefix calls to the isinf and isnan methods with std::, declaring we want to use the
        two methods as they're provided by the C++ standard library being used.

        * DumpRenderTree/TestRunner.cpp:
        (setAppCacheMaximumSizeCallback):
        (setApplicationCacheOriginQuotaCallback):
        (setDatabaseQuotaCallback):

2013-02-13  Alan Cutter  <alancutter@chromium.org>

        cr-linux debug should use clang and maybe be a components build
        https://bugs.webkit.org/show_bug.cgi?id=108512

        Reviewed by Adam Barth.

        Modified GCE cr-linux-debug-ews bot build scripts to configure clang over gcc for build performance.
        Build bots will update clang with each bot cycle.
        Updated GCE image paths to suit gcutil 1.6.1.

        * EWSTools/GoogleComputeEngine/build-chromium-ews.sh:
        * EWSTools/GoogleComputeEngine/build-commit-queue.sh:
        * EWSTools/GoogleComputeEngine/build-cr-linux-debug-ews.sh:
        * EWSTools/GoogleComputeEngine/build-feeder-style-sheriffbot.sh:
        * EWSTools/configure-clang-linux.sh: Copied from Tools/EWSTools/GoogleComputeEngine/build-chromium-ews.sh.
        * EWSTools/start-queue.sh:

2013-02-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142747.
        http://trac.webkit.org/changeset/142747
        https://bugs.webkit.org/show_bug.cgi?id=109746

        broke component build (Requested by alecf_gardening on
        #webkit).

        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp: Removed.

2013-02-13  Jochen Eisinger  <jochen@chromium.org>

        [chromium] fix TestRunner build with enable_webrtc=0
        https://bugs.webkit.org/show_bug.cgi?id=109700

        Reviewed by Tony Chang.

        We can't use ENABLE() macros in the TestRunner library, however,
        ENABLE_WEBRTC is defined by build/common.gypi, so we can use it.

        * DumpRenderTree/chromium/TestRunner/src/MockConstraints.cpp:
        * DumpRenderTree/chromium/TestRunner/src/MockWebMediaStreamCenter.cpp:
        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCDTMFSenderHandler.cpp:
        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCDataChannelHandler.cpp:
        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCPeerConnectionHandler.cpp:
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::userMediaClient):
        * DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.cpp:

2013-02-12  Roger Fong  <roger_fong@apple.com>

        TestWebKitAPI and record-memory projects and property sheets for VS2010.
        https://bugs.webkit.org/show_bug.cgi?id=107034

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.vcxproj: Added.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj: Added.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters: Added.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIPostBuild.cmd: Copied from Tools/TestWebKitAPI/win/TestWebKitAPIPostBuild.cmd.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIPreBuild.cmd: Copied from Tools/TestWebKitAPI/win/TestWebKitAPIPreBuild.cmd.
        * win/record-memory: Added.
        * win/record-memory/main.cpp: Copied from Tools/record-memory-win/main.cpp.
        * win/record-memory/record-memory.vcxproj: Added.
        * win/record-memory/record-memory.vcxproj.filters: Added.
        * win/record-memory/record-memoryCommon.props: Added.
        * win/record-memory/record-memoryDebug.props: Added.
        * win/record-memory/record-memoryRelease.props: Added.

2013-02-13  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Use the source id when creating new tracks
        https://bugs.webkit.org/show_bug.cgi?id=109688

        Reviewed by Adam Barth.

        Switching mock to new API.

        * DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.cpp:
        (WebTestRunner::WebUserMediaClientMock::requestUserMedia):

2013-02-13  Brent Fulgham  <bfulgham@webkit.org>

        [Windows] Unreviewed VS2010 fix to add $(ConfigurationBuildDir)/private
        to include paths, to match VS2005 build behavior.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherCommon.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherCommon.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginCommon.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherCommon.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibCommon.props:

2013-02-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142736.
        http://trac.webkit.org/changeset/142736
        https://bugs.webkit.org/show_bug.cgi?id=109716

        Broke ABI, nightly builds crash on launch (Requested by ap on
        #webkit).

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):

2013-02-13  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL][WTR] Regression(r141836): WTR crashes on exit
        https://bugs.webkit.org/show_bug.cgi?id=109456

        Reviewed by Anders Carlsson.

        WebView instance must not live longer than EwkView, as EwkView owns
        objects that page proxy refers to, doing otherwise leads to a crash.

        Test controller has own ptr containing WebView. Invoking of ewk_shutdown()
        leads to evas objects deletion. So, the problem was that test controller was
        deleted after ewk_shutdown() had been called in main() function causing
        crashes on WTR exit.

        The patch introduces a scope for test controller so that it is deleted first.

        * WebKitTestRunner/efl/main.cpp:
        (main):

2013-02-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: reportLeaf method doesn't report the leaf node properly.
        https://bugs.webkit.org/show_bug.cgi?id=109554

        In some cases leaves have no pointer so with the old schema we can't generate nodeId for them because we
        can't insert 0 into hashmap. It happens when we call addPrivateBuffer method.

        Drive by fix: I introduced a client interface for the HeapGraphSerializer.
        It helps me to do the tests for the serializer.

        Reviewed by Yury Semikhatsky.

        It is covered by newly added tests in TestWebKitAPI.

        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp: Added.
        (TestWebKitAPI):
        (HeapGraphReceiver):
        (TestWebKitAPI::HeapGraphReceiver::HeapGraphReceiver):
        (TestWebKitAPI::HeapGraphReceiver::printGraph):
        (TestWebKitAPI::HeapGraphReceiver::dumpNodes):
        (TestWebKitAPI::HeapGraphReceiver::dumpEdges):
        (TestWebKitAPI::HeapGraphReceiver::dumpBaseToRealNodeId):
        (TestWebKitAPI::HeapGraphReceiver::dumpStrings):
        (TestWebKitAPI::HeapGraphReceiver::serializer):
        (TestWebKitAPI::HeapGraphReceiver::chunkPart):
        (TestWebKitAPI::HeapGraphReceiver::dumpPart):
        (TestWebKitAPI::HeapGraphReceiver::stringValue):
        (TestWebKitAPI::HeapGraphReceiver::intValue):
        (TestWebKitAPI::HeapGraphReceiver::nodeToString):
        (TestWebKitAPI::HeapGraphReceiver::edgeToString):
        (TestWebKitAPI::HeapGraphReceiver::printNode):
        (Helper):
        (TestWebKitAPI::Helper::Helper):
        (TestWebKitAPI::Helper::addNode):
        (TestWebKitAPI::Helper::addEdge):
        (TestWebKitAPI::Helper::done):
        (Object):
        (TestWebKitAPI::Helper::Object::Object):
        (TestWebKitAPI::TEST):
        (Owner):
        (TestWebKitAPI::Owner::Owner):
        (TestWebKitAPI::Owner::reportMemoryUsage):

2013-02-13  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [WK2] Remove web intents callbacks
        https://bugs.webkit.org/show_bug.cgi?id=109654

        Reviewed by Benjamin Poulain.

        Web intents was removed by r142549.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):

2013-02-12  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        [WK2] Page reloading will crash UIProcess after WebProcess was killed
        https://bugs.webkit.org/show_bug.cgi?id=109305

        Reviewed by Benjamin Poulain.

        Adding a new test to simulate the case of WebProcess crash followed by a trying
        to load a new page.

        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/ReloadPageAfterCrash.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::didFinishLoad):
        (TestWebKitAPI::TEST):

2013-02-11  Brent Fulgham  <bfulgham@webkit.org>

        Update WebKitDirs.pm for new Windows paths
        https://bugs.webkit.org/show_bug.cgi?id=107714

        Reviewed by Daniel Bates.

        * Scripts/webkitdirs.pm: For each existing Windows environment
        variable, also include creation of the 'new' variables. The
        'old' variables will be removed in a future update.
        (windowsSourceSourceDir): New helper routine to return the
        actual 'Source' folder of the WebKit source tree.

2013-02-12  Alec Flett  <alecflett@chromium.org>

        Fix signedness in WebTestProxy
        https://bugs.webkit.org/show_bug.cgi?id=109623

        Reviewed by Adam Barth.

        Fix signedness problem, using size_t instead of int.

        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:

2013-02-12  Raymond Toy  <rtoy@google.com>

        Add alias
        https://bugs.webkit.org/show_bug.cgi?id=109621

        No review needed.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-12  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move text dump generation to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=109575

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebKit):
        (WebTestRunner::WebTestDelegate::captureHistoryForWindow):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestCommon.cpp: Copied from Tools/DumpRenderTree/chromium/TestRunner/src/TestCommon.h.
        (WebTestRunner::normalizeLayoutTestURL):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestCommon.h:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::checkResponseMimeType):
        (WebTestRunner):
        (WebTestRunner::TestRunner::shouldDumpAsText):
        (WebTestRunner::TestRunner::shouldGeneratePixelResults):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebPermissions.cpp:
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::captureTree):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dump):
        (TestShell::captureHistoryForWindow):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::captureHistoryForWindow):
        * DumpRenderTree/chromium/WebViewHost.h:

2013-02-12  Jessie Berlin  <jberlin@apple.com>

        Rollout r142618, it broke all the Mac builds.

        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp: Removed.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2013-02-12  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Chromium compilation after r142618.

        * TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:
        (TestWebKitAPI::HeapGraphReceiver::printNode):

2013-02-12  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add an optional moduleset with hard to get packages (including libsecret)
        https://bugs.webkit.org/show_bug.cgi?id=109195

        Reviewed by Philippe Normand.

        Add an optional moduleset that includes libsecret. This moduleset will
        be used to install some annoyingly hard to obtain dependencies on older
        distributions.

        * gtk/jhbuild-optional.modules: Added.
        * gtk/jhbuild.modules: Add a reference to the new moduleset file.

2013-02-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: reportLeaf method doesn't report the leaf node properly.
        https://bugs.webkit.org/show_bug.cgi?id=109554

        In some cases leaves have no pointer. As example when we report a leaf via addPrivateBuffer.
        This patch has new set of tests for HeapGraphSerializer.

        Reviewed by Yury Semikhatsky.

        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp: Added.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2013-02-12  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed followup to r142606, the EFL port also enables the CSS image-set
        feature so the new configuration option's default value should reflect that.

        * Scripts/webkitperl/FeatureList.pm:

2013-02-12  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Enable CSS Variables feature in development builds
        https://bugs.webkit.org/show_bug.cgi?id=109474

        Reviewed by Martin Robinson.

        * Scripts/webkitperl/FeatureList.pm: Enable the feature on development
        builds of the GTK port.

2013-02-12  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Enable CSS image-set support in development builds
        https://bugs.webkit.org/show_bug.cgi?id=109475

        Reviewed by Martin Robinson.

        * Scripts/webkitperl/FeatureList.pm: Add the configuration option for the feature.
        Note that the Mac port also enables the feature but does so in Platform.h as the feature
        is also enabled for the iOS port which can't at the moment be detected via webkitperl.

2013-02-12  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Enable DOM4 events constructors in development builds
        https://bugs.webkit.org/show_bug.cgi?id=109471

        Reviewed by Martin Robinson.

        * Scripts/webkitperl/FeatureList.pm: Enable the feature for the GTK port as well.

2013-02-12  Zan Dobersek  <zdobersek@igalia.com>

        Remove unnecessary variables from FeatureList.pm
        https://bugs.webkit.org/show_bug.cgi?id=109558

        Reviewed by Daniel Bates.

        A small cleanup, removing unused variables for which the related configuration
        options were already removed.

        * Scripts/webkitperl/FeatureList.pm:

2013-02-12  Zan Dobersek  <zdobersek@igalia.com>

        Remove ENABLE_XHR_RESPONSE_BLOB handling from various build systems
        https://bugs.webkit.org/show_bug.cgi?id=109481

        Reviewed by Daniel Bates.

        The ENABLE_XHR_RESPONSE_BLOB feature define was removed from the code
        back in r120574. There are still occurrences of it in various build systems
        which should all be removed as they are useless.

        * Scripts/webkitperl/FeatureList.pm:

2013-02-12  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move webrtc mocks to testrunner library
        https://bugs.webkit.org/show_bug.cgi?id=109041

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (WebKitSupportTestEnvironment):
        (WebKitSupportTestEnvironment::mockPlatform):
        (main):
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp:
        (MockWebKitPlatformSupport::setInterfaces):
        (MockWebKitPlatformSupport::createMediaStreamCenter):
        (MockWebKitPlatformSupport::createRTCPeerConnectionHandler):
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.h:
        (WebTestRunner):
        (MockWebKitPlatformSupport):
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        (WebKit):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestRunner):
        (WebTestRunner::WebTestProxy::showContextMenu):
        (WebTestRunner::WebTestProxy::userMediaClient):
        * DumpRenderTree/chromium/TestRunner/src/MockConstraints.cpp: Renamed from Tools/DumpRenderTree/chromium/MockConstraints.cpp.
        (WebTestRunner::MockConstraints::verifyConstraints):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/MockConstraints.h: Renamed from Tools/DumpRenderTree/chromium/MockConstraints.h.
        (WebKit):
        (WebTestRunner):
        (MockConstraints):
        * DumpRenderTree/chromium/TestRunner/src/MockWebMediaStreamCenter.cpp: Renamed from Tools/DumpRenderTree/chromium/MockWebMediaStreamCenter.cpp.
        (WebTestRunner):
        (WebTestRunner::MockWebMediaStreamCenter::MockWebMediaStreamCenter):
        (WebTestRunner::MockWebMediaStreamCenter::queryMediaStreamSources):
        (WebTestRunner::MockWebMediaStreamCenter::didEnableMediaStreamTrack):
        (WebTestRunner::MockWebMediaStreamCenter::didDisableMediaStreamTrack):
        (WebTestRunner::MockWebMediaStreamCenter::didAddMediaStreamTrack):
        (WebTestRunner::MockWebMediaStreamCenter::didRemoveMediaStreamTrack):
        (WebTestRunner::MockWebMediaStreamCenter::didStopLocalMediaStream):
        (MockWebAudioDestinationConsumer):
        (WebTestRunner::MockWebAudioDestinationConsumer::~MockWebAudioDestinationConsumer):
        (WebTestRunner::MockWebMediaStreamCenter::didCreateMediaStream):
        * DumpRenderTree/chromium/TestRunner/src/MockWebMediaStreamCenter.h: Renamed from Tools/DumpRenderTree/chromium/MockWebMediaStreamCenter.h.
        (WebKit):
        (WebTestRunner):
        (MockWebMediaStreamCenter):
        (WebTestRunner::MockWebMediaStreamCenter::MockWebMediaStreamCenter):
        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCDTMFSenderHandler.cpp: Renamed from Tools/DumpRenderTree/chromium/MockWebRTCDTMFSenderHandler.cpp.
        (WebTestRunner):
        (DTMFSenderToneTask):
        (WebTestRunner::DTMFSenderToneTask::DTMFSenderToneTask):
        (WebTestRunner::MockWebRTCDTMFSenderHandler::MockWebRTCDTMFSenderHandler):
        (WebTestRunner::MockWebRTCDTMFSenderHandler::setClient):
        (WebTestRunner::MockWebRTCDTMFSenderHandler::currentToneBuffer):
        (WebTestRunner::MockWebRTCDTMFSenderHandler::canInsertDTMF):
        (WebTestRunner::MockWebRTCDTMFSenderHandler::insertDTMF):
        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCDTMFSenderHandler.h: Renamed from Tools/DumpRenderTree/chromium/MockWebRTCDTMFSenderHandler.h.
        (WebTestRunner):
        (MockWebRTCDTMFSenderHandler):
        (WebTestRunner::MockWebRTCDTMFSenderHandler::taskList):
        (WebTestRunner::MockWebRTCDTMFSenderHandler::clearToneBuffer):
        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCDataChannelHandler.cpp: Renamed from Tools/DumpRenderTree/chromium/MockWebRTCDataChannelHandler.cpp.
        (WebTestRunner):
        (DataChannelReadyStateTask):
        (WebTestRunner::DataChannelReadyStateTask::DataChannelReadyStateTask):
        (WebTestRunner::MockWebRTCDataChannelHandler::MockWebRTCDataChannelHandler):
        (WebTestRunner::MockWebRTCDataChannelHandler::setClient):
        (WebTestRunner::MockWebRTCDataChannelHandler::bufferedAmount):
        (WebTestRunner::MockWebRTCDataChannelHandler::sendStringData):
        (WebTestRunner::MockWebRTCDataChannelHandler::sendRawData):
        (WebTestRunner::MockWebRTCDataChannelHandler::close):
        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCDataChannelHandler.h: Renamed from Tools/DumpRenderTree/chromium/MockWebRTCDataChannelHandler.h.
        (WebTestRunner):
        (MockWebRTCDataChannelHandler):
        (WebTestRunner::MockWebRTCDataChannelHandler::taskList):
        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCPeerConnectionHandler.cpp: Renamed from Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp.
        (WebTestRunner):
        (RTCSessionDescriptionRequestSuccededTask):
        (WebTestRunner::RTCSessionDescriptionRequestSuccededTask::RTCSessionDescriptionRequestSuccededTask):
        (RTCSessionDescriptionRequestFailedTask):
        (WebTestRunner::RTCSessionDescriptionRequestFailedTask::RTCSessionDescriptionRequestFailedTask):
        (RTCStatsRequestSucceededTask):
        (WebTestRunner::RTCStatsRequestSucceededTask::RTCStatsRequestSucceededTask):
        (RTCVoidRequestTask):
        (WebTestRunner::RTCVoidRequestTask::RTCVoidRequestTask):
        (RTCPeerConnectionStateTask):
        (WebTestRunner::RTCPeerConnectionStateTask::RTCPeerConnectionStateTask):
        (RemoteDataChannelTask):
        (WebTestRunner::RemoteDataChannelTask::RemoteDataChannelTask):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::initialize):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::createOffer):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::createAnswer):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::setLocalDescription):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::setRemoteDescription):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::localDescription):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::remoteDescription):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::updateICE):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::addICECandidate):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::addStream):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::removeStream):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::getStats):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::createDataChannel):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::createDTMFSender):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::stop):
        * DumpRenderTree/chromium/TestRunner/src/MockWebRTCPeerConnectionHandler.h: Renamed from Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h.
        (WebKit):
        (WebTestRunner):
        (MockWebRTCPeerConnectionHandler):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::taskList):
        (WebTestRunner::MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):
        (WebTestRunner::TestInterfaces::setDelegate):
        (WebTestRunner::TestInterfaces::delegate):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::createMediaStreamCenter):
        (WebTestRunner):
        (WebTestRunner::WebTestInterfaces::createWebRTCPeerConnectionHandler):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::userMediaClient):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.cpp: Renamed from Tools/DumpRenderTree/chromium/WebUserMediaClientMock.cpp.
        (WebTestRunner):
        (UserMediaRequestTask):
        (WebTestRunner::UserMediaRequestTask::UserMediaRequestTask):
        (MockExtraData):
        (WebTestRunner::WebUserMediaClientMock::WebUserMediaClientMock):
        (WebTestRunner::WebUserMediaClientMock::requestUserMedia):
        (WebTestRunner::WebUserMediaClientMock::cancelUserMediaRequest):
        * DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.h: Renamed from Tools/DumpRenderTree/chromium/WebUserMediaClientMock.h.
        (WebTestRunner):
        (WebUserMediaClientMock):
        (WebTestRunner::WebUserMediaClientMock::~WebUserMediaClientMock):
        (WebTestRunner::WebUserMediaClientMock::taskList):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-02-11  Timothy Loh  <timloh@chromium.com>

        webkit-patch upload regenerates the WebCore ChangeLog every time it's called
        https://bugs.webkit.org/show_bug.cgi?id=108983

        Reviewed by Ryosuke Niwa.

        This patch puts the behaviour from Bug 74358 behind the flag (default=OFF)
        `--update-changelogs', and removes the flag `--no-prepare-changelogs'.
        The flag name change from prepare to update is since we still want to
        prepare changelogs in the default case when none currently exist.

        * Scripts/webkitpy/tool/commands/commandtest.py:
        (CommandsTest.assert_execute_outputs):
        * Scripts/webkitpy/tool/steps/options.py:
        (Options):
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        (PrepareChangeLog.options):
        (PrepareChangeLog.run):

2013-02-11  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move printPage() implementation to testRunner library
        https://bugs.webkit.org/show_bug.cgi?id=109436

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebTestRunner::WebTestProxy::showContextMenu):
        (WebTestRunner::WebTestProxy::printPage):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner):
        (WebTestRunner::WebTestProxyBase::printPage):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:

2013-02-11  James Robinson  <jamesr@chromium.org>

        [Chromium] Get rid of WebAnimationController
        https://bugs.webkit.org/show_bug.cgi?id=109235

        Reviewed by Benjamin Poulain.

        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):

2013-02-11  Ryosuke Niwa  <rniwa@webkit.org>

        Disable delete button controller on non-Mac ports and delete EditorClient::shouldShowDeleteInterface
        https://bugs.webkit.org/show_bug.cgi?id=109534

        Reviewed by Anders Carlsson.

        * DumpRenderTree/gtk/EditingCallbacks.cpp:
        (shouldShowDeleteInterfaceForElement):

2013-02-11  Nico Weber  <thakis@chromium.org>

        Remove web intents code
        https://bugs.webkit.org/show_bug.cgi?id=109501

        Reviewed by Eric Seidel.

        See thread "Removing ENABLE(WEB_INTENTS) code" on webkit-dev.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebKit):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestRunner::WebTestProxy::didEndEditing):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/wx/TestRunnerWx.cpp:
        * Scripts/webkitperl/FeatureList.pm:

2013-02-11  Benjamin Poulain  <benjamin@webkit.org>

        Kill TestRunner::setMinimumTimerInterval; implement the feature with InternalSettings
        https://bugs.webkit.org/show_bug.cgi?id=109349

        Reviewed by Sam Weinig.

        Get rid of TestRunner's setMinimumTimerInterval and all the related functions.

        This also fixes an oddity:
        TestRunners were initialized with a minimum timer interval of 10 milliseconds instead
        of using the default value. All with the same copy of an outdated comment.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        (WebTestRunner::WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::reset):
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/wx/TestRunnerWx.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2013-02-11  Dean Jackson  <dino@apple.com>

        Remove use of plugInStartLabelImage
        https://bugs.webkit.org/show_bug.cgi?id=108273

        Reviewed by Simon Fraser.

        Take two - after rollout in r142405.
        Removed plugInStartLabelImage entry from client structure.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):

2013-02-11  Tony Chang  <tony@chromium.org>

        Move setFrameFlatteningEnabled from layoutTestController to window.internals.settings
        https://bugs.webkit.org/show_bug.cgi?id=87149

        Reviewed by Simon Fraser.

        Remove testRunner.setFrameFlatteningEnabled from DRT and WTR. WebKit API
        methods are left because there may be users of it. Add a test for Apple Mac
        to ensure that the API for the preference still works using overridePreference.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/wx/TestRunnerWx.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2013-02-11  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Windows 7 Debug mode build fix.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:

2013-02-11  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Set mouse document position for mouse event in DRT.
        https://bugs.webkit.org/show_bug.cgi?id=109094.

        Reviewed by Rob Buis.

        RIM PR 246976.
        Internally Reviewed by Nima Ghanavatian & Genevieve Mak.

        Set mouse document position when we create mouse event in DRT.

        * DumpRenderTree/blackberry/EventSender.cpp:
        (setMouseEventDocumentPos):
        (mouseDownCallback):
        (mouseUpCallback):
        (mouseMoveToCallback):

2013-02-11  Mike Lattanzio  <mlattanzio@rim.com>

        [BlackBerry] Add graphics subdirectory to include path.
        https://bugs.webkit.org/show_bug.cgi?id=109437

        Reviewed by Rob Buis.

        Add browser/platform/graphics to include path.

        Internal review by Jeff Rogers.

        * Scripts/webkitdirs.pm:
        (blackberryCMakeArguments):

2013-02-11  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WKTR] Regression(r141836) fast/dom/Window/mozilla-focus-blur.html started failing
        https://bugs.webkit.org/show_bug.cgi?id=109438

        Reviewed by Kenneth Rohde Christiansen.

        Some refactoring in r141836 caused the view not to get focus if the focused
        frame is not the main one. The idea of the code was to remove focus from the
        view if the focused frame was not the main one, and then focus the view again.
        However, after the refactoring, the second step never happened: Focus was
        removed but not given again.

        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::focus):

2013-02-11  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Don't generate documentation if building neither WebKit1 nor WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=109420

        Reviewed by Philippe Normand.

        Don't generate the GTK documentation if neither of the WebKit1 and WebKit2
        layers was built. This just results in unnecessary errors being spewed out
        by the gtkdoc utilities.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject):

2013-02-11  Antoine Quint  <graouts@apple.com>

        Unreviewed change to add myself to the Inspector IDLs watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2013-02-11  Krzysztof Czech  <k.czech@samsung.com>

        [GTK][EFL] Shares WebKit-GTK's DumpRenderTree accessibility implementation with other Webkit ports
        https://bugs.webkit.org/show_bug.cgi?id=105007

        Reviewed by Martin Robinson.

        Shares specific ATK's accessibility implementation.
        Keeps platform specific methods in EFL and GTK's directories.

        * DumpRenderTree/atk/AccessibilityCallbacks.h: Renamed from Tools/DumpRenderTree/gtk/AccessibilityCallbacks.h.
        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp: Renamed from Tools/DumpRenderTree/gtk/AccessibilityCallbacks.cpp.
        (printAccessibilityEvent):
        (axObjectEventListener):
        (connectAccessibilityCallbacks):
        (disconnectAccessibilityCallbacks):
        * DumpRenderTree/atk/AccessibilityControllerAtk.cpp: Copied from Tools/DumpRenderTree/gtk/AccessibilityControllerGtk.cpp.
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::~AccessibilityController):
        (AccessibilityController::elementAtPoint):
        (AccessibilityController::setLogFocusEvents):
        (AccessibilityController::setLogScrollingStartEvents):
        (AccessibilityController::setLogValueChangeEvents):
        (AccessibilityController::setLogAccessibilityEvents):
        (AccessibilityController::addNotificationListener):
        (AccessibilityController::removeNotificationListener):
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp: Copied from Tools/DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp.
        (coreAttributeToAtkAttribute):
        (roleToString):
        (replaceCharactersForResults):
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::~AccessibilityUIElement):
        (AccessibilityUIElement::getLinkedUIElements):
        (AccessibilityUIElement::getDocumentLinks):
        (AccessibilityUIElement::getChildren):
        (AccessibilityUIElement::getChildrenWithRange):
        (AccessibilityUIElement::rowCount):
        (AccessibilityUIElement::columnCount):
        (AccessibilityUIElement::childrenCount):
        (AccessibilityUIElement::elementAtPoint):
        (AccessibilityUIElement::linkedUIElementAtIndex):
        (AccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElement::indexOfChild):
        (attributeSetToString):
        (AccessibilityUIElement::allAttributes):
        (AccessibilityUIElement::attributesOfLinkedUIElements):
        (AccessibilityUIElement::attributesOfDocumentLinks):
        (AccessibilityUIElement::titleUIElement):
        (AccessibilityUIElement::parentElement):
        (AccessibilityUIElement::attributesOfChildren):
        (AccessibilityUIElement::parameterizedAttributeNames):
        (AccessibilityUIElement::role):
        (AccessibilityUIElement::subrole):
        (AccessibilityUIElement::roleDescription):
        (AccessibilityUIElement::title):
        (AccessibilityUIElement::description):
        (AccessibilityUIElement::stringValue):
        (AccessibilityUIElement::language):
        (AccessibilityUIElement::x):
        (AccessibilityUIElement::y):
        (AccessibilityUIElement::width):
        (AccessibilityUIElement::height):
        (AccessibilityUIElement::clickPointX):
        (AccessibilityUIElement::clickPointY):
        (AccessibilityUIElement::orientation):
        (AccessibilityUIElement::intValue):
        (AccessibilityUIElement::minValue):
        (AccessibilityUIElement::maxValue):
        (AccessibilityUIElement::valueDescription):
        (checkElementState):
        (AccessibilityUIElement::isEnabled):
        (AccessibilityUIElement::insertionPointLineNumber):
        (AccessibilityUIElement::isPressActionSupported):
        (AccessibilityUIElement::isIncrementActionSupported):
        (AccessibilityUIElement::isDecrementActionSupported):
        (AccessibilityUIElement::isRequired):
        (AccessibilityUIElement::isFocused):
        (AccessibilityUIElement::isSelected):
        (AccessibilityUIElement::hierarchicalLevel):
        (AccessibilityUIElement::ariaIsGrabbed):
        (AccessibilityUIElement::ariaDropEffects):
        (AccessibilityUIElement::isExpanded):
        (AccessibilityUIElement::isChecked):
        (AccessibilityUIElement::attributesOfColumnHeaders):
        (AccessibilityUIElement::attributesOfRowHeaders):
        (AccessibilityUIElement::attributesOfColumns):
        (AccessibilityUIElement::attributesOfRows):
        (AccessibilityUIElement::attributesOfVisibleCells):
        (AccessibilityUIElement::attributesOfHeader):
        (AccessibilityUIElement::indexInTable):
        (indexRangeInTable):
        (AccessibilityUIElement::rowIndexRange):
        (AccessibilityUIElement::columnIndexRange):
        (AccessibilityUIElement::lineForIndex):
        (AccessibilityUIElement::boundsForRange):
        (AccessibilityUIElement::stringForRange):
        (AccessibilityUIElement::attributedStringForRange):
        (AccessibilityUIElement::attributedStringRangeIsMisspelled):
        (AccessibilityUIElement::uiElementForSearchPredicate):
        (AccessibilityUIElement::cellForColumnAndRow):
        (AccessibilityUIElement::selectedTextRange):
        (AccessibilityUIElement::setSelectedTextRange):
        (AccessibilityUIElement::stringAttributeValue):
        (AccessibilityUIElement::numberAttributeValue):
        (AccessibilityUIElement::boolAttributeValue):
        (AccessibilityUIElement::isAttributeSettable):
        (AccessibilityUIElement::isAttributeSupported):
        (alterCurrentValue):
        (AccessibilityUIElement::increment):
        (AccessibilityUIElement::decrement):
        (AccessibilityUIElement::press):
        (AccessibilityUIElement::showMenu):
        (AccessibilityUIElement::disclosedRowAtIndex):
        (AccessibilityUIElement::ariaOwnsElementAtIndex):
        (AccessibilityUIElement::ariaFlowToElementAtIndex):
        (AccessibilityUIElement::selectedRowAtIndex):
        (AccessibilityUIElement::rowAtIndex):
        (AccessibilityUIElement::disclosedByRow):
        (AccessibilityUIElement::accessibilityValue):
        (AccessibilityUIElement::documentEncoding):
        (AccessibilityUIElement::documentURI):
        (AccessibilityUIElement::url):
        (AccessibilityUIElement::addNotificationListener):
        (AccessibilityUIElement::removeNotificationListener):
        (AccessibilityUIElement::isFocusable):
        (AccessibilityUIElement::isSelectable):
        (AccessibilityUIElement::isMultiSelectable):
        (AccessibilityUIElement::isSelectedOptionActive):
        (AccessibilityUIElement::isVisible):
        (AccessibilityUIElement::isOffScreen):
        (AccessibilityUIElement::isCollapsed):
        (AccessibilityUIElement::isIgnored):
        (AccessibilityUIElement::hasPopup):
        (AccessibilityUIElement::takeFocus):
        (AccessibilityUIElement::takeSelection):
        (AccessibilityUIElement::addSelection):
        (AccessibilityUIElement::removeSelection):
        (AccessibilityUIElement::scrollToMakeVisible):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):
        * DumpRenderTree/efl/CMakeLists.txt: Adds ATK headers, libraries, new sources.
        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::focusedElement):
        (AccessibilityController::rootElement):
        (AccessibilityController::accessibleElementById):
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::helpText):
        * GNUmakefile.am: Adds renamed sources.

2013-02-11  Jochen Eisinger  <jochen@chromium.org>

        [chromium] clear the webcache from within the TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=109405

        Reviewed by Kentaro Hara.

        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::resetAll):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):

2013-02-11  Jochen Eisinger  <jochen@chromium.org>

        [chromium] add a destructor to EventSender
        https://bugs.webkit.org/show_bug.cgi?id=109401

        Reviewed by Kentaro Hara.

        Otherwise, the compiler will automatically generate a destructor, for
        which we need to unnecessarily include WebContextMenuData.h in the
        header.

        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::~EventSender):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.h:
        (WebKit):
        (EventSender):

2013-02-10  Tim Horton  <timothy_horton@apple.com>

        Unreviewed attempted build fix for Gtk after r142412

        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2013-02-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142413.
        http://trac.webkit.org/changeset/142413
        https://bugs.webkit.org/show_bug.cgi?id=109383

        didn't fix the gtk build (Requested by thorton on #webkit).

        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:

2013-02-10  Tim Horton  <timothy_horton@apple.com>

        Unreviewed attempted build fix for Gtk after r142412
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:

2013-02-10  Tim Horton  <timothy_horton@apple.com>

        WKTR should propagate view creation options to opened windows
        https://bugs.webkit.org/show_bug.cgi?id=109381

        Reviewed by Simon Fraser.

        * WebKitTestRunner/PlatformWebView.h:
        (WTR::PlatformWebView::options):
        Add storage and a getter for PlatformWebView's creation options dictionary.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        Propagate creation options from parent to child PlatformWebView when creating subwindows.
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        Store creation options on the PlatformWebView.

2013-02-10  Kent Tamura  <tkent@chromium.org>

        Unreviewed, rolling out r142347.
        http://trac.webkit.org/changeset/142347
        https://bugs.webkit.org/show_bug.cgi?id=108273

        Because a depending change r142343 was rolled out.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):

2013-02-10  Kent Tamura  <tkent@chromium.org>

        [Chromium] Build fix for r142371
        https://bugs.webkit.org/show_bug.cgi?id=109313

        * DumpRenderTree/chromium/TestRunner/src/EventSender.h:
        (WebKit):

2013-02-10  Zan Dobersek  <zdobersek@igalia.com>

        gtkdoc-scangobj throwing warnings when using Clang, causes generate-gtkdoc to fail
        https://bugs.webkit.org/show_bug.cgi?id=109315

        Reviewed by Philippe Normand.

        * GNUmakefile.am: Define the CC environment variable to the CC compiler that the whole
        project was configured to use. This ensures both the regular build and the gtkdoc-scangobj
        program use the same compiler.
        * gtk/generate-gtkdoc: Add '-Qunused-arguments' to the CFLAGS in case we're using Clang. This
        forces Clang to suppress unused arguments warnings that can unnecessarily cause generate-gtkdoc
        script to fail.

2013-02-09  David Farler  <dfarler@apple.com>

        Make TestWebKitAPI work for iOS
        https://bugs.webkit.org/show_bug.cgi?id=108978

        Reviewed by Joseph Pecoraro.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        Added back FRAMEWORK_SEARCH_PATHS for Lion builds.

2013-02-09  David Farler  <dfarler@apple.com>

        Make TestWebKitAPI work for iOS
        https://bugs.webkit.org/show_bug.cgi?id=108978

        Reviewed by David Kilzer.

        * Makefile: Added TestWebKitAPI to iOS MODULES list.
        * TestWebKitAPI/Configurations/Base.xcconfig:
        - Include FeatureDefines
        - Removed VALID_ARCHS
        - Removed FRAMEWORK_SEARCH_PATHS - allows building against other SDKs
        - Excluded source files per platform
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        - framework and library switches per platform
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        - Remove explicit framework and library linking (moved to xcconfigs)
        - Added iOS main.mm
        * TestWebKitAPI/config.h:
        - Guard importing Cocoa.h and WebKit2_C.h on iOS
        * TestWebKitAPI/ios/mainIOS.mm: Copied from Tools/TestWebKitAPI/mac/main.mm.
        * TestWebKitAPI/mac/mainMac.mm: Renamed from Tools/TestWebKitAPI/mac/main.mm.

2013-02-09  Justin Schuh  <jschuh@chromium.org>

        [CHROMIUM] Suppress c4267 build warnings for Win64 tests
        https://bugs.webkit.org/show_bug.cgi?id=109359

        Reviewed by Abhishek Arya.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2013-02-09  Ryosuke Niwa  <rniwa@webkit.org>

        Add a link to EFL perf bot on build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=109342

        Reviewed by Gyuyoung Kim.

        Added.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2013-02-09  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed. Update my IRC nickname in committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-09  David Farler  <dfarler@apple.com>

        build-webkit: document sdk, debug, release, device, and simulator options
        https://bugs.webkit.org/show_bug.cgi?id=109221

        Reviewed by David Kilzer.

        * Scripts/build-webkit: Add options to usage
        * Scripts/webkitdirs.pm: Remove --deploy and --devel checks

2013-02-09  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move context menu data tracking to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=109313

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebKit):
        (WebTestDelegate):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestRunner::WebTestProxy::showContextMenu):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::setContextMenuData):
        (WebTestRunner::EventSender::contextClick):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.h:
        (WebKit):
        (EventSender):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::showContextMenu):
        (WebTestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::showContextMenu):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-02-09  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move methods that change initial testRunner state to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=109043

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        (WebKit):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::configureForTestWithURL):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (WebKit):
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::showDevTools):
        (WebTestRunner):
        (WebTestRunner::TestRunner::showWebInspector):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::configureForTestWithURL):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):

2013-02-09  Nico Weber  <thakis@chromium.org>

        Add myself as a reviewer. (Yay!!!!!)
        https://bugs.webkit.org/show_bug.cgi?id=109110

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-08  Benjamin Poulain  <bpoulain@apple.com>

        Move workerThreadCount from TestRunner to WebCore Internals
        https://bugs.webkit.org/show_bug.cgi?id=109239

        Reviewed by Darin Adler.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticValues):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::webHistoryItemCount):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/wx/TestRunnerWx.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2013-02-08  Dean Jackson  <dino@apple.com>

        Remove use of plugInStartLabelImage
        https://bugs.webkit.org/show_bug.cgi?id=108273

        Reviewed by Simon Fraser.

        Removed plugInStartLabelImage entry from client structure.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):

2013-02-07  Timothy Hatcher  <timothy@apple.com>

        Fix the WebInspectorAPI watch list.

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitpy/common/config/watchlist: Fix the regrexs.
        Added InjectedScriptSource.js and Console.idl.

2013-02-08  Roger Fong  <roger_fong@apple.com>

        DumpRenderTree, ImageDiff and TestNetscapePlugin projects, property sheets and resources for VS2010 solution.
        https://bugs.webkit.org/show_bug.cgi?id=107034.

        Reviewed by Brent Fulgham.

        * DumpRenderTree/DumpRenderTree.vcxproj: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj.filters: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeApple.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeCommon.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeDebug.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherCommon.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherDebug.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherRelease.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePostBuild.cmd: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePreBuild.cmd: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeRelease.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiff.vcxproj: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffCommon.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffDebug.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncher.vcxproj: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherCommon.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherDebug.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherRelease.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffPostBuild.cmd: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffPreBuild.cmd: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffRelease.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.def: Copied from DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.def.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.rc: Copied from DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.rc.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj.filters: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginCommon.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginDebug.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginPostBuild.cmd: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginPreBuild.cmd: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginRelease.props: Added.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/resource.h: Copied from DumpRenderTree/TestNetscapePlugIn/win/resource.h.
        * DumpRenderTree/TestNetscapePlugIn/Tests/win/CallJSThatDestroysPlugin.cpp: Copied from DumpRenderTree/TestNetscapePlugIn/win/CallJSThatDestroysPlugin.cpp.
        * DumpRenderTree/TestNetscapePlugIn/win/CallJSThatDestroysPlugin.cpp: Removed.

2013-02-08  Harald Alvestrand  <hta@google.com>

        Fix and test for missing return

        RTCPeerConnection.getStats() fails when remote stats are instantiated.
        https://bugs.webkit.org/show_bug.cgi?id=109292

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::getStats):

2013-02-08  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Removing the deprecated WebMediaStreamDescriptor and WebMediaStreamComponent shims
        https://bugs.webkit.org/show_bug.cgi?id=109296

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/MockWebRTCDTMFSenderHandler.cpp:
        (MockWebRTCDTMFSenderHandler::MockWebRTCDTMFSenderHandler):
        * DumpRenderTree/chromium/MockWebRTCDTMFSenderHandler.h:
        (MockWebRTCDTMFSenderHandler):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::createDTMFSender):

2013-02-08  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Update my entries in the watchlist

        Unreviewed.

        * Scripts/webkitpy/common/config/watchlist:

2013-02-08  Jochen Eisinger  <jochen@chromium.org>

        [chromium] copy normalizeLayoutTestURL code to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=109269

        Reviewed by Kent Tamura.

        The method doesn't have any external dependencies, so there's no reason
        it should be on the delegate. It's still required by TestShell, however,
        by making a copy, we can avoid implementing this in content shell.

        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/WebPermissions.cpp:
        (WebTestRunner::WebPermissions::allowImage):
        (WebTestRunner::WebPermissions::allowScriptFromSource):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::windowCount):
        * DumpRenderTree/chromium/TestShell.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-02-08  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL] Make the Performance bot also build WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=109273

        Reviewed by Philippe Normand.

        There has not been much benefit in fetching binaries compiled by
        another bot; it makes the build bot take 6 to 7 minutes to upload
        the binaries to build.webkit.org, we need to manually override
        LD_LIBRARY_PATH to find the compiled libraries and still have
        other path-related problems.

        Since we have enough horsepower in the perf bot, let's experiment
        with building WebKit there instead.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2013-02-07  Jochen Eisinger  <jochen@chromium.org>

        [chromium] turn TestRunner library into a component build
        https://bugs.webkit.org/show_bug.cgi?id=108466

        Reviewed by Adam Barth.

        To achieve this, we need to drop all dependencies on WTF.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTask.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestCommon.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        (WebTestRunner::AccessibilityUIElement::AccessibilityUIElement):
        (WebTestRunner::AccessibilityUIElementList::getOrCreate):
        (WebTestRunner::AccessibilityUIElementList::createRoot):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h:
        (AccessibilityUIElementList):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:
        (WebTestRunner::CppBoundClass::~CppBoundClass):
        (WebTestRunner::CppBoundClass::invoke):
        (WebTestRunner::CppBoundClass::getProperty):
        (WebTestRunner::CppBoundClass::setProperty):
        (WebTestRunner::CppBoundClass::bindCallback):
        (WebTestRunner::CppBoundClass::bindGetterCallback):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::getAsCppVariant):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h:
        (WebTestRunner):
        (CppBoundClass):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::bindFallbackCallback):
        (WebTestRunner::CppBoundClass::bindFallbackMethod):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:
        (WebTestRunner::CppVariant::toString):
        (WebTestRunner::CppVariant::toInt32):
        (WebTestRunner::CppVariant::toDouble):
        (WebTestRunner::CppVariant::toBoolean):
        (WebTestRunner::CppVariant::toStringVector):
        (WebTestRunner::CppVariant::invoke):
        (WebTestRunner::CppVariant::invokeDefault):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.h:
        (CppVariant):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::EventSender):
        (WebTestRunner::EventSender::reset):
        (WebTestRunner::EventSender::mouseDown):
        (WebTestRunner::EventSender::mouseUp):
        (WebTestRunner::EventSender::mouseMoveTo):
        (WebTestRunner::EventSender::keyDown):
        (WebTestRunner::EventSender::dispatchMessage):
        (WebTestRunner::EventSender::leapForward):
        (WebTestRunner::EventSender::replaySavedEvents):
        (WebTestRunner::makeMenuItemStringsFor):
        (WebTestRunner::EventSender::contextClick):
        (WebTestRunner::EventSender::beginDragWithFiles):
        (WebTestRunner::EventSender::addTouchPoint):
        (WebTestRunner::EventSender::releaseTouchPoint):
        (WebTestRunner::EventSender::updateTouchPoint):
        (WebTestRunner::EventSender::cancelTouchPoint):
        (WebTestRunner::EventSender::sendCurrentTouchEvent):
        (WebTestRunner::EventSender::gestureEvent):
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp:
        (WebTestRunner::NativeKeyCodeForWindowsKeyCode):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.cpp:
        (WebTestRunner::MockGrammarCheck::checkGrammarOfString):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.h:
        (WebTestRunner):
        (MockGrammarCheck):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp:
        (WebTestRunner::MockSpellCheck::spellCheckWord):
        (WebTestRunner::MockSpellCheck::initializeIfNeeded):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.h:
        (MockSpellCheck):
        * DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp:
        (WebTestRunner::SpellCheckClient::checkTextOfParagraph):
        (WebTestRunner::SpellCheckClient::finishLastTextCheck):
        * DumpRenderTree/chromium/TestRunner/src/TestCommon.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.
        (isASCIIAlpha):
        (isNotASCIIAlpha):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp:
        (WebTestRunner::TestPlugin::TestPlugin):
        (WebTestRunner::TestPlugin::initialize):
        (WebTestRunner::TestPlugin::destroy):
        (WebTestRunner::TestPlugin::parsePrimitive):
        (WebTestRunner::TestPlugin::parseColor):
        (WebTestRunner::TestPlugin::initProgram):
        (WebTestRunner::TestPlugin::initPrimitive):
        (WebTestRunner::TestPlugin::drawPrimitive):
        (WebTestRunner::TestPlugin::loadShader):
        (WebTestRunner::TestPlugin::loadProgram):
        (WebTestRunner::TestPlugin::handleDragStatusUpdate):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.h:
        (TestPlugin):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::WorkQueue::processWorkSoon):
        (WebTestRunner::TestRunner::WorkQueue::processWork):
        (WebTestRunner::TestRunner::WorkQueue::reset):
        (WebTestRunner::TestRunner::WorkQueue::addWork):
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::policyDelegateDone):
        (WebTestRunner::TestRunner::findString):
        (WebTestRunner::TestRunner::setTextSubpixelPositioning):
        (WebTestRunner::TestRunner::overridePreference):
        (WebTestRunner::TestRunner::deliverWebIntent):
        (WebTestRunner::TestRunner::setBackingScaleFactor):
        (WebTestRunner::TestRunner::simulateLegacyWebNotificationClick):
        (WebTestRunner::TestRunner::setMockSpeechInputDumpRect):
        (WebTestRunner::TestRunner::wasMockSpeechRecognitionAborted):
        (WebTestRunner::TestRunner::setPointerLockWillFailSynchronously):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebTestRunner::TestRunner::WorkQueue::isEmpty):
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp:
        (WebTestRunner::TextInputController::markedRange):
        (WebTestRunner::TextInputController::selectedRange):
        (WebTestRunner::TextInputController::firstRectForCharacterRange):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        * DumpRenderTree/chromium/TestRunner/src/WebTask.cpp:
        (WebTestRunner::WebTaskList::~WebTaskList):
        (WebTestRunner::WebTaskList::registerTask):
        (WebTestRunner::WebTaskList::unregisterTask):
        (WebTestRunner::WebTaskList::revokeAll):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::~WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::testInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::~WebTestProxyBase):
        (WebTestRunner::WebTestProxyBase::spellCheckClient):
        (WebTestRunner::WebTestProxyBase::registerIntentService):
        (WebTestRunner::WebTestProxyBase::dispatchIntent):
        (WebTestRunner::WebTestProxyBase::assignIdentifierToRequest):
        * DumpRenderTree/chromium/TestRunner/src/config.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.

2013-02-07  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed followup to r142232.

        Work around a bug in jhbuild that was incorrectly composing the source
        package URL by adjusting slightly the repository and module paths.

        * gtk/jhbuild.modules:

2013-02-07  Zan Dobersek  <zdobersek@igalia.com>

        Use a mirror for the sourceware.org repo used in jhbuild

        Unreviewed.

        The ftp://sourceware.org site is down, causing errors when running jhbuild
        and subsequently failing complete builds on the builders. Use the mirrors.kernel.org
        mirror to get sources for the desired libffi dependency.

        * gtk/jhbuild.modules:

2013-02-07  David Farler  <dfarler@apple.com>

        Makefiles should work for arbitrary SDKs and architectures on Apple ports
        https://bugs.webkit.org/show_bug.cgi?id=107863

        Reviewed by Mark Rowe.

        * DumpRenderTree/Makefile: SDKROOT=iphone* => -target All-iOS
        * Makefile: Only build some projects for iOS

2013-02-07  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Another temporary EWS bot fix. It'll totally work this time.

        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):

2013-02-07  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Fix syntax error in runtests.py.

        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):

2013-02-07  Roger Fong  <roger_fong@apple.com>

        Temporary fix for Win EWS bots.
        Don't build DRT since it has already been built in the build step.

        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):

2013-02-07  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Cleanup command-line defines
        https://bugs.webkit.org/show_bug.cgi?id=109213

        Reviewed by Xan Lopez.

        * TestWebKitAPI/config.h: Include the autotoolsconfig.h header to pick
        up defines from autoconf.

2013-02-07  Ryosuke Niwa  <rniwa@webkit.org>

        git.svn_revision doesn't fetch the same revision as svn.svn_revision
        https://bugs.webkit.org/show_bug.cgi?id=108684

        Reviewed by Dirk Pranke.

        Always call git log on the checkout root.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.svn_revision):

2013-02-07  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Patch for testing Win EWS bots.

        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):

2013-02-07  Gavin Peters  <gavinp@chromium.org>

        Unreviewed, rolling out r142165.
        http://trac.webkit.org/changeset/142165
        https://bugs.webkit.org/show_bug.cgi?id=108466

        Broke linux_aura builds.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTask.h:
        (WebTaskList):
        * DumpRenderTree/chromium/TestRunner/public/WebTestCommon.h: Removed.
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        (WebTestInterfaces):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebTestProxyBase):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        (WebTestRunner::AccessibilityUIElement::AccessibilityUIElement):
        (WebTestRunner::AccessibilityUIElementList::getOrCreate):
        (WebTestRunner::AccessibilityUIElementList::createRoot):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h:
        (AccessibilityUIElementList):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:
        (WebTestRunner::CppBoundClass::~CppBoundClass):
        (WebTestRunner::CppBoundClass::invoke):
        (WebTestRunner::CppBoundClass::getProperty):
        (WebTestRunner::CppBoundClass::setProperty):
        (WebTestRunner::CppBoundClass::bindCallback):
        (WebTestRunner::CppBoundClass::bindGetterCallback):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::getAsCppVariant):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h:
        (WebTestRunner):
        (CppBoundClass):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::bindFallbackCallback):
        (WebTestRunner::CppBoundClass::bindFallbackMethod):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:
        (WebTestRunner::CppVariant::toString):
        (WebTestRunner::CppVariant::toInt32):
        (WebTestRunner::CppVariant::toDouble):
        (WebTestRunner::CppVariant::toBoolean):
        (WebTestRunner::CppVariant::toStringVector):
        (WebTestRunner::CppVariant::invoke):
        (WebTestRunner::CppVariant::invokeDefault):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.h:
        (CppVariant):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::EventSender):
        (WebTestRunner::EventSender::reset):
        (WebTestRunner::EventSender::mouseDown):
        (WebTestRunner::EventSender::mouseUp):
        (WebTestRunner::EventSender::mouseMoveTo):
        (WebTestRunner::EventSender::keyDown):
        (WebTestRunner::EventSender::dispatchMessage):
        (WebTestRunner::EventSender::leapForward):
        (WebTestRunner::EventSender::replaySavedEvents):
        (WebTestRunner::makeMenuItemStringsFor):
        (WebTestRunner::EventSender::contextClick):
        (WebTestRunner::EventSender::beginDragWithFiles):
        (WebTestRunner::EventSender::addTouchPoint):
        (WebTestRunner::EventSender::releaseTouchPoint):
        (WebTestRunner::EventSender::updateTouchPoint):
        (WebTestRunner::EventSender::cancelTouchPoint):
        (WebTestRunner::EventSender::sendCurrentTouchEvent):
        (WebTestRunner::EventSender::gestureEvent):
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp:
        (WebTestRunner::NativeKeyCodeForWindowsKeyCode):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.cpp:
        (MockGrammarCheck::checkGrammarOfString):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.h:
        (MockGrammarCheck):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp:
        (append):
        (isNotASCIIAlpha):
        (MockSpellCheck::spellCheckWord):
        (MockSpellCheck::initializeIfNeeded):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.h:
        (MockSpellCheck):
        * DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp:
        (WebTestRunner::SpellCheckClient::checkTextOfParagraph):
        (WebTestRunner::SpellCheckClient::finishLastTextCheck):
        * DumpRenderTree/chromium/TestRunner/src/TestCommon.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp:
        (WebTestRunner::TestPlugin::TestPlugin):
        (WebTestRunner::TestPlugin::initialize):
        (WebTestRunner::TestPlugin::destroy):
        (WebTestRunner::TestPlugin::parsePrimitive):
        (WebTestRunner::TestPlugin::parseColor):
        (WebTestRunner::TestPlugin::initProgram):
        (WebTestRunner::TestPlugin::initPrimitive):
        (WebTestRunner::TestPlugin::drawPrimitive):
        (WebTestRunner::TestPlugin::loadShader):
        (WebTestRunner::TestPlugin::loadProgram):
        (WebTestRunner::TestPlugin::handleDragStatusUpdate):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.h:
        (TestPlugin):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::WorkQueue::processWorkSoon):
        (WebTestRunner::TestRunner::WorkQueue::processWork):
        (WebTestRunner::TestRunner::WorkQueue::reset):
        (WebTestRunner::TestRunner::WorkQueue::addWork):
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::policyDelegateDone):
        (WebTestRunner::TestRunner::findString):
        (WebTestRunner::TestRunner::setTextSubpixelPositioning):
        (WebTestRunner::TestRunner::overridePreference):
        (WebTestRunner):
        (WebTestRunner::TestRunner::setBackingScaleFactor):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebTestRunner::TestRunner::WorkQueue::isEmpty):
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp:
        (WebTestRunner::TextInputController::markedRange):
        (WebTestRunner::TextInputController::selectedRange):
        (WebTestRunner::TextInputController::firstRectForCharacterRange):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        * DumpRenderTree/chromium/TestRunner/src/WebTask.cpp:
        (WebTestRunner):
        (WebTestRunner::WebTaskList::WebTaskList):
        (WebTestRunner::WebTaskList::~WebTaskList):
        (WebTestRunner::WebTaskList::registerTask):
        (WebTestRunner::WebTaskList::unregisterTask):
        (WebTestRunner::WebTaskList::revokeAll):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::~WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::testInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::~WebTestProxyBase):
        (WebTestRunner::WebTestProxyBase::spellCheckClient):
        (WebTestRunner::WebTestProxyBase::registerIntentService):
        (WebTestRunner::WebTestProxyBase::dispatchIntent):
        (WebTestRunner::WebTestProxyBase::assignIdentifierToRequest):
        * DumpRenderTree/chromium/TestRunner/src/config.h: Removed.

2013-02-07  Benjamin Poulain  <bpoulain@apple.com>

        Move pauseAnimation/pauseTransition from TestRunner to Internals
        https://bugs.webkit.org/show_bug.cgi?id=109107

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/wx/TestRunnerWx.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2013-02-07  Jochen Eisinger  <jochen@chromium.org>

        [chromium] turn TestRunner library into a component build
        https://bugs.webkit.org/show_bug.cgi?id=108466

        Reviewed by Adam Barth.

        To achieve this, we need to drop all dependencies on WTF.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTask.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestCommon.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        (WebTestRunner::AccessibilityUIElement::AccessibilityUIElement):
        (WebTestRunner::AccessibilityUIElementList::getOrCreate):
        (WebTestRunner::AccessibilityUIElementList::createRoot):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h:
        (AccessibilityUIElementList):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:
        (WebTestRunner::CppBoundClass::~CppBoundClass):
        (WebTestRunner::CppBoundClass::invoke):
        (WebTestRunner::CppBoundClass::getProperty):
        (WebTestRunner::CppBoundClass::setProperty):
        (WebTestRunner::CppBoundClass::bindCallback):
        (WebTestRunner::CppBoundClass::bindGetterCallback):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::getAsCppVariant):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h:
        (WebTestRunner):
        (CppBoundClass):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::bindFallbackCallback):
        (WebTestRunner::CppBoundClass::bindFallbackMethod):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:
        (WebTestRunner::CppVariant::toString):
        (WebTestRunner::CppVariant::toInt32):
        (WebTestRunner::CppVariant::toDouble):
        (WebTestRunner::CppVariant::toBoolean):
        (WebTestRunner::CppVariant::toStringVector):
        (WebTestRunner::CppVariant::invoke):
        (WebTestRunner::CppVariant::invokeDefault):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.h:
        (CppVariant):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::EventSender):
        (WebTestRunner::EventSender::reset):
        (WebTestRunner::EventSender::mouseDown):
        (WebTestRunner::EventSender::mouseUp):
        (WebTestRunner::EventSender::mouseMoveTo):
        (WebTestRunner::EventSender::keyDown):
        (WebTestRunner::EventSender::dispatchMessage):
        (WebTestRunner::EventSender::leapForward):
        (WebTestRunner::EventSender::replaySavedEvents):
        (WebTestRunner::makeMenuItemStringsFor):
        (WebTestRunner::EventSender::contextClick):
        (WebTestRunner::EventSender::beginDragWithFiles):
        (WebTestRunner::EventSender::addTouchPoint):
        (WebTestRunner::EventSender::releaseTouchPoint):
        (WebTestRunner::EventSender::updateTouchPoint):
        (WebTestRunner::EventSender::cancelTouchPoint):
        (WebTestRunner::EventSender::sendCurrentTouchEvent):
        (WebTestRunner::EventSender::gestureEvent):
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp:
        (WebTestRunner::NativeKeyCodeForWindowsKeyCode):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.cpp:
        (WebTestRunner::MockGrammarCheck::checkGrammarOfString):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.h:
        (WebTestRunner):
        (MockGrammarCheck):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp:
        (WebTestRunner::MockSpellCheck::spellCheckWord):
        (WebTestRunner::MockSpellCheck::initializeIfNeeded):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.h:
        (MockSpellCheck):
        * DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp:
        (WebTestRunner::SpellCheckClient::checkTextOfParagraph):
        (WebTestRunner::SpellCheckClient::finishLastTextCheck):
        * DumpRenderTree/chromium/TestRunner/src/TestCommon.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.
        (isASCIIAlpha):
        (isNotASCIIAlpha):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp:
        (WebTestRunner::TestPlugin::TestPlugin):
        (WebTestRunner::TestPlugin::initialize):
        (WebTestRunner::TestPlugin::destroy):
        (WebTestRunner::TestPlugin::parsePrimitive):
        (WebTestRunner::TestPlugin::parseColor):
        (WebTestRunner::TestPlugin::initProgram):
        (WebTestRunner::TestPlugin::initPrimitive):
        (WebTestRunner::TestPlugin::drawPrimitive):
        (WebTestRunner::TestPlugin::loadShader):
        (WebTestRunner::TestPlugin::loadProgram):
        (WebTestRunner::TestPlugin::handleDragStatusUpdate):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.h:
        (TestPlugin):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::WorkQueue::processWorkSoon):
        (WebTestRunner::TestRunner::WorkQueue::processWork):
        (WebTestRunner::TestRunner::WorkQueue::reset):
        (WebTestRunner::TestRunner::WorkQueue::addWork):
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::policyDelegateDone):
        (WebTestRunner::TestRunner::findString):
        (WebTestRunner::TestRunner::setTextSubpixelPositioning):
        (WebTestRunner::TestRunner::overridePreference):
        (WebTestRunner::TestRunner::deliverWebIntent):
        (WebTestRunner::TestRunner::setBackingScaleFactor):
        (WebTestRunner::TestRunner::simulateLegacyWebNotificationClick):
        (WebTestRunner::TestRunner::setMockSpeechInputDumpRect):
        (WebTestRunner::TestRunner::wasMockSpeechRecognitionAborted):
        (WebTestRunner::TestRunner::setPointerLockWillFailSynchronously):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebTestRunner::TestRunner::WorkQueue::isEmpty):
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp:
        (WebTestRunner::TextInputController::markedRange):
        (WebTestRunner::TextInputController::selectedRange):
        (WebTestRunner::TextInputController::firstRectForCharacterRange):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        * DumpRenderTree/chromium/TestRunner/src/WebTask.cpp:
        (WebTestRunner::WebTaskList::~WebTaskList):
        (WebTestRunner::WebTaskList::registerTask):
        (WebTestRunner::WebTaskList::unregisterTask):
        (WebTestRunner::WebTaskList::revokeAll):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::~WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::testInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::~WebTestProxyBase):
        (WebTestRunner::WebTestProxyBase::spellCheckClient):
        (WebTestRunner::WebTestProxyBase::registerIntentService):
        (WebTestRunner::WebTestProxyBase::dispatchIntent):
        (WebTestRunner::WebTestProxyBase::assignIdentifierToRequest):
        * DumpRenderTree/chromium/TestRunner/src/config.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.

2013-02-07  Eunmi Lee  <eunmi15.lee@samsung.com>

        Do not check enum's casing for WebKit2 C API.
        https://bugs.webkit.org/show_bug.cgi?id=109128

        Reviewed by Kenneth Rohde Christiansen.

        Add "-readability/enum_casing" for WebKit2 C APIs because we use word
        which starts with non-capital letter 'k' for types of enums.

        * Scripts/webkitpy/style/checker.py:

2013-02-07  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed warning fix.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (BuildAndTestFactory.__init__):
        (DownloadAndPerfTestWebKit2Factory.__init__):

2013-02-07  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed typo fix after r142121.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2013-02-07  Vivek Galatage  <vivek.vg@samsung.com>

        [Qt] QtTestBrowser should provide option to enable/disable Javascript
        https://bugs.webkit.org/show_bug.cgi?id=107461

        Reviewed by Jocelyn Turcotte.

        Option to enable/disable Javascript would be handy option to test
        certain functionalities of web pages with/without Javascript.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        (LauncherWindow::toggleJavaScriptEnabled):
        * QtTestBrowser/launcherwindow.h:
        (LauncherWindow):

2013-02-07  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL] Add a WebKit2 Performance bot.
        https://bugs.webkit.org/show_bug.cgi?id=109188

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add the
        efl-linux-perf-1 slave (a 64-bit Release WK2 Perf bot), and make
        the "EFL Linux 64-bit Release" bot trigger it.

2013-02-07  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] CHHW - Characters that are using 32 bits encoding get trunked to 16bits
        https://bugs.webkit.org/show_bug.cgi?id=109126
        PR 292540

        Reviewed by Yong Li.

        Change char code to 4 bytes.

        * DumpRenderTree/blackberry/EventSender.cpp:
        (keyDownCallback):

2013-02-07  Gavin Peters  <gavinp@chromium.org>

        Unreviewed, rolling out r142090.
        http://trac.webkit.org/changeset/142090
        https://bugs.webkit.org/show_bug.cgi?id=108466

        lots of selection expectations failures

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTask.h:
        (WebTaskList):
        * DumpRenderTree/chromium/TestRunner/public/WebTestCommon.h: Removed.
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        (WebTestInterfaces):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebTestProxyBase):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        (WebTestRunner::AccessibilityUIElement::AccessibilityUIElement):
        (WebTestRunner::AccessibilityUIElementList::getOrCreate):
        (WebTestRunner::AccessibilityUIElementList::createRoot):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h:
        (AccessibilityUIElementList):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:
        (WebTestRunner::CppBoundClass::~CppBoundClass):
        (WebTestRunner::CppBoundClass::invoke):
        (WebTestRunner::CppBoundClass::getProperty):
        (WebTestRunner::CppBoundClass::setProperty):
        (WebTestRunner::CppBoundClass::bindCallback):
        (WebTestRunner::CppBoundClass::bindGetterCallback):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::getAsCppVariant):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h:
        (WebTestRunner):
        (CppBoundClass):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::bindFallbackCallback):
        (WebTestRunner::CppBoundClass::bindFallbackMethod):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:
        (WebTestRunner::CppVariant::toString):
        (WebTestRunner::CppVariant::toInt32):
        (WebTestRunner::CppVariant::toDouble):
        (WebTestRunner::CppVariant::toBoolean):
        (WebTestRunner::CppVariant::toStringVector):
        (WebTestRunner::CppVariant::invoke):
        (WebTestRunner::CppVariant::invokeDefault):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.h:
        (CppVariant):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::EventSender):
        (WebTestRunner::EventSender::reset):
        (WebTestRunner::EventSender::mouseDown):
        (WebTestRunner::EventSender::mouseUp):
        (WebTestRunner::EventSender::mouseMoveTo):
        (WebTestRunner::EventSender::keyDown):
        (WebTestRunner::EventSender::dispatchMessage):
        (WebTestRunner::EventSender::leapForward):
        (WebTestRunner::EventSender::replaySavedEvents):
        (WebTestRunner::makeMenuItemStringsFor):
        (WebTestRunner::EventSender::contextClick):
        (WebTestRunner::EventSender::beginDragWithFiles):
        (WebTestRunner::EventSender::addTouchPoint):
        (WebTestRunner::EventSender::releaseTouchPoint):
        (WebTestRunner::EventSender::updateTouchPoint):
        (WebTestRunner::EventSender::cancelTouchPoint):
        (WebTestRunner::EventSender::sendCurrentTouchEvent):
        (WebTestRunner::EventSender::gestureEvent):
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp:
        (WebTestRunner::NativeKeyCodeForWindowsKeyCode):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.cpp:
        (MockGrammarCheck::checkGrammarOfString):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.h:
        (MockGrammarCheck):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp:
        (append):
        (isNotASCIIAlpha):
        (MockSpellCheck::spellCheckWord):
        (MockSpellCheck::initializeIfNeeded):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.h:
        (MockSpellCheck):
        * DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp:
        (WebTestRunner::SpellCheckClient::checkTextOfParagraph):
        (WebTestRunner::SpellCheckClient::finishLastTextCheck):
        * DumpRenderTree/chromium/TestRunner/src/TestCommon.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp:
        (WebTestRunner::TestPlugin::TestPlugin):
        (WebTestRunner::TestPlugin::initialize):
        (WebTestRunner::TestPlugin::destroy):
        (WebTestRunner::TestPlugin::parsePrimitive):
        (WebTestRunner::TestPlugin::parseColor):
        (WebTestRunner::TestPlugin::initProgram):
        (WebTestRunner::TestPlugin::initPrimitive):
        (WebTestRunner::TestPlugin::drawPrimitive):
        (WebTestRunner::TestPlugin::loadShader):
        (WebTestRunner::TestPlugin::loadProgram):
        (WebTestRunner::TestPlugin::handleDragStatusUpdate):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.h:
        (TestPlugin):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::WorkQueue::processWorkSoon):
        (WebTestRunner::TestRunner::WorkQueue::processWork):
        (WebTestRunner::TestRunner::WorkQueue::reset):
        (WebTestRunner::TestRunner::WorkQueue::addWork):
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::policyDelegateDone):
        (WebTestRunner::TestRunner::findString):
        (WebTestRunner::TestRunner::setTextSubpixelPositioning):
        (WebTestRunner::TestRunner::overridePreference):
        (WebTestRunner):
        (WebTestRunner::TestRunner::setBackingScaleFactor):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebTestRunner::TestRunner::WorkQueue::isEmpty):
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp:
        (WebTestRunner::TextInputController::markedRange):
        (WebTestRunner::TextInputController::selectedRange):
        (WebTestRunner::TextInputController::firstRectForCharacterRange):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        * DumpRenderTree/chromium/TestRunner/src/WebTask.cpp:
        (WebTestRunner):
        (WebTestRunner::WebTaskList::WebTaskList):
        (WebTestRunner::WebTaskList::~WebTaskList):
        (WebTestRunner::WebTaskList::registerTask):
        (WebTestRunner::WebTaskList::unregisterTask):
        (WebTestRunner::WebTaskList::revokeAll):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::~WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::testInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::~WebTestProxyBase):
        (WebTestRunner::WebTestProxyBase::spellCheckClient):
        (WebTestRunner::WebTestProxyBase::registerIntentService):
        (WebTestRunner::WebTestProxyBase::dispatchIntent):
        (WebTestRunner::WebTestProxyBase::assignIdentifierToRequest):
        * DumpRenderTree/chromium/TestRunner/src/config.h: Removed.

2013-02-07  Jochen Eisinger  <jochen@chromium.org>

        [chromium] turn TestRunner library into a component build
        https://bugs.webkit.org/show_bug.cgi?id=108466

        Reviewed by Adam Barth.

        To achieve this, we need to drop all dependencies on WTF.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTask.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestCommon.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        (WebTestRunner::AccessibilityUIElement::AccessibilityUIElement):
        (WebTestRunner::AccessibilityUIElementList::getOrCreate):
        (WebTestRunner::AccessibilityUIElementList::createRoot):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h:
        (AccessibilityUIElementList):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:
        (WebTestRunner::CppBoundClass::~CppBoundClass):
        (WebTestRunner::CppBoundClass::invoke):
        (WebTestRunner::CppBoundClass::getProperty):
        (WebTestRunner::CppBoundClass::setProperty):
        (WebTestRunner::CppBoundClass::bindCallback):
        (WebTestRunner::CppBoundClass::bindGetterCallback):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::getAsCppVariant):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h:
        (WebTestRunner):
        (CppBoundClass):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::bindFallbackCallback):
        (WebTestRunner::CppBoundClass::bindFallbackMethod):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:
        (WebTestRunner::CppVariant::toString):
        (WebTestRunner::CppVariant::toInt32):
        (WebTestRunner::CppVariant::toDouble):
        (WebTestRunner::CppVariant::toBoolean):
        (WebTestRunner::CppVariant::toStringVector):
        (WebTestRunner::CppVariant::invoke):
        (WebTestRunner::CppVariant::invokeDefault):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.h:
        (CppVariant):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::EventSender):
        (WebTestRunner::EventSender::reset):
        (WebTestRunner::EventSender::mouseDown):
        (WebTestRunner::EventSender::mouseUp):
        (WebTestRunner::EventSender::mouseMoveTo):
        (WebTestRunner::EventSender::keyDown):
        (WebTestRunner::EventSender::dispatchMessage):
        (WebTestRunner::EventSender::leapForward):
        (WebTestRunner::EventSender::replaySavedEvents):
        (WebTestRunner::makeMenuItemStringsFor):
        (WebTestRunner::EventSender::contextClick):
        (WebTestRunner::EventSender::beginDragWithFiles):
        (WebTestRunner::EventSender::addTouchPoint):
        (WebTestRunner::EventSender::releaseTouchPoint):
        (WebTestRunner::EventSender::updateTouchPoint):
        (WebTestRunner::EventSender::cancelTouchPoint):
        (WebTestRunner::EventSender::sendCurrentTouchEvent):
        (WebTestRunner::EventSender::gestureEvent):
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp:
        (WebTestRunner::NativeKeyCodeForWindowsKeyCode):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.cpp:
        (WebTestRunner::MockGrammarCheck::checkGrammarOfString):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.h:
        (WebTestRunner):
        (MockGrammarCheck):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp:
        (WebTestRunner::MockSpellCheck::spellCheckWord):
        (WebTestRunner::MockSpellCheck::initializeIfNeeded):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.h:
        (MockSpellCheck):
        * DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp:
        (WebTestRunner::SpellCheckClient::checkTextOfParagraph):
        (WebTestRunner::SpellCheckClient::finishLastTextCheck):
        * DumpRenderTree/chromium/TestRunner/src/TestCommon.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.
        (isASCIIAlpha):
        (isNotASCIIAlpha):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp:
        (WebTestRunner::TestPlugin::TestPlugin):
        (WebTestRunner::TestPlugin::initialize):
        (WebTestRunner::TestPlugin::destroy):
        (WebTestRunner::TestPlugin::parsePrimitive):
        (WebTestRunner::TestPlugin::parseColor):
        (WebTestRunner::TestPlugin::initProgram):
        (WebTestRunner::TestPlugin::initPrimitive):
        (WebTestRunner::TestPlugin::drawPrimitive):
        (WebTestRunner::TestPlugin::loadShader):
        (WebTestRunner::TestPlugin::loadProgram):
        (WebTestRunner::TestPlugin::handleDragStatusUpdate):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.h:
        (TestPlugin):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::WorkQueue::processWorkSoon):
        (WebTestRunner::TestRunner::WorkQueue::processWork):
        (WebTestRunner::TestRunner::WorkQueue::reset):
        (WebTestRunner::TestRunner::WorkQueue::addWork):
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::policyDelegateDone):
        (WebTestRunner::TestRunner::findString):
        (WebTestRunner::TestRunner::setTextSubpixelPositioning):
        (WebTestRunner::TestRunner::overridePreference):
        (WebTestRunner::TestRunner::deliverWebIntent):
        (WebTestRunner::TestRunner::setBackingScaleFactor):
        (WebTestRunner::TestRunner::simulateLegacyWebNotificationClick):
        (WebTestRunner::TestRunner::setMockSpeechInputDumpRect):
        (WebTestRunner::TestRunner::wasMockSpeechRecognitionAborted):
        (WebTestRunner::TestRunner::setPointerLockWillFailSynchronously):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebTestRunner::TestRunner::WorkQueue::isEmpty):
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp:
        (WebTestRunner::TextInputController::markedRange):
        (WebTestRunner::TextInputController::selectedRange):
        (WebTestRunner::TextInputController::firstRectForCharacterRange):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        * DumpRenderTree/chromium/TestRunner/src/WebTask.cpp:
        (WebTestRunner::WebTaskList::~WebTaskList):
        (WebTestRunner::WebTaskList::registerTask):
        (WebTestRunner::WebTaskList::unregisterTask):
        (WebTestRunner::WebTaskList::revokeAll):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::~WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::testInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::~WebTestProxyBase):
        (WebTestRunner::WebTestProxyBase::spellCheckClient):
        (WebTestRunner::WebTestProxyBase::registerIntentService):
        (WebTestRunner::WebTestProxyBase::dispatchIntent):
        (WebTestRunner::WebTestProxyBase::assignIdentifierToRequest):
        * DumpRenderTree/chromium/TestRunner/src/config.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.

2013-02-07  Andras Becsi  <andras.becsi@digia.com>

        [Qt] Use GNU ar's thin archive format for intermediate static libs
        https://bugs.webkit.org/show_bug.cgi?id=109052

        Reviewed by Jocelyn Turcotte.

        With debug builds we exceed the 4GiB limit of GNU ar when creating the WebCore
        intermediate static library which results in build failure even with a x86_64
        toolchain (http://sourceware.org/bugzilla/show_bug.cgi?id=14625).

        When using a GNU toolchain we can use the thin archive format for these static
        libraries which also has the benefit of not copying the object files, thus
        drastically reducing disk usage and overall compile time.

        Currently qmake does not support GNU ar's thin archive format so for
        now we need to do the magic in the build system as a stopgap solution.

        * qmake/mkspecs/features/configure.prf:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/functions.prf:

2013-02-05  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Compile WTF tests of TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=108935

        Reviewed by Kenneth Rohde Christiansen.

        Add initial stubs and files for building at least the WTF tests.
        The WK2 tests need more platform code, in particular PlatformWebView
        and injected bundle support.

        * TestWebKitAPI/TestWebKitAPI.pri: Added.
        * TestWebKitAPI/TestWebKitAPI.pro: Added.
        * TestWebKitAPI/Tests/WTF/WTF.pro: Added.
        * TestWebKitAPI/qt/InjectedBundleControllerQt.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * TestWebKitAPI/qt/PlatformUtilitiesQt.cpp: Added.
        (Util):
        (TestWebKitAPI::Util::run):
        (TestWebKitAPI::Util::sleep):
        (TestWebKitAPI::Util::createInjectedBundlePath):
        (TestWebKitAPI::Util::createURLForResource):
        (TestWebKitAPI::Util::URLForNonExistentResource):
        * TestWebKitAPI/qt/main.cpp: Added.
        (main):
        * Tools.pro:
        * qmake/mkspecs/features/default_post.prf:

2013-02-06  Roger Fong  <roger_fong@apple.com>

        VS2010 WinLauncher project, property sheets and resources.
        https://bugs.webkit.org/show_bug.cgi?id=107037.

        Reviewed by Brent Fulgham.

        * WinLauncher/WinLauncher.vcxproj: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.ico: Copied from WinLauncher/WinLauncher.ico.
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.rc: Copied from WinLauncher/WinLauncherLauncher.rc.
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj.filters: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj.user: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherCommon.props: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherDebug.props: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.rc: Copied from WinLauncher/WinLauncher.rc.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj.filters: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj.user: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibCommon.props: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibDebug.props: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibPostBuild.cmd: Copied from WinLauncher/WinLauncherPostBuild.cmd.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibPreBuild.cmd: Copied from WinLauncher/WinLauncherPreBuild.cmd.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibRelease.props: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibResource.h: Copied from WinLauncher/resource.h.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherPostBuild.cmd: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherPreBuild.cmd: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherRelease.props: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherResource.h: Copied from WinLauncher/WinLauncherLauncherResource.h.
        * WinLauncher/WinLauncher.vcxproj/small.ico: Copied from WinLauncher/small.ico.

2013-02-06  Terry Anderson  <tdanderson@chromium.org>

        Add support for gesture scroll events that do not propagate to enclosing scrollables
        https://bugs.webkit.org/show_bug.cgi?id=108849

        Reviewed by Antonio Gomes.

        Modify chromium's DRT EventSender to support the new event type
        GestureScrollUpdateWithoutPropagation.

        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::EventSender):
        (WebTestRunner::EventSender::gestureScrollUpdateWithoutPropagation):
        (WebTestRunner::EventSender::gestureEvent):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.h:
        (EventSender):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp:
        (WebTestRunner::TestPlugin::handleInputEvent):

2013-02-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142032.
        http://trac.webkit.org/changeset/142032
        https://bugs.webkit.org/show_bug.cgi?id=109095

        component build still broken (Requested by jochen__ on
        #webkit).

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTask.h:
        (WebTaskList):
        * DumpRenderTree/chromium/TestRunner/public/WebTestCommon.h: Removed.
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        (WebTestInterfaces):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebTestProxyBase):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        (WebTestRunner::AccessibilityUIElement::AccessibilityUIElement):
        (WebTestRunner::AccessibilityUIElementList::getOrCreate):
        (WebTestRunner::AccessibilityUIElementList::createRoot):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h:
        (AccessibilityUIElementList):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:
        (WebTestRunner::CppBoundClass::~CppBoundClass):
        (WebTestRunner::CppBoundClass::invoke):
        (WebTestRunner::CppBoundClass::getProperty):
        (WebTestRunner::CppBoundClass::setProperty):
        (WebTestRunner::CppBoundClass::bindCallback):
        (WebTestRunner::CppBoundClass::bindGetterCallback):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::getAsCppVariant):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h:
        (WebTestRunner):
        (CppBoundClass):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::bindFallbackCallback):
        (WebTestRunner::CppBoundClass::bindFallbackMethod):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:
        (WebTestRunner::CppVariant::toString):
        (WebTestRunner::CppVariant::toInt32):
        (WebTestRunner::CppVariant::toDouble):
        (WebTestRunner::CppVariant::toBoolean):
        (WebTestRunner::CppVariant::toStringVector):
        (WebTestRunner::CppVariant::invoke):
        (WebTestRunner::CppVariant::invokeDefault):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.h:
        (CppVariant):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::EventSender):
        (WebTestRunner::EventSender::reset):
        (WebTestRunner::EventSender::mouseDown):
        (WebTestRunner::EventSender::mouseUp):
        (WebTestRunner::EventSender::mouseMoveTo):
        (WebTestRunner::EventSender::keyDown):
        (WebTestRunner::EventSender::dispatchMessage):
        (WebTestRunner::EventSender::leapForward):
        (WebTestRunner::EventSender::replaySavedEvents):
        (WebTestRunner::makeMenuItemStringsFor):
        (WebTestRunner::EventSender::contextClick):
        (WebTestRunner::EventSender::beginDragWithFiles):
        (WebTestRunner::EventSender::addTouchPoint):
        (WebTestRunner::EventSender::releaseTouchPoint):
        (WebTestRunner::EventSender::updateTouchPoint):
        (WebTestRunner::EventSender::cancelTouchPoint):
        (WebTestRunner::EventSender::sendCurrentTouchEvent):
        (WebTestRunner::EventSender::gestureEvent):
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp:
        (WebTestRunner::NativeKeyCodeForWindowsKeyCode):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.cpp:
        (MockGrammarCheck::checkGrammarOfString):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.h:
        (MockGrammarCheck):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp:
        (append):
        (isNotASCIIAlpha):
        (MockSpellCheck::spellCheckWord):
        (MockSpellCheck::initializeIfNeeded):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.h:
        (MockSpellCheck):
        * DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp:
        (WebTestRunner::SpellCheckClient::checkTextOfParagraph):
        (WebTestRunner::SpellCheckClient::finishLastTextCheck):
        * DumpRenderTree/chromium/TestRunner/src/TestCommon.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp:
        (WebTestRunner::TestPlugin::TestPlugin):
        (WebTestRunner::TestPlugin::initialize):
        (WebTestRunner::TestPlugin::destroy):
        (WebTestRunner::TestPlugin::parsePrimitive):
        (WebTestRunner::TestPlugin::parseColor):
        (WebTestRunner::TestPlugin::initProgram):
        (WebTestRunner::TestPlugin::initPrimitive):
        (WebTestRunner::TestPlugin::drawPrimitive):
        (WebTestRunner::TestPlugin::loadShader):
        (WebTestRunner::TestPlugin::loadProgram):
        (WebTestRunner::TestPlugin::handleDragStatusUpdate):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.h:
        (TestPlugin):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::WorkQueue::processWorkSoon):
        (WebTestRunner::TestRunner::WorkQueue::processWork):
        (WebTestRunner::TestRunner::WorkQueue::reset):
        (WebTestRunner::TestRunner::WorkQueue::addWork):
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::policyDelegateDone):
        (WebTestRunner::TestRunner::findString):
        (WebTestRunner::TestRunner::setTextSubpixelPositioning):
        (WebTestRunner::TestRunner::overridePreference):
        (WebTestRunner):
        (WebTestRunner::TestRunner::setBackingScaleFactor):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebTestRunner::TestRunner::WorkQueue::isEmpty):
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp:
        (WebTestRunner::TextInputController::markedRange):
        (WebTestRunner::TextInputController::selectedRange):
        (WebTestRunner::TextInputController::firstRectForCharacterRange):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        * DumpRenderTree/chromium/TestRunner/src/WebTask.cpp:
        (WebTestRunner):
        (WebTestRunner::WebTaskList::WebTaskList):
        (WebTestRunner::WebTaskList::~WebTaskList):
        (WebTestRunner::WebTaskList::registerTask):
        (WebTestRunner::WebTaskList::unregisterTask):
        (WebTestRunner::WebTaskList::revokeAll):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::~WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::testInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::~WebTestProxyBase):
        (WebTestRunner::WebTestProxyBase::spellCheckClient):
        (WebTestRunner::WebTestProxyBase::registerIntentService):
        (WebTestRunner::WebTestProxyBase::dispatchIntent):
        (WebTestRunner::WebTestProxyBase::assignIdentifierToRequest):
        * DumpRenderTree/chromium/TestRunner/src/config.h: Removed.

2013-02-06  Jochen Eisinger  <jochen@chromium.org>

        [chromium] turn TestRunner library into a component build
        https://bugs.webkit.org/show_bug.cgi?id=108466

        Reviewed by Adam Barth.

        To achieve this, we need to drop all dependencies on WTF.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTask.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestCommon.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        (WebTestRunner::AccessibilityUIElement::AccessibilityUIElement):
        (WebTestRunner::AccessibilityUIElementList::getOrCreate):
        (WebTestRunner::AccessibilityUIElementList::createRoot):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h:
        (AccessibilityUIElementList):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:
        (WebTestRunner::CppBoundClass::~CppBoundClass):
        (WebTestRunner::CppBoundClass::invoke):
        (WebTestRunner::CppBoundClass::getProperty):
        (WebTestRunner::CppBoundClass::setProperty):
        (WebTestRunner::CppBoundClass::bindCallback):
        (WebTestRunner::CppBoundClass::bindGetterCallback):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::getAsCppVariant):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h:
        (WebTestRunner):
        (CppBoundClass):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::bindFallbackCallback):
        (WebTestRunner::CppBoundClass::bindFallbackMethod):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:
        (WebTestRunner::CppVariant::toString):
        (WebTestRunner::CppVariant::toInt32):
        (WebTestRunner::CppVariant::toDouble):
        (WebTestRunner::CppVariant::toBoolean):
        (WebTestRunner::CppVariant::toStringVector):
        (WebTestRunner::CppVariant::invoke):
        (WebTestRunner::CppVariant::invokeDefault):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.h:
        (CppVariant):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::EventSender):
        (WebTestRunner::EventSender::reset):
        (WebTestRunner::EventSender::mouseDown):
        (WebTestRunner::EventSender::mouseUp):
        (WebTestRunner::EventSender::mouseMoveTo):
        (WebTestRunner::EventSender::keyDown):
        (WebTestRunner::EventSender::dispatchMessage):
        (WebTestRunner::EventSender::leapForward):
        (WebTestRunner::EventSender::replaySavedEvents):
        (WebTestRunner::makeMenuItemStringsFor):
        (WebTestRunner::EventSender::contextClick):
        (WebTestRunner::EventSender::beginDragWithFiles):
        (WebTestRunner::EventSender::addTouchPoint):
        (WebTestRunner::EventSender::releaseTouchPoint):
        (WebTestRunner::EventSender::updateTouchPoint):
        (WebTestRunner::EventSender::cancelTouchPoint):
        (WebTestRunner::EventSender::sendCurrentTouchEvent):
        (WebTestRunner::EventSender::gestureEvent):
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp:
        (WebTestRunner::NativeKeyCodeForWindowsKeyCode):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.cpp:
        (WebTestRunner::MockGrammarCheck::checkGrammarOfString):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.h:
        (WebTestRunner):
        (MockGrammarCheck):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp:
        (WebTestRunner::MockSpellCheck::spellCheckWord):
        (WebTestRunner::MockSpellCheck::initializeIfNeeded):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.h:
        (MockSpellCheck):
        * DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp:
        (WebTestRunner::SpellCheckClient::checkTextOfParagraph):
        (WebTestRunner::SpellCheckClient::finishLastTextCheck):
        * DumpRenderTree/chromium/TestRunner/src/TestCommon.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.
        (isASCIIAlpha):
        (isNotASCIIAlpha):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp:
        (WebTestRunner::TestPlugin::TestPlugin):
        (WebTestRunner::TestPlugin::initialize):
        (WebTestRunner::TestPlugin::destroy):
        (WebTestRunner::TestPlugin::parsePrimitive):
        (WebTestRunner::TestPlugin::parseColor):
        (WebTestRunner::TestPlugin::initProgram):
        (WebTestRunner::TestPlugin::initPrimitive):
        (WebTestRunner::TestPlugin::drawPrimitive):
        (WebTestRunner::TestPlugin::loadShader):
        (WebTestRunner::TestPlugin::loadProgram):
        (WebTestRunner::TestPlugin::handleDragStatusUpdate):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.h:
        (TestPlugin):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::WorkQueue::processWorkSoon):
        (WebTestRunner::TestRunner::WorkQueue::processWork):
        (WebTestRunner::TestRunner::WorkQueue::reset):
        (WebTestRunner::TestRunner::WorkQueue::addWork):
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::policyDelegateDone):
        (WebTestRunner::TestRunner::findString):
        (WebTestRunner::TestRunner::setTextSubpixelPositioning):
        (WebTestRunner::TestRunner::overridePreference):
        (WebTestRunner::TestRunner::deliverWebIntent):
        (WebTestRunner::TestRunner::setBackingScaleFactor):
        (WebTestRunner::TestRunner::simulateLegacyWebNotificationClick):
        (WebTestRunner::TestRunner::setMockSpeechInputDumpRect):
        (WebTestRunner::TestRunner::wasMockSpeechRecognitionAborted):
        (WebTestRunner::TestRunner::setPointerLockWillFailSynchronously):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebTestRunner::TestRunner::WorkQueue::isEmpty):
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp:
        (WebTestRunner::TextInputController::markedRange):
        (WebTestRunner::TextInputController::selectedRange):
        (WebTestRunner::TextInputController::firstRectForCharacterRange):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        * DumpRenderTree/chromium/TestRunner/src/WebTask.cpp:
        (WebTestRunner::WebTaskList::~WebTaskList):
        (WebTestRunner::WebTaskList::registerTask):
        (WebTestRunner::WebTaskList::unregisterTask):
        (WebTestRunner::WebTaskList::revokeAll):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::~WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::testInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::~WebTestProxyBase):
        (WebTestRunner::WebTestProxyBase::spellCheckClient):
        (WebTestRunner::WebTestProxyBase::registerIntentService):
        (WebTestRunner::WebTestProxyBase::dispatchIntent):
        (WebTestRunner::WebTestProxyBase::assignIdentifierToRequest):
        * DumpRenderTree/chromium/TestRunner/src/config.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.

2013-02-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142025.
        http://trac.webkit.org/changeset/142025
        https://bugs.webkit.org/show_bug.cgi?id=109091

        broke the build (Requested by tdanderson on #webkit).

        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::EventSender):
        (WebTestRunner::EventSender::gestureEvent):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.h:
        (EventSender):

2013-02-06  Terry Anderson  <tdanderson@chromium.org>

        Add support for gesture scroll events that do not propagate to enclosing scrollables
        https://bugs.webkit.org/show_bug.cgi?id=108849

        Reviewed by Antonio Gomes.

        Modify chromium's DRT EventSender to support the new event type
        GestureScrollUpdateWithoutPropagation.

        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::EventSender):
        (WebTestRunner::EventSender::gestureScrollUpdateWithoutPropagation):
        (WebTestRunner::EventSender::gestureEvent):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.h:
        (EventSender):

2013-02-06  Zan Dobersek  <zdobersek@igalia.com>

        [TestResultServer] Adjust the name of the GTK 64-bit debug builder
        https://bugs.webkit.org/show_bug.cgi?id=109016

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/builders.jsonp: The GTK 64-bit debug
        builder was adjusted to build WebKit1 only, with the name changed accordingly.
        Reflect that change here as well.

2013-02-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141991.
        http://trac.webkit.org/changeset/141991
        https://bugs.webkit.org/show_bug.cgi?id=109047

        Fails to compile on all Chromium platforms (Requested by
        schenney on #webkit).

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTask.h:
        (WebTaskList):
        * DumpRenderTree/chromium/TestRunner/public/WebTestCommon.h: Removed.
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        (WebTestInterfaces):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebTestProxyBase):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        (WebTestRunner::AccessibilityUIElement::AccessibilityUIElement):
        (WebTestRunner::AccessibilityUIElementList::getOrCreate):
        (WebTestRunner::AccessibilityUIElementList::createRoot):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h:
        (AccessibilityUIElementList):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:
        (WebTestRunner::CppBoundClass::~CppBoundClass):
        (WebTestRunner::CppBoundClass::invoke):
        (WebTestRunner::CppBoundClass::getProperty):
        (WebTestRunner::CppBoundClass::setProperty):
        (WebTestRunner::CppBoundClass::bindCallback):
        (WebTestRunner::CppBoundClass::bindGetterCallback):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::getAsCppVariant):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h:
        (WebTestRunner):
        (CppBoundClass):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::bindFallbackCallback):
        (WebTestRunner::CppBoundClass::bindFallbackMethod):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:
        (WebTestRunner::CppVariant::toString):
        (WebTestRunner::CppVariant::toInt32):
        (WebTestRunner::CppVariant::toDouble):
        (WebTestRunner::CppVariant::toBoolean):
        (WebTestRunner::CppVariant::toStringVector):
        (WebTestRunner::CppVariant::invoke):
        (WebTestRunner::CppVariant::invokeDefault):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.h:
        (CppVariant):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::EventSender):
        (WebTestRunner::EventSender::reset):
        (WebTestRunner::EventSender::mouseDown):
        (WebTestRunner::EventSender::mouseUp):
        (WebTestRunner::EventSender::mouseMoveTo):
        (WebTestRunner::EventSender::keyDown):
        (WebTestRunner::EventSender::dispatchMessage):
        (WebTestRunner::EventSender::leapForward):
        (WebTestRunner::EventSender::replaySavedEvents):
        (WebTestRunner::makeMenuItemStringsFor):
        (WebTestRunner::EventSender::contextClick):
        (WebTestRunner::EventSender::beginDragWithFiles):
        (WebTestRunner::EventSender::addTouchPoint):
        (WebTestRunner::EventSender::releaseTouchPoint):
        (WebTestRunner::EventSender::updateTouchPoint):
        (WebTestRunner::EventSender::cancelTouchPoint):
        (WebTestRunner::EventSender::sendCurrentTouchEvent):
        (WebTestRunner::EventSender::gestureEvent):
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp:
        (WebTestRunner::NativeKeyCodeForWindowsKeyCode):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.cpp:
        (MockGrammarCheck::checkGrammarOfString):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.h:
        (MockGrammarCheck):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp:
        (append):
        (isNotASCIIAlpha):
        (MockSpellCheck::spellCheckWord):
        (MockSpellCheck::initializeIfNeeded):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.h:
        (MockSpellCheck):
        * DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp:
        (WebTestRunner::SpellCheckClient::checkTextOfParagraph):
        (WebTestRunner::SpellCheckClient::finishLastTextCheck):
        * DumpRenderTree/chromium/TestRunner/src/TestCommon.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp:
        (WebTestRunner::TestPlugin::TestPlugin):
        (WebTestRunner::TestPlugin::initialize):
        (WebTestRunner::TestPlugin::destroy):
        (WebTestRunner::TestPlugin::parsePrimitive):
        (WebTestRunner::TestPlugin::parseColor):
        (WebTestRunner::TestPlugin::initProgram):
        (WebTestRunner::TestPlugin::initPrimitive):
        (WebTestRunner::TestPlugin::drawPrimitive):
        (WebTestRunner::TestPlugin::loadShader):
        (WebTestRunner::TestPlugin::loadProgram):
        (WebTestRunner::TestPlugin::handleDragStatusUpdate):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.h:
        (TestPlugin):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::WorkQueue::processWorkSoon):
        (WebTestRunner::TestRunner::WorkQueue::processWork):
        (WebTestRunner::TestRunner::WorkQueue::reset):
        (WebTestRunner::TestRunner::WorkQueue::addWork):
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::policyDelegateDone):
        (WebTestRunner::TestRunner::findString):
        (WebTestRunner::TestRunner::setTextSubpixelPositioning):
        (WebTestRunner::TestRunner::overridePreference):
        (WebTestRunner):
        (WebTestRunner::TestRunner::setBackingScaleFactor):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebTestRunner::TestRunner::WorkQueue::isEmpty):
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp:
        (WebTestRunner::TextInputController::markedRange):
        (WebTestRunner::TextInputController::selectedRange):
        (WebTestRunner::TextInputController::firstRectForCharacterRange):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        * DumpRenderTree/chromium/TestRunner/src/WebTask.cpp:
        (WebTestRunner):
        (WebTestRunner::WebTaskList::WebTaskList):
        (WebTestRunner::WebTaskList::~WebTaskList):
        (WebTestRunner::WebTaskList::registerTask):
        (WebTestRunner::WebTaskList::unregisterTask):
        (WebTestRunner::WebTaskList::revokeAll):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::~WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::testInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::~WebTestProxyBase):
        (WebTestRunner::WebTestProxyBase::spellCheckClient):
        (WebTestRunner::WebTestProxyBase::registerIntentService):
        (WebTestRunner::WebTestProxyBase::dispatchIntent):
        (WebTestRunner::WebTestProxyBase::assignIdentifierToRequest):
        * DumpRenderTree/chromium/TestRunner/src/config.h: Removed.

2013-02-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141995.
        http://trac.webkit.org/changeset/141995
        https://bugs.webkit.org/show_bug.cgi?id=109046

        May allow me to roll out the real problem (Requested by
        schenney on #webkit).

        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::sendWebIntentResponse):
        (WebTestRunner::TestRunner::deliverWebIntent):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::registerIntentService):
        (WebTestRunner::WebTestProxyBase::dispatchIntent):

2013-02-06  Jochen Eisinger  <jochen@chromium.org>

        [chromium] fix android build which doesn't support intents

        Unreviewed build fix.

        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::sendWebIntentResponse):
        (WebTestRunner::TestRunner::deliverWebIntent):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::registerIntentService):
        (WebTestRunner::WebTestProxyBase::dispatchIntent):

2013-02-06  Jochen Eisinger  <jochen@chromium.org>

        [chromium] turn TestRunner library into a component build
        https://bugs.webkit.org/show_bug.cgi?id=108466

        Reviewed by Adam Barth.

        To achieve this, we need to drop all dependencies on WTF.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTask.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestCommon.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        (WebTestRunner::AccessibilityUIElement::AccessibilityUIElement):
        (WebTestRunner::AccessibilityUIElementList::getOrCreate):
        (WebTestRunner::AccessibilityUIElementList::createRoot):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h:
        (AccessibilityUIElementList):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:
        (WebTestRunner::CppBoundClass::~CppBoundClass):
        (WebTestRunner::CppBoundClass::invoke):
        (WebTestRunner::CppBoundClass::getProperty):
        (WebTestRunner::CppBoundClass::setProperty):
        (WebTestRunner::CppBoundClass::bindCallback):
        (WebTestRunner::CppBoundClass::bindGetterCallback):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::getAsCppVariant):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h:
        (WebTestRunner):
        (CppBoundClass):
        (WebTestRunner::CppBoundClass::bindProperty):
        (WebTestRunner::CppBoundClass::bindFallbackCallback):
        (WebTestRunner::CppBoundClass::bindFallbackMethod):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:
        (WebTestRunner::CppVariant::toString):
        (WebTestRunner::CppVariant::toInt32):
        (WebTestRunner::CppVariant::toDouble):
        (WebTestRunner::CppVariant::toBoolean):
        (WebTestRunner::CppVariant::toStringVector):
        (WebTestRunner::CppVariant::invoke):
        (WebTestRunner::CppVariant::invokeDefault):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.h:
        (CppVariant):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::EventSender):
        (WebTestRunner::EventSender::reset):
        (WebTestRunner::EventSender::mouseDown):
        (WebTestRunner::EventSender::mouseUp):
        (WebTestRunner::EventSender::mouseMoveTo):
        (WebTestRunner::EventSender::keyDown):
        (WebTestRunner::EventSender::dispatchMessage):
        (WebTestRunner::EventSender::leapForward):
        (WebTestRunner::EventSender::replaySavedEvents):
        (WebTestRunner::makeMenuItemStringsFor):
        (WebTestRunner::EventSender::contextClick):
        (WebTestRunner::EventSender::beginDragWithFiles):
        (WebTestRunner::EventSender::addTouchPoint):
        (WebTestRunner::EventSender::releaseTouchPoint):
        (WebTestRunner::EventSender::updateTouchPoint):
        (WebTestRunner::EventSender::cancelTouchPoint):
        (WebTestRunner::EventSender::sendCurrentTouchEvent):
        (WebTestRunner::EventSender::gestureEvent):
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp:
        (WebTestRunner::NativeKeyCodeForWindowsKeyCode):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.cpp:
        (WebTestRunner::MockGrammarCheck::checkGrammarOfString):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.h:
        (WebTestRunner):
        (MockGrammarCheck):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp:
        (WebTestRunner::MockSpellCheck::spellCheckWord):
        (WebTestRunner::MockSpellCheck::initializeIfNeeded):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.h:
        (MockSpellCheck):
        * DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp:
        (WebTestRunner::SpellCheckClient::checkTextOfParagraph):
        (WebTestRunner::SpellCheckClient::finishLastTextCheck):
        * DumpRenderTree/chromium/TestRunner/src/TestCommon.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.
        (isASCIIAlpha):
        (isNotASCIIAlpha):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp:
        (WebTestRunner::TestPlugin::TestPlugin):
        (WebTestRunner::TestPlugin::initialize):
        (WebTestRunner::TestPlugin::destroy):
        (WebTestRunner::TestPlugin::parsePrimitive):
        (WebTestRunner::TestPlugin::parseColor):
        (WebTestRunner::TestPlugin::initProgram):
        (WebTestRunner::TestPlugin::initPrimitive):
        (WebTestRunner::TestPlugin::drawPrimitive):
        (WebTestRunner::TestPlugin::loadShader):
        (WebTestRunner::TestPlugin::loadProgram):
        (WebTestRunner::TestPlugin::handleDragStatusUpdate):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.h:
        (TestPlugin):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::WorkQueue::processWorkSoon):
        (WebTestRunner::TestRunner::WorkQueue::processWork):
        (WebTestRunner::TestRunner::WorkQueue::reset):
        (WebTestRunner::TestRunner::WorkQueue::addWork):
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::policyDelegateDone):
        (WebTestRunner::TestRunner::findString):
        (WebTestRunner::TestRunner::setTextSubpixelPositioning):
        (WebTestRunner::TestRunner::overridePreference):
        (WebTestRunner::TestRunner::deliverWebIntent):
        (WebTestRunner::TestRunner::setBackingScaleFactor):
        (WebTestRunner::TestRunner::simulateLegacyWebNotificationClick):
        (WebTestRunner::TestRunner::setMockSpeechInputDumpRect):
        (WebTestRunner::TestRunner::wasMockSpeechRecognitionAborted):
        (WebTestRunner::TestRunner::setPointerLockWillFailSynchronously):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebTestRunner::TestRunner::WorkQueue::isEmpty):
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp:
        (WebTestRunner::TextInputController::markedRange):
        (WebTestRunner::TextInputController::selectedRange):
        (WebTestRunner::TextInputController::firstRectForCharacterRange):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        * DumpRenderTree/chromium/TestRunner/src/WebTask.cpp:
        (WebTestRunner::WebTaskList::~WebTaskList):
        (WebTestRunner::WebTaskList::registerTask):
        (WebTestRunner::WebTaskList::unregisterTask):
        (WebTestRunner::WebTaskList::revokeAll):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::~WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::testInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::~WebTestProxyBase):
        (WebTestRunner::WebTestProxyBase::spellCheckClient):
        (WebTestRunner::WebTestProxyBase::registerIntentService):
        (WebTestRunner::WebTestProxyBase::dispatchIntent):
        (WebTestRunner::WebTestProxyBase::assignIdentifierToRequest):
        * DumpRenderTree/chromium/TestRunner/src/config.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.

2013-02-06  Mike West  <mkwst@chromium.org>

        Add an ENABLE_NOSNIFF feature flag.
        https://bugs.webkit.org/show_bug.cgi?id=109029

        Reviewed by Jochen Eisinger.

        This new flag will control the behavior of 'X-Content-Type-Options: nosniff'
        when processing script and other resource types.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2013-02-06  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Implement DTMF support in RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=106782

        Reviewed by Adam Barth.

        Adding Mock functionality for the DTMFSender.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/MockWebRTCDTMFSenderHandler.cpp: Added.
        (DTMFSenderToneTask):
        (DTMFSenderToneTask::DTMFSenderToneTask):
        (MockWebRTCDTMFSenderHandler::MockWebRTCDTMFSenderHandler):
        (MockWebRTCDTMFSenderHandler::setClient):
        (MockWebRTCDTMFSenderHandler::currentToneBuffer):
        (MockWebRTCDTMFSenderHandler::canInsertDTMF):
        (MockWebRTCDTMFSenderHandler::insertDTMF):
        * DumpRenderTree/chromium/MockWebRTCDTMFSenderHandler.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.
        (MockWebRTCDTMFSenderHandler):
        (MockWebRTCDTMFSenderHandler::taskList):
        (MockWebRTCDTMFSenderHandler::clearToneBuffer):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::createDTMFSender):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):

2013-02-06  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed. Update my email address in committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-05  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CMake] Don't warn unused cmake variables which aren't used by cmake ports
        https://bugs.webkit.org/show_bug.cgi?id=108761

        Reviewed by Laszlo Gombos.

        Ignore unused macro variables which aren't used by cmake ports.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2013-02-05  Julie Parent  <jparent@chromium.org>

        Add cc_unittests to the dashboards
        https://bugs.webkit.org/show_bug.cgi?id=108878

        Reviewed by Dirk Pranke.

        * TestResultServer/static-dashboards/builders.js:
        (loadBuildersList):
        * TestResultServer/static-dashboards/dashboard_base.js:
        (currentBuilderGroupCategory):

2013-02-05  Adam Barth  <abarth@webkit.org>

        DumpRenderTree should be able to enable the threaded parser
        https://bugs.webkit.org/show_bug.cgi?id=108970

        Reviewed by Eric Seidel.

        We can now enable the parser at runtime using --enable-threaded-html-parser.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
        (WebPreferences):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        (WebTestRunner::WebPreferences::applyTo):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setThreadedHTMLParser):
        (TestShell):

2013-02-05  Benjamin Poulain  <bpoulain@apple.com>

        Make StringBuilder::toAtomicString() consistent with StringBuilder::toString() for strings of null length
        https://bugs.webkit.org/show_bug.cgi?id=108894

        Reviewed by Andreas Kling.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        Extend the tests to check toAtomicString() on an empty builder.

2013-02-05  Jochen Eisinger  <jochen@chromium.org>

        [chromium] remove methods from the WebTestRunner interface that are only used by WebTestProxyBase
        https://bugs.webkit.org/show_bug.cgi?id=108926

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebKit):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):

2013-02-05  Jochen Eisinger  <jochen@chromium.org>

        [chromium] remove unneccessary 0 checks for testRunner now that the TestRunner library owns it
        https://bugs.webkit.org/show_bug.cgi?id=108923

        Reviewed by Kentaro Hara.

        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner):
        (WebTestRunner::WebTestProxyBase::shouldBeginEditing):
        (WebTestRunner::WebTestProxyBase::shouldEndEditing):
        (WebTestRunner::WebTestProxyBase::shouldInsertNode):
        (WebTestRunner::WebTestProxyBase::shouldInsertText):
        (WebTestRunner::WebTestProxyBase::shouldChangeSelectedRange):
        (WebTestRunner::WebTestProxyBase::shouldDeleteRange):
        (WebTestRunner::WebTestProxyBase::shouldApplyStyle):
        (WebTestRunner::WebTestProxyBase::didBeginEditing):
        (WebTestRunner::WebTestProxyBase::didChangeSelection):
        (WebTestRunner::WebTestProxyBase::didChangeContents):
        (WebTestRunner::WebTestProxyBase::didEndEditing):
        (WebTestRunner::WebTestProxyBase::createView):
        (WebTestRunner::WebTestProxyBase::setStatusText):
        (WebTestRunner::WebTestProxyBase::didStopLoading):
        (WebTestRunner::WebTestProxyBase::isSmartInsertDeleteEnabled):
        (WebTestRunner::WebTestProxyBase::isSelectTrailingWhitespaceEnabled):
        (WebTestRunner::WebTestProxyBase::willPerformClientRedirect):
        (WebTestRunner::WebTestProxyBase::didCancelClientRedirect):
        (WebTestRunner::WebTestProxyBase::didStartProvisionalLoad):
        (WebTestRunner::WebTestProxyBase::didReceiveServerRedirectForProvisionalLoad):
        (WebTestRunner::WebTestProxyBase::didFailProvisionalLoad):
        (WebTestRunner::WebTestProxyBase::didCommitProvisionalLoad):
        (WebTestRunner::WebTestProxyBase::didReceiveTitle):
        (WebTestRunner::WebTestProxyBase::didFinishDocumentLoad):
        (WebTestRunner::WebTestProxyBase::didHandleOnloadEvents):
        (WebTestRunner::WebTestProxyBase::didFailLoad):
        (WebTestRunner::WebTestProxyBase::didFinishLoad):
        (WebTestRunner::WebTestProxyBase::didChangeLocationWithinPage):
        (WebTestRunner::WebTestProxyBase::didDisplayInsecureContent):
        (WebTestRunner::WebTestProxyBase::didRunInsecureContent):
        (WebTestRunner::WebTestProxyBase::didDetectXSS):
        (WebTestRunner::WebTestProxyBase::assignIdentifierToRequest):
        (WebTestRunner::WebTestProxyBase::willRequestResource):
        (WebTestRunner::WebTestProxyBase::didCreateDataSource):
        (WebTestRunner::WebTestProxyBase::willSendRequest):
        (WebTestRunner::WebTestProxyBase::didReceiveResponse):
        (WebTestRunner::WebTestProxyBase::didFinishResourceLoad):
        (WebTestRunner::WebTestProxyBase::didFailResourceLoad):
        (WebTestRunner::WebTestProxyBase::runModalBeforeUnloadDialog):
        (WebTestRunner::WebTestProxyBase::locationChangeDone):
        (WebTestRunner::WebTestProxyBase::decidePolicyForNavigation):
        (WebTestRunner::WebTestProxyBase::willCheckAndDispatchMessageEvent):

2013-02-04  Alan Cutter  <alancutter@chromium.org>

        EWS bots don't remove untracked files after processing a patch
        https://bugs.webkit.org/show_bug.cgi?id=108891

        Reviewed by Adam Barth.

        Added option to remove untracked files in the bot's repo.

        * EWSTools/start-queue.sh:

2013-02-04  Benjamin Poulain  <bpoulain@apple.com>

        Kill suspendAnimation(), resumeAnimation() and numberOfActiveAnimations() from DRT/WTR; use Internals
        https://bugs.webkit.org/show_bug.cgi?id=108741

        Reviewed by Tony Chang.

        Remove all support for suspendAnimation(), resumeAnimation() and numberOfActiveAnimations().

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/wx/TestRunnerWx.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2013-02-04  Nico Weber  <thakis@chromium.org>

        [chromium] Try to get WebKit building with enable_web_intents set to 0 on Windows too.
        https://bugs.webkit.org/show_bug.cgi?id=108887

        Reviewed by Kentaro Hara.

        This is a follow-up to http://trac.webkit.org/changeset/141614. The
        Mac and Linux linkers didn't complain about the reference to
        WebIntent in that function for some reason (probably because it's
        a dead function that's stripped).

        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):

2013-02-04  Julie Parent  <jparent@chromium.org>

        Dashboard cleanup: Make builder a real dashboardSpecificParameter.
        https://bugs.webkit.org/show_bug.cgi?id=108706

        Reviewed by Dirk Pranke.
        
        Add builder to g_defaultDashboardSpecificParameter maps for the
        dashboards where it is used (flakiness, timeline, treemap).
        Default it to null, and then update reads of it to check the
        builder group's default if one is not set, rather than trying to
        set and track this everywhere.
        This allows us to remove tons of special-casing of builder parsing,
        including where we used to add it to the query string even when the
        user did not specify it.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (parseParameters):
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (generatePage):
        (handleQueryParameterChange):
        * TestResultServer/static-dashboards/loader.js:
        (.):
        * TestResultServer/static-dashboards/timeline_explorer.html:
        * TestResultServer/static-dashboards/treemap.html:

2013-02-04  Julie Parent  <jparent@chromium.org>

        Setting tests on flakiness dashboard should invalidate builder.
        https://bugs.webkit.org/show_bug.cgi?id=108521

        Reviewed by Dirk Pranke.
        
        When you move into a cross builder view, builder should not still be
        set.  Currently, it is deleted from the internal state, but still shows
        up in the url, causing the current state and the hash to not match.
        
        To see this in action, load the flakiness dashboard, select a builder,
        and then click on an individual test, to get into individual test view.
        The url will still have the builder you selected listed, even though it
        is cleared in the UI.
        
        The fix is to consider 'tests' to be a parameter that invalidates builder.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:

2013-02-04  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][WK2] Introduce a WebView class as counterpart for WKViewRef
        https://bugs.webkit.org/show_bug.cgi?id=107931

        Reviewed by Anders Carlsson.

        Change platformView to be a WKView and use WKViewGetEvasObject
        for the places where an Evas_Object is needed.

        Instead of extracting the Ecore_Evas* from the m_view we use
        the m_window instead, which actually holds the it.

        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        (TestWebKitAPI::PlatformWebView::resizeTo):
        (TestWebKitAPI::PlatformWebView::page):
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress):
        (TestWebKitAPI::PlatformWebView::simulateMouseMove):
        (TestWebKitAPI::PlatformWebView::simulateRightClick):
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp:
        (WTR::EventSenderProxy::sendTouchEvent):
        (WTR::EventSenderProxy::setTouchModifier):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::resizeTo):
        (WTR::PlatformWebView::page):
        (WTR::PlatformWebView::focus):
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):
        (WTR::PlatformWebView::windowSnapshotImage):

2013-02-04  Timothy Loh  <timloh@chromium.com>

        Don't update author info in PrepareChangeLog and allow users to skip the PrepareChangeLog step entirely.
        https://bugs.webkit.org/show_bug.cgi?id=108788

        Reviewed by Ryosuke Niwa.

        As per discussion in Bug 74358, it's probably preferable to remove the
        behaviour of updating the author details in a ChangeLog entry. We also
        want to be able to skip preparing change logs (e.g. rebaselining many
        tests), so a --no-prepare-changelogs option is added to webkit-patch.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLogEntry._parse_entry):
        (ChangeLogEntry.date): Added
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_parse_log_entries_from_changelog):
        * Scripts/webkitpy/tool/commands/commandtest.py:
        (CommandsTest.assert_execute_outputs):
        * Scripts/webkitpy/tool/steps/options.py:
        (Options): Added --no-prepare-changelogs
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        (PrepareChangeLog.options):
        (PrepareChangeLog._merge_entries): date_line() gets the entire line, including
        the author's name and email, but we only want to replace the date.
        (PrepareChangeLog.run):
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:
        (PrepareChangeLogTest.test_resolve_existing_entry): Added tests for changed
        authors. Removed unneeded variable.

2013-02-04  Jochen Eisinger  <jochen@chromium.org>

        [chromium] Remove WebEventSender and WebAccessibilityController from public TestRunner API
        https://bugs.webkit.org/show_bug.cgi?id=108467

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebAccessibilityController.h: Removed.
        * DumpRenderTree/chromium/TestRunner/public/WebEventSender.h: Removed.
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        (WebTestRunner):
        (WebTestInterfaces):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebTestRunner):
        (WebTestProxyBase):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):
        (WebTestRunner::TestInterfaces::setWebView):
        (WebTestRunner::TestInterfaces::webView):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebAccessibilityController.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/WebEventSender.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::~WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::setWebView):
        (WebTestRunner::WebTestInterfaces::setDelegate):
        (WebTestRunner::WebTestInterfaces::bindTo):
        (WebTestRunner::WebTestInterfaces::resetAll):
        (WebTestRunner::WebTestInterfaces::setTestIsRunning):
        (WebTestRunner::WebTestInterfaces::webView):
        (WebTestRunner::WebTestInterfaces::testRunner):
        (WebTestRunner::WebTestInterfaces::testInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::setInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebTestRunner.cpp: Removed.
        * DumpRenderTree/chromium/TestShell.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:

2013-02-04  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [EFL] Add "full screen" parameter to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=108850

        Reviewed by Antonio Gomes.

        Implements the {-F,--full-screen}={true,false} parameter to WebKit EFL's
        MiniBrowser.

        * MiniBrowser/efl/main.c:
        (window_create):
        (elm_main):
        Added '-F/--full-screen' parameter functionality.

2013-02-04  Jochen Eisinger  <jochen@chromium.org>

        [chromium] remove WebTestPlugin from the public TestRunner API
        https://bugs.webkit.org/show_bug.cgi?id=108467

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebTestPlugin.h: Removed.
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestProxyBase):
        (WebTestRunner::WebTestProxy::createPlugin):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp: Renamed from Tools/DumpRenderTree/chromium/TestRunner/src/WebTestPlugin.cpp.
        (WebTestRunner::TestPlugin::TestPlugin):
        (WebTestRunner):
        (WebTestRunner::TestPlugin::~TestPlugin):
        (WebTestRunner::TestPlugin::initialize):
        (WebTestRunner::TestPlugin::destroy):
        (WebTestRunner::TestPlugin::updateGeometry):
        (WebTestRunner::TestPlugin::parsePrimitive):
        (WebTestRunner::TestPlugin::parseColor):
        (WebTestRunner::TestPlugin::parseOpacity):
        (WebTestRunner::TestPlugin::parseBoolean):
        (WebTestRunner::TestPlugin::initScene):
        (WebTestRunner::TestPlugin::drawScene):
        (WebTestRunner::TestPlugin::destroyScene):
        (WebTestRunner::TestPlugin::initProgram):
        (WebTestRunner::TestPlugin::initPrimitive):
        (WebTestRunner::TestPlugin::drawPrimitive):
        (WebTestRunner::TestPlugin::loadShader):
        (WebTestRunner::TestPlugin::loadProgram):
        (WebTestRunner::TestPlugin::handleInputEvent):
        (WebTestRunner::TestPlugin::handleDragStatusUpdate):
        (WebTestRunner::TestPlugin::create):
        (WebTestRunner::TestPlugin::mimeType):
        * DumpRenderTree/chromium/TestRunner/src/TestPlugin.h: Added.
        (WebTestRunner):
        (TestPlugin):
        (WebTestRunner::TestPlugin::scriptableObject):
        (WebTestRunner::TestPlugin::canProcessDrag):
        (WebTestRunner::TestPlugin::paint):
        (WebTestRunner::TestPlugin::updateFocus):
        (WebTestRunner::TestPlugin::updateVisibility):
        (WebTestRunner::TestPlugin::acceptsInputEvents):
        (WebTestRunner::TestPlugin::didReceiveResponse):
        (WebTestRunner::TestPlugin::didReceiveData):
        (WebTestRunner::TestPlugin::didFinishLoading):
        (WebTestRunner::TestPlugin::didFailLoading):
        (WebTestRunner::TestPlugin::didFinishLoadingFrameRequest):
        (WebTestRunner::TestPlugin::didFailLoadingFrameRequest):
        (WebTestRunner::TestPlugin::isPlaceholder):
        (WebTestRunner::TestPlugin::prepareTexture):
        (WebTestRunner::TestPlugin::context):
        (Scene):
        (WebTestRunner::TestPlugin::Scene::Scene):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::createPlugin):
        (WebTestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createPlugin):

2013-02-04  Gustavo Noronha Silva  <gns@gnome.org>

        Add a new method for obtaining a build-type-dependent path,
        instead of modifying all call sites to pass it in.

        Reviewed by Martin Robinson.

        * Scripts/run-gtk-tests:
        (TestRunner.__init__): use the new method, which takes a tuple.
        (TestRunner._setup_testing_environment): ditto.
        * gtk/common.py:
        (get_build_path): accept a tuple that may include Release and
        Debug as build types, for searching.
        (build_path_for_build_types): new method that finds the path when
        it is dependent on the build type.
        (build_path): restore its original behaviour.

2013-02-04  David Kilzer  <ddkilzer@apple.com>

        Remove duplicate entry from DumpRenderTree Xcode project

            $ uniq Tools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj | diff -u - Tools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj | patch -p0 -R
            patching file Tools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Remove duplicate.

2013-02-04  David Kilzer  <ddkilzer@apple.com>

        Sort TestWebKitAPI Xcode project file

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2013-02-03  Alan Cutter  <alancutter@chromium.org>

        PatchLogs are not getting created on QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=108593

        Reviewed by Eric Seidel.

        Added missing "added" patch event to submit-to-ews handler.

        * QueueStatusServer/app.yaml:
        * QueueStatusServer/handlers/submittoews.py:
        (SubmitToEWS._add_attachment_to_ews_queues):

2013-02-03  Douglas Stockwell  <dstockwell@chromium.org>

        Unreviewed. Add dstockwell as a contributor in comitters.py and to the watchlist for animation
        https://bugs.webkit.org/show_bug.cgi?id=108777

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/watchlist:

2013-02-03  Sam Weinig  <sam@webkit.org>

        Fix failing test.

        * TestWebKitAPI/Tests/WebKit2/ShouldGoToBackForwardListItem.cpp:
        (TestWebKitAPI::didFinishLoadForFrame):

2013-02-03  Timothy Loh  <timloh@chromium.com>

        Make ChangeLogEntry detect annotations by prepare-ChangeLog (Added/Removed/Copied from/Renamed from) as clean.
        https://bugs.webkit.org/show_bug.cgi?id=108433

        Reviewed by Eric Seidel.

        PrepareChangeLog is supposed to update the file/function list if we
        haven't touched it, but the existing regex doesn't handle the
        annotations prepare-ChangeLog adds (e.g. "Added.")

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLogEntry.is_touched_files_text_clean):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_is_touched_files_text_clean):

2013-02-02  Dean Jackson  <dino@apple.com>

        Add Antoine Quint to the list of committers
        https://bugs.webkit.org/show_bug.cgi?id=108750

        No review necessary.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-02  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Adopt the WinCE port to new CMake
        https://bugs.webkit.org/show_bug.cgi?id=108754

        Reviewed by Laszlo Gombos.

        * WinCELauncher/CMakeLists.txt: Mark WinCELauncher
        as WIN32 target to use the correct entry point.

2013-02-02  Alexey Proskuryakov  <ap@apple.com>

        One is not allowed to use commit-queue to make oneself a committer.

        * Scripts/webkitpy/common/config/committers.py: Rolled out r141693.
        Also, changed e-mail order for Yongjun Zhang, so that Bugzilla autocomplete works.

2013-02-02  Antoine Quint  <graouts@apple.com>

        Add Antoine Quint to the list of committers
        https://bugs.webkit.org/show_bug.cgi?id=108750

        Reviewed by Dean Jackson.

        * Scripts/webkitpy/common/config/committers.py:

2013-02-01  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Building fails in an armv5tel board
        https://bugs.webkit.org/show_bug.cgi?id=108083

        Reviewed by Martin Robinson.

        In some systems in which $architecture is filled-in from "uname -m"
        the value may not start with "arm-", but with "armvN", where "N" is
        an architecture version number. The regexp in isARM() is modified
        so it covers these kind of cases.

        * Scripts/webkitdirs.pm:
        (isARM):

2013-02-01  Gregg Tavares  <gman@google.com>

        Update LayoutTests scripts to skip webgl folder on ports
        https://bugs.webkit.org/show_bug.cgi?id=108705

        Reviewed by Dirk Pranke.

        I'm working on checking in the WebGL Conformance Tests
        as layout tests into LayoutTests/webgl. For ports
        that do not have WebGL enabled this changes will
        skip tests in the "webgl" folder.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._missing_symbol_to_skipped_tests):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_skipped_directories_for_symbols):

2013-02-01  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Fix for webkitpy tests.

        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:

2013-02-01  Jer Noble  <jer.noble@apple.com>

        LLDB: add synthetic provider for WTF::HashTable
        https://bugs.webkit.org/show_bug.cgi?id=108718

        Reviewed by Darin Adler.

        Add a synthetic provider which will emit the contents of a given
        WTF::HashTable. This allows clients using Xcode/lldb to enumerate
        the hash contents.

        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        (__lldb_init_module.lldb_webkit):
        (WTFHashTable_SummaryProvider):
        (WTFVectorProvider.has_children):
        (WTFHashTableProvider):
        (WTFHashTableProvider.__init__):
        (WTFHashTableProvider.num_children):
        (WTFHashTableProvider.get_child_index):
        (WTFHashTableProvider.get_child_at_index):
        (WTFHashTableProvider.tableSize):
        (WTFHashTableProvider.keyCount):
        (WTFHashTableProvider.update):
        (WTFHashTableProvider.has_children):

2013-02-01  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Fix webkitpy tests since a build_style is not specified in some cases.

        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):

2013-02-01  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Re-try enabling Win-EWS tests for the third time. 
        https://bugs.webkit.org/show_bug.cgi?id=107968

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-01-31  Roger Fong  <roger_fong@apple.com>

        Fix test scripts for EWS bots to get them running once and for all.
        https://bugs.webkit.org/show_bug.cgi?id=108422

        Reviewed by Timothy Horton.

        Disabling --quiet option on Windows for now because that fails when we try to use /dev/null.
        runtests.py was not passing in a configuration to run-webkit-tests which causes DRT to build in release by default.
        However, we build in Debug only on the EWS Windows bots, which caused the build to fail.

        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.options):
        (RunTests.run):

2013-02-01  Nico Weber  <thakis@chromium.org>

        [chromium] Build webkit with enable_web_intents set to 0.
        https://bugs.webkit.org/show_bug.cgi?id=108408

        Reviewed by Tony Chang.

        I'll then make chromium build fine with that, then switch
        enable_web_intents to 0, roll that into webkit, and then
        actually remove the code hidden behind this flag.

        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::registerIntentService):
        (WebTestRunner::WebTestProxyBase::dispatchIntent):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-02-01  Zan Dobersek  <zdobersek@igalia.com>

        Set the GTK 64-bit Debug builder to build and test only WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=108648

        Reviewed by Philippe Normand.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Change the builder name, type and
        build directory to note that the builder builds and tests only the WebKit1 port on the GTK platform.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (CompileWebKit1Only): Add the new build class that builds only the WebKit1 port of the builder's platform.
        (BuildAndTestWebKit1OnlyFactory): Add the new factory that uses the CompileWebKit1Only build class
        for building and testing only WebKit1 on the builder's platform.

2013-02-01  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move ownership of TestRunner object to TestInterfaces
        https://bugs.webkit.org/show_bug.cgi?id=108464

        Reviewed by Adam Barth.

        Before, TestShell owned the class. This also removes the last include
        from DumpRenderTree to TestRunner/src.

        This also deletes TestDelegate and uses WebTestDelegate everywhere
        instead.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        (WebTestInterfaces):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebKit):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.cpp:
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.h:
        (WebTestRunner):
        (WebTestRunner::AccessibilityController::setDelegate):
        (AccessibilityController):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::makeMenuItemStringsFor):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.h:
        (WebTestRunner):
        (WebTestRunner::EventSender::setDelegate):
        (EventSender):
        * DumpRenderTree/chromium/TestRunner/src/GamepadController.cpp:
        (WebTestRunner::GamepadController::setDelegate):
        * DumpRenderTree/chromium/TestRunner/src/GamepadController.h:
        (WebTestRunner):
        (GamepadController):
        * DumpRenderTree/chromium/TestRunner/src/TestDelegate.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner::TestInterfaces::TestInterfaces):
        (WebTestRunner::TestInterfaces::~TestInterfaces):
        (WebTestRunner::TestInterfaces::setWebView):
        (WebTestRunner::TestInterfaces::setDelegate):
        (WebTestRunner::TestInterfaces::bindTo):
        (WebTestRunner::TestInterfaces::resetAll):
        (WebTestRunner):
        (WebTestRunner::TestInterfaces::setTestIsRunning):
        (WebTestRunner::TestInterfaces::testRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (WebTestRunner):
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebKit):
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::Internal::testRunner):
        (WebTestInterfaces::Internal):
        (WebTestRunner::WebTestInterfaces::Internal::Internal):
        (WebTestRunner::WebTestInterfaces::Internal::setDelegate):
        (WebTestRunner::WebTestInterfaces::Internal::setTestIsRunning):
        * DumpRenderTree/chromium/TestRunner/src/WebTestRunner.cpp: Added.
        (WebTestRunner):
        (WebTestRunner::WebTestRunner::WebTestRunner):
        (WebTestRunner::WebTestRunner::shouldDumpEditingCallbacks):
        (WebTestRunner::WebTestRunner::shouldDumpAsText):
        (WebTestRunner::WebTestRunner::setShouldDumpAsText):
        (WebTestRunner::WebTestRunner::shouldGeneratePixelResults):
        (WebTestRunner::WebTestRunner::setShouldGeneratePixelResults):
        (WebTestRunner::WebTestRunner::shouldDumpChildFrameScrollPositions):
        (WebTestRunner::WebTestRunner::shouldDumpChildFramesAsText):
        (WebTestRunner::WebTestRunner::shouldDumpAsAudio):
        (WebTestRunner::WebTestRunner::audioData):
        (WebTestRunner::WebTestRunner::shouldDumpFrameLoadCallbacks):
        (WebTestRunner::WebTestRunner::setShouldDumpFrameLoadCallbacks):
        (WebTestRunner::WebTestRunner::shouldDumpUserGestureInFrameLoadCallbacks):
        (WebTestRunner::WebTestRunner::stopProvisionalFrameLoads):
        (WebTestRunner::WebTestRunner::shouldDumpTitleChanges):
        (WebTestRunner::WebTestRunner::shouldDumpCreateView):
        (WebTestRunner::WebTestRunner::canOpenWindows):
        (WebTestRunner::WebTestRunner::shouldDumpResourceLoadCallbacks):
        (WebTestRunner::WebTestRunner::shouldDumpResourceRequestCallbacks):
        (WebTestRunner::WebTestRunner::shouldDumpResourceResponseMIMETypes):
        (WebTestRunner::WebTestRunner::webPermissions):
        (WebTestRunner::WebTestRunner::shouldDumpStatusCallbacks):
        (WebTestRunner::WebTestRunner::shouldDumpProgressFinishedCallback):
        (WebTestRunner::WebTestRunner::shouldDumpBackForwardList):
        (WebTestRunner::WebTestRunner::deferMainResourceDataLoad):
        (WebTestRunner::WebTestRunner::shouldDumpSelectionRect):
        (WebTestRunner::WebTestRunner::testRepaint):
        (WebTestRunner::WebTestRunner::sweepHorizontally):
        (WebTestRunner::WebTestRunner::isPrinting):
        (WebTestRunner::WebTestRunner::shouldStayOnPageAfterHandlingBeforeUnload):
        (WebTestRunner::WebTestRunner::setTitleTextDirection):
        (WebTestRunner::WebTestRunner::httpHeadersToClear):
        (WebTestRunner::WebTestRunner::shouldBlockRedirects):
        (WebTestRunner::WebTestRunner::willSendRequestShouldReturnNull):
        (WebTestRunner::WebTestRunner::setTopLoadingFrame):
        (WebTestRunner::WebTestRunner::topLoadingFrame):
        (WebTestRunner::WebTestRunner::policyDelegateDone):
        (WebTestRunner::WebTestRunner::policyDelegateEnabled):
        (WebTestRunner::WebTestRunner::policyDelegateIsPermissive):
        (WebTestRunner::WebTestRunner::policyDelegateShouldNotifyDone):
        (WebTestRunner::WebTestRunner::shouldInterceptPostMessage):
        (WebTestRunner::WebTestRunner::isSmartInsertDeleteEnabled):
        (WebTestRunner::WebTestRunner::isSelectTrailingWhitespaceEnabled):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        (TestShell::createMainWindow):
        (TestShell::~TestShell):
        (TestShell::runFileTest):
        (TestShell::resetTestController):
        (TestShell::dump):
        (TestShell::bindJSObjectsToWindow):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::testRunner):
        (TestShell):

2013-02-01  Alan Cutter  <alancutter@chromium.org>

        PatchLog process durations are increasing linearly with time (faulty data logging)
        https://bugs.webkit.org/show_bug.cgi?id=108621

        Reviewed by Eric Seidel.

        Added a check to prevent a stop event from happening to the same patch multiple times.

        * QueueStatusServer/loggers/recordpatchevent.py:
        (RecordPatchEvent.stopped):

2013-02-01  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK][WK2] MiniBrowser fullscreen signals support
        https://bugs.webkit.org/show_bug.cgi?id=108005

        Reviewed by Carlos Garcia Campos.

        Shows a label for 2 seconds using overlay (if GTK >= 3.2.0) and hides
        the toolbar when entering fullscreen. When leaving fullscreen the
        label is hidden (if it's not hidden yet) and the toolbar is shown again.

        * MiniBrowser/gtk/BrowserWindow.c:
        (_BrowserWindow):
        (fullScreenMessageTimeoutCallback):
        (webViewEnterFullScreen):
        (webViewLeaveFullScreen):
        (browserWindowFinalize):
        (browserWindowConstructed):

2013-02-01  Alexis Menard  <alexis@webkit.org>

        Enable unprefixed CSS transitions by default.
        https://bugs.webkit.org/show_bug.cgi?id=108216

        Reviewed by Dean Jackson.

        Rename the flag CSS_TRANSFORMS_ANIMATIONS_TRANSITIONS_UNPREFIXED
        to CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED which will be used later to 
        guard the unprefixing work for CSS Transforms and animations.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2013-01-31  David Farler  <dfarler@apple.com>

        Provide a sensible default architecture when building on iOS SDKs
        https://bugs.webkit.org/show_bug.cgi?id=108395

        Reviewed by Anders Carlsson.

        * Scripts/webkitdirs.pm:
        (determineArchitecture): Anchor SDK regex matches at the beginning.

2013-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        buildbot should not rely on webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=107379

        Reviewed by Eric Seidel.

        Move all Python files used in buildbot configuration into BuildSlaveSupport directory.
        Once this patch is landed, we can stop restarting the master on webkitpy changes.

        * BuildSlaveSupport/build.webkit.org-config/committer_auth.py:
        * BuildSlaveSupport/build.webkit.org-config/htdigestparser.py: Copied from Tools/Scripts/webkitpy/common/net/htdigestparser.py.
        * BuildSlaveSupport/build.webkit.org-config/htdigestparser_unittest.py: Copied from Tools/Scripts/webkitpy/common/net/htdigestparser_unittest.py.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py: Copied from Tools/Scripts/webkitpy/common/config/build.py.
        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py: Copied from Tools/Scripts/webkitpy/common/config/build_unittest.py.
        (ShouldBuildTest.test_should_build):
        * Scripts/webkitpy/common/config/build.py: Removed.
        * Scripts/webkitpy/common/config/build_unittest.py: Removed.
        * Scripts/webkitpy/common/net/htdigestparser.py: Removed.
        * Scripts/webkitpy/common/net/htdigestparser_unittest.py: Removed.

2013-01-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141349.
        http://trac.webkit.org/changeset/141349
        https://bugs.webkit.org/show_bug.cgi?id=108422

        "yet another windows ews fix needed" (Requested by lforschler
        on #webkit).

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-01-31  Rouslan Solomakhin  <rouslan@chromium.org>

        [Chromium] Suggest 'uppercase' for multi-word misspelling 'upper case'
        https://bugs.webkit.org/show_bug.cgi?id=108509

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp:
        (append): Added utility function to append WebString to WebVector.
        (MockSpellCheck::fillSuggestionList): Suggest 'uppercase' for misspelling 'upper case'.

2013-01-31  David Farler  <dfarler@apple.com>

        Provide a sensible default architecture when building on iOS SDKs
        https://bugs.webkit.org/show_bug.cgi?id=108395

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitdirs.pm:
        (determineArchitecture):
        Check for iphoneos and iphonesimulator SDKs for a default arch.
        (determineXcodeSDK): Added.
        (xcodeSDK): Added.
        (XcodeOptions): Add ARCHS= if defined.

2013-01-31  Christopher Cameron  <ccameron@chromium.org>

        Fix rubber-band effect on non-scrollable pages
        https://bugs.webkit.org/show_bug.cgi?id=107611

        Add mouseWheelBegin function to EventSender to allow
        event-based rubber-banding tests.

        Reviewed by Antonio Gomes.

        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::EventSender):
        (WebTestRunner::EventSender::mouseDragBegin):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.h:
        (EventSender):

2013-01-31  James Robinson  <jamesr@chromium.org>

        [chromium] Notify the WebWidget when the WebViewHost is about to tear down compositing support
        https://bugs.webkit.org/show_bug.cgi?id=108518

        Reviewed by Adrienne Walker.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::shutdown):

2013-01-31  Pratik Solanki  <psolanki@apple.com>

        DumpRenderTree should put NSSound calls inside USE(APPKIT)
        https://bugs.webkit.org/show_bug.cgi?id=108499

        Reviewed by Andy Estes.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):

2013-01-30  Brian Weinstein  <bweinstein@apple.com>

        Add a call to the page UI client to determine if a plug-in should load
        https://bugs.webkit.org/show_bug.cgi?id=108407
        <rdar://problem/13066332>

        Add entries for the new function in the necessary structs.

        Reviewed by Anders Carlsson.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):

2013-01-31  Florin Malita  <fmalita@chromium.org>

        [Chromium] Unreviewed gardening.

        Win build fix after http://trac.webkit.org/changeset/141471.

        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp:
        (MockSpellCheck::spellCheckWord):

2013-01-31  Enrica Casucci  <enrica@apple.com>

        WebKit2: provide new bundle APIs to allow bundle clients to be notified of pasteboard access.
        https://bugs.webkit.org/show_bug.cgi?id=108396.
        <rdar://problem/12920461>

        Reviewed by Alexey Proskuryakov.
        
        Adding new WebKit2 test with relevant bundle, to test the new APIs.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/PasteboardNotifications.mm: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        (TestWebKitAPI::setInjectedBundleClient):
        * TestWebKitAPI/Tests/WebKit2/PasteboardNotifications_Bundle.cpp: Added.
        (PasteboardNotificationsTest):
        (TestWebKitAPI::willWriteToPasteboard):
        (TestWebKitAPI::getPasteboardDataForRange):
        (TestWebKitAPI::didWriteToPasteboard):
        (TestWebKitAPI::PasteboardNotificationsTest::PasteboardNotificationsTest):
        (TestWebKitAPI::PasteboardNotificationsTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/execCopy.html: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp: Updated to reflect
        changes in InjectedBundleEditorClient.
        (WTR::InjectedBundlePage::InjectedBundlePage):

2013-01-31  Rouslan Solomakhin  <rouslan@chromium.org>

        [Chromium] Add two-word misspelling to mock spellchecker
        https://bugs.webkit.org/show_bug.cgi?id=108498

        Reviewed by Tony Chang.

        Some layout tests verify spellcheck behavior when multiple words are
        marked as a single misspelling. This change adds a two-word misspelling
        'upper case' to the mock spellchecker used by layout tests.

        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp:
        (MockSpellCheck::spellCheckWord): Modified to handle spaces in misspellings.
        (MockSpellCheck::initializeIfNeeded):  Modified to use a vector instead of a hash table.
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.h:
        (MockSpellCheck): Changed misspellings container from hash table to vector.

2013-01-31  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Prospective build fix.

        Reviewed by Jocelyn Turcotte.

        Don't create .prl files for intermediate libs as their contents get
        injected within -Wl,-whole-archive -lFoo -wl,-no-whole-archive.

        * qmake/mkspecs/features/default_post.prf:

2013-01-31  Alan Cutter  <alancutter@chromium.org>

        EWS graphs have unusual data for patch waiting times
        https://bugs.webkit.org/show_bug.cgi?id=108427

        Reviewed by Eric Seidel.

        The max_patches_waiting QueueLog property may have missed recording patches waiting in idle times when no events are fired to update it. I added a cron job to take care of this issue.
        The patch wait duration in PatchLogs was being incorrectly updated after a patch expired and was picked up again from the queue. That period should really count towards the processing time instead.
        Added a WarningLog to record if any erroneous situations occur due to invalid contents in the datastore. These basically highlight if any "impossible" execution paths get executed.

        * QueueStatusServer/app.yaml:
        * QueueStatusServer/cron.yaml:
        * QueueStatusServer/handlers/syncqueuelogs.py: Copied from Tools/QueueStatusServer/model/patchlog.py.
        (SyncQueueLogs):
        (SyncQueueLogs.get):
        * QueueStatusServer/loggers/recordpatchevent.py:
        (RecordPatchEvent.added):
        (RecordPatchEvent.retrying):
        (RecordPatchEvent.started):
        (RecordPatchEvent.stopped):
        (RecordPatchEvent.updated):
        * QueueStatusServer/main.py:
        * QueueStatusServer/model/patchlog.py:
        (PatchLog.lookup):
        (PatchLog):
        (PatchLog.lookup_if_exists):
        (PatchLog.calculate_process_duration):
        (PatchLog._generate_key):
        * QueueStatusServer/model/queuelog.py:
        (QueueLog.update_max_patches_waiting):
        (QueueLog._get_or_create_txn):
        (QueueLog):
        (QueueLog._get_patches_waiting):
        * QueueStatusServer/model/warninglog.py: Copied from Tools/QueueStatusServer/model/patchlog.py.
        (WarningLog):
        (WarningLog.record):

2013-01-31  Anders Carlsson  <andersca@apple.com>

        Remove Web Intents code from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=108506

        Reviewed by Simon Fraser.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        (InjectedBundlePage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2013-01-31  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Rename WebMediaStreamDescriptor and WebMediaStreamComponent to WebMediaStream and WebMediaStreamTrack
        https://bugs.webkit.org/show_bug.cgi?id=108458

        Reviewed by Adam Barth.

        Only renames, no other code changes.

        * DumpRenderTree/chromium/MockWebMediaStreamCenter.cpp:
        (MockWebMediaStreamCenter::didEnableMediaStreamTrack):
        (MockWebMediaStreamCenter::didDisableMediaStreamTrack):
        (MockWebMediaStreamCenter::didAddMediaStreamTrack):
        (MockWebMediaStreamCenter::didRemoveMediaStreamTrack):
        (MockWebMediaStreamCenter::didStopLocalMediaStream):
        (MockWebMediaStreamCenter::didCreateMediaStream):
        * DumpRenderTree/chromium/MockWebMediaStreamCenter.h:
        (MockWebMediaStreamCenter):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::addStream):
        (MockWebRTCPeerConnectionHandler::removeStream):
        (MockWebRTCPeerConnectionHandler::getStats):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):
        * DumpRenderTree/chromium/WebUserMediaClientMock.cpp:
        (UserMediaRequestTask::UserMediaRequestTask):
        (WebUserMediaClientMock::requestUserMedia):

2013-01-31  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION (r141402): incorrectly set injected bundle path when running GTK unit tests
        https://bugs.webkit.org/show_bug.cgi?id=108496

        Reviewed by Philippe Normand.

        * Scripts/run-gtk-tests:
        (TestRunner.__init__): Add the build type as a member on the TestRunner interface.
        (TestRunner._setup_testing_environment): Use the build type member to determine correct path
        to the injected bundle.

2013-01-31  Christophe Dumez  <dchris@gmail.com>

        [EFL] Disable Web Intents
        https://bugs.webkit.org/show_bug.cgi?id=108457

        Reviewed by Alexey Proskuryakov.

        Remove EFL DRT code related to Web intents.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        (DumpRenderTreeChrome::onFrameCreated):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::sendWebIntentResponse):
        (TestRunner::deliverWebIntent):
        * Scripts/webkitperl/FeatureList.pm: Turn off WEB_INTENTS flag
        for EFL port.

2013-01-31  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Disable force_static_libs_as_shared in developer builds if wk2 is enabled

        Reviewed by Jocelyn Turcotte.

        This is a temporary workaround during the development of #108471, where we move files around
        but some link time dependencies might remain.

        * qmake/mkspecs/features/default_post.prf:

2013-01-31  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Make it possible to compile WebKit2 Qt related files without access to internal WK2 C++ API
        https://bugs.webkit.org/show_bug.cgi?id=108472

        Reviewed by Andreas Kling.

        Add a new module to the qmake build system that represents the part of the WebKit2 Qt integration
        that doesn't depend on WebKit2 internals.

        * qmake/mkspecs/features/webkit_modules.prf:
        * qmake/mkspecs/modules/webkit2qml.prf: Copied from Source/WebKit2/WebKit2.pro.

2013-01-31  James Robinson  <jamesr@chromium.org>

        [chromium] Remove dead transitional code from WebViewImpl
        https://bugs.webkit.org/show_bug.cgi?id=107889

        Reviewed by Adam Barth.

        ScrollingCoordinatorChromiumTests need to initialize compositing, so its implementation of
        WebWidgetClient has to support the new compositor initialization path.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::initializeLayerTreeView):
        (WebViewHost::setWebWidget):

2013-01-31  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] run-gtk-tests does not respect the -d argument
        https://bugs.webkit.org/show_bug.cgi?id=107822

        Reviewed by Philippe Normand.

        * Scripts/run-gtk-tests:
        (TestRunner.__init__): use the value for the debug option to decide what
        build_type to request a path for.
        * gtk/common.py:
        (get_build_path): now accepts a build_type argument instead of trying both
        Release and Debug in order, defaults to release.
        (build_path): takes and passes a build_type argument, no default value.

2013-01-31  Christophe Dumez  <dchris@gmail.com>

        Update Christophe Dumez's email address
        https://bugs.webkit.org/show_bug.cgi?id=108453

        Reviewed by Kenneth Rohde Christiansen.

        Update my email address in committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2013-01-31  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move runModalBeforeUnloadDialog to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=108442

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebTestRunner::WebTestProxy::runModalBeforeUnloadDialog):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::runModalBeforeUnloadDialog):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:

2013-01-31  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move postMessage related methods to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=108343

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestProxyBase):
        (WebTestRunner::WebTestProxy::willCheckAndDispatchMessageEvent):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::willCheckAndDispatchMessageEvent):
        (WebTestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::willCheckAndDispatchMessageEvent):

2013-01-30  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move remaining resource load related methods to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=108334

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestRunner::WebTestDelegate::allowExternalPages):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestProxyBase):
        (WebTestRunner::WebTestProxy::canHandleRequest):
        (WebTestRunner::WebTestProxy::cannotHandleRequestError):
        (WebTestRunner::WebTestProxy::didCreateDataSource):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::canHandleRequest):
        (WebTestRunner):
        (WebTestRunner::WebTestProxyBase::cannotHandleRequestError):
        (WebTestRunner::WebTestProxyBase::didCreateDataSource):
        (WebTestRunner::WebTestProxyBase::willSendRequest):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::canHandleRequest):
        (WebViewHost::didCreateDataSource):
        (WebViewHost::willSendRequest):
        (WebViewHost::allowExternalPages):
        * DumpRenderTree/chromium/WebViewHost.h:

2013-01-30  Hajime Morrita  <morrita@google.com>

        Unreviewed test failure fix for r141341.

        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:

2013-01-30  Levi Weintraub  <leviw@chromium.org>

        [Chromium] WebPluginContainerImpl adding imbalanced touch handler refs
        https://bugs.webkit.org/show_bug.cgi?id=108381

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/TestRunner/src/WebTestPlugin.cpp: Adding an attribute that
        tickles the case in WebPluginContainerImpl that imbalanced touch handler refs in Document.

2013-01-30  Julie Parent  <jparent@chromium.org>

        Add a concept of dashboard parameters that invalidate others
        https://bugs.webkit.org/show_bug.cgi?id=108362

        Reviewed by Dirk Pranke.

        There are certain parameters to the dashboards, that when selected,
        invalidate others, such as selecting the test type invalidates the
        builder group. Add this concept to dashboard_base and allow specifc
        dashboard to add their own invalidating parameters.
        
        The result is that when the user takes a specific action, like changing
        the test type, the builder would get reset to the default for the new
        test type, rather than erroring or not matching the query param, as is
        the current behavior.
        
        Also deletes some unused code (selectBuilder).
        
        * TestResultServer/static-dashboards/dashboard_base.js:
        (invalidateQueryParameters):
        (setQueryParameter):
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        * TestResultServer/static-dashboards/timeline_explorer.html:
        * TestResultServer/static-dashboards/treemap.html:

2013-01-30  Kiran Muppala  <cmuppala@apple.com>

        Disable process suppression of DumpRenderTree on Mac
        https://bugs.webkit.org/show_bug.cgi?id=108400

        Reviewed by Jessie Berlin.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (prepareConsistentTestingEnvironment): Take assertion to prevent
        process suppression.

2013-01-30  Roger Fong  <roger_fong@apple.com>

        Enable tests for Windows EWS!
        https://bugs.webkit.org/show_bug.cgi?id=107968.
        Patch by Lucas Forschler.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-01-30  Christophe Dumez  <christophe.dumez@intel.com>

        Add a StringTypeAdapter for ASCIILiteral
        https://bugs.webkit.org/show_bug.cgi?id=108338

        Reviewed by Benjamin Poulain.

        Add API tests for operator+() taking an ASCIILiteral.

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
        (TestWebKitAPI::TEST):

2013-01-30  Roger Fong  <roger_fong@apple.com>

        Modify runtests.py script so that --skip-failing-tests option is not added when platform is cygwin.

        Rubberstamped by Timothy Horton.

        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):

2013-01-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141205.
        http://trac.webkit.org/changeset/141205
        https://bugs.webkit.org/show_bug.cgi?id=108353

        Command for running tests on windows needs to be investigated.
        (Requested by lforschler on #webkit).

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-01-30  Tony Chang  <tony@chromium.org>

        [Chromium] Enable textarea resize corner for tests
        https://bugs.webkit.org/show_bug.cgi?id=108385

        Reviewed by Ojan Vafai.

        We should test what we ship. Also, this makes us pass more tests in content_shell.

        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset): Turn on resize corner.

2013-01-30  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move custom policy delegate to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=108328

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebTestProxyBase):
        (WebTestRunner::WebTestProxy::decidePolicyForNavigation):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner::WebTestRunner::policyDelegateEnabled):
        (WebTestRunner::WebTestRunner::policyDelegateIsPermissive):
        (WebTestRunner::WebTestRunner::policyDelegateShouldNotifyDone):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::policyDelegateEnabled):
        (WebTestRunner):
        (WebTestRunner::TestRunner::policyDelegateIsPermissive):
        (WebTestRunner::TestRunner::policyDelegateShouldNotifyDone):
        (WebTestRunner::TestRunner::setCustomPolicyDelegate):
        (WebTestRunner::TestRunner::waitForPolicyDelegate):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::decidePolicyForNavigation):
        (WebTestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::decidePolicyForNavigation):
        (WebViewHost::reset):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-30  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt][WK1] Support better testing of Web Notifications
        https://bugs.webkit.org/show_bug.cgi?id=107696

        Reviewed by Jocelyn Turcotte.

        Do not dump notification output to the console by default, instead allow the 
        tests that need this feature to enable it.

        Implement denyWebNotificationPermission and removeAllWebNotificationPermissions.
        Remove unused m_desktopNotificationAllowedOrigins variable.

        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::TestRunner):
        (TestRunner::reset):
        (TestRunner::dumpNotifications):
        (TestRunner::grantWebNotificationPermission):
        (TestRunner::denyWebNotificationPermission):
        (TestRunner::removeAllWebNotificationPermissions):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner):

2013-01-30  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move methods from WebTestDelegate to WebTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=108309

        Reviewed by Adam Barth.

        By moving more logic to the TestRunner library, we can share more
        code with content shell.

        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebTestProxyBase):
        (WebTestRunner::WebTestProxy::createView):
        (WebTestRunner::WebTestProxy::isSmartInsertDeleteEnabled):
        (WebTestRunner::WebTestProxy::isSelectTrailingWhitespaceEnabled):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner::WebTestRunner::isSmartInsertDeleteEnabled):
        (WebTestRunner::WebTestRunner::isSelectTrailingWhitespaceEnabled):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::isSmartInsertDeleteEnabled):
        (WebTestRunner):
        (WebTestRunner::TestRunner::isSelectTrailingWhitespaceEnabled):
        (WebTestRunner::TestRunner::setSmartInsertDeleteEnabled):
        (WebTestRunner::TestRunner::setSelectTrailingWhitespaceEnabled):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::createView):
        (WebTestRunner::WebTestProxyBase::isSmartInsertDeleteEnabled):
        (WebTestRunner):
        (WebTestRunner::WebTestProxyBase::isSelectTrailingWhitespaceEnabled):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createView):
        (WebViewHost::didStartLoading):
        (WebViewHost::didStopLoading):
        (WebViewHost::isSmartInsertDeleteEnabled):
        (WebViewHost::isSelectTrailingWhitespaceEnabled):
        (WebViewHost::reset):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-30  Kwang Yul Seo  <skyul@company100.net>

        Unreviewed. Add Jae Hyun Park to contributor list.

        * Scripts/webkitpy/common/config/committers.py:

2013-01-29  Alan Cutter  <alancutter@chromium.org>

        Need a cr-linux debug EWS bot
        https://bugs.webkit.org/show_bug.cgi?id=98957

        Reviewed by Eric Seidel.

        Added cr-linux-debug-ews bot to webkit-patch, QueueStatusServer and GCE build scripts.

        * EWSTools/GoogleComputeEngine/build-cr-linux-debug-ews.sh: Added.
        * QueueStatusServer/app.yaml:
        * QueueStatusServer/config/queues.py: Added.
        * QueueStatusServer/model/queues.py:
        (Queue.__init__):
        (Queue.queue_with_name):
        (Queue.all):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (ChromiumLinuxDebugEWS):

2013-01-29  Alan Cutter  <alancutter@chromium.org>

        Tidy up Sheriffbot's Sheriffs command's unit tests
        https://bugs.webkit.org/show_bug.cgi?id=108262

        Reviewed by Eric Seidel.

        Added the use of MockWeb instead of the filesystem to test the sheriffs command.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Sheriffs._retrieve_webkit_sheriffs):
        (Sheriffs.execute):
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_sheriffs):
        * Scripts/webkitpy/tool/bot/testdata/webkit_sheriff_0.js: Removed.
        * Scripts/webkitpy/tool/bot/testdata/webkit_sheriff_1.js: Removed.
        * Scripts/webkitpy/tool/bot/testdata/webkit_sheriff_2.js: Removed.
        * Scripts/webkitpy/tool/bot/testdata/webkit_sheriff_malformed.js: Removed.
        * Scripts/webkitpy/tool/bot/testdata/webkit_sheriff_zero.js: Removed.

2013-01-29  Lucas Forschler  <lforschler@apple.com>

        Enable tests for Windows EWS!
        https://bugs.webkit.org/show_bug.cgi?id=107968
        
        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (WinEWS):

2013-01-29  Alan Cutter  <alancutter@chromium.org>

        MockWeb should be able to serve mock web content
        https://bugs.webkit.org/show_bug.cgi?id=108240

        Reviewed by Dirk Pranke.

        Added the ability to have MockWeb serve mock web data.

        * Scripts/webkitpy/common/host_mock.py:
        (MockHost.__init__):
        * Scripts/webkitpy/common/net/web_mock.py:
        (MockWeb.__init__):
        (MockWeb.get_binary):

2013-01-29  Jessie Berlin  <jberlin@apple.com>

        run-api-tests should have an option to specify root
        https://bugs.webkit.org/show_bug.cgi?id=108210

        Reviewed by Ryosuke Niwa.

        * Scripts/run-api-tests:
        Add the option and use it to set the configuration product directory. Since it is supposed
        to point to the built products, do not build the products if root is specified (this mimics
        the behavior of run-javascriptcore-tests).

2013-01-29  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [EFL] Add Toggle fullscreen (F11) to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=108122

        Reviewed by Antonio Gomes.

        Adds fullscreen mode toggle (F11) option to MiniBrowser using native API.

        * MiniBrowser/efl/main.c:
        (on_key_down): Add 'F11' key handler.

2013-01-29  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Use offical Windows CE support
        https://bugs.webkit.org/show_bug.cgi?id=108061

        Reviewed by Laszlo Gombos.

        Recent version of CMake has added Windows CE support, but uses a
        slightly different interface than the patched version used before.
        Change the command line parameters to use the offical CMake binaries.

        * Scripts/webkitdirs.pm:
        (cmakeBasedPortArguments):

2013-01-29  Alan Cutter  <alancutter@chromium.org>

        QueueStatusServer needs pages to display historical queue data
        https://bugs.webkit.org/show_bug.cgi?id=107659

        Reviewed by Eric Seidel.

        Created a /queue-charts/<queue-name> handler to present queue and patch data using Google Chart Tools.

        * QueueStatusServer/app.yaml:
        * QueueStatusServer/config/charts.py: Copied from Tools/QueueStatusServer/model/queuelog.py.
        (get_time_unit):
        * QueueStatusServer/filters/webkit_extras.py:
        (webkit_linkify):
        (webkit_bug_id):
        (webkit_attachment_id):
        (results_link):
        (queue_status_link):
        (queue_charts_link):
        * QueueStatusServer/handlers/queuecharts.py: Added.
        (QueueCharts):
        (QueueCharts.get):
        (QueueCharts._get_min_med_max):
        (QueueCharts._get_patch_data):
        (QueueCharts._get_patch_logs):
        (QueueCharts._get_queue_data):
        (QueueCharts._get_queue_logs):
        (QueueCharts._get_time_unit):
        (QueueCharts._get_timestamp):
        (QueueCharts._get_view_range):
        * QueueStatusServer/handlers/queuestatus.py:
        (QueueStatus.get):
        * QueueStatusServer/index.yaml:
        * QueueStatusServer/main.py:
        * QueueStatusServer/model/queuelog.py:
        (QueueLog):
        (QueueLog.create_key):
        (QueueLog.get_at):
        (QueueLog.get_current):
        (QueueLog.get_or_create):
        (QueueLog._get_or_create_txn):
        * QueueStatusServer/stylesheets/charts.css: Added.
        (.chart):
        (.choices):
        * QueueStatusServer/templates/queuecharts.html: Added.
        * QueueStatusServer/templates/queuestatus.html:

2013-01-29  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Missing build flags when building with Harfbuzz
        https://bugs.webkit.org/show_bug.cgi?id=108174

        Reviewed by Martin Robinson.

        Add FREETYPE_CFLAGS and FREETYPE_LIBS to makefiles so -lharfbuzz
        parameter will be added to linking lines when needed.

        * GNUmakefile.am: Added FREETYPE_CFLAGS and FREETYPE_LIBS.
        * MiniBrowser/gtk/GNUmakefile.am: Ditto.
        * TestWebKitAPI/GNUmakefile.am: Ditto.

2013-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement resources API using injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=107457

        Reviewed by Sam Weinig.

        * Scripts/run-gtk-tests:
        (TestRunner): Unksip resources unit tests.

2013-01-29  Michael Brüning  <michael.bruning@digia.com>

        Unreviewed, updated my email information.

        * Scripts/webkitpy/common/config/committers.py:

2013-01-29  Jochen Eisinger  <jochen@chromium.org>

        [chromium] delete DRTTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=108082

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DRTTestRunner.cpp: Removed.
        * DumpRenderTree/chromium/DRTTestRunner.h: Removed.
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestRunner::WebTestDelegate::testFinished):
        (WebTestRunner::WebTestDelegate::testTimedOut):
        (WebTestRunner::WebTestDelegate::isBeingDebugged):
        (WebTestRunner::WebTestDelegate::layoutTestTimeout):
        (WebTestRunner::WebTestDelegate::closeRemainingWindows):
        (WebTestRunner::WebTestDelegate::navigationEntryCount):
        (WebTestRunner::WebTestDelegate::windowCount):
        (WebTestRunner::WebTestDelegate::setCustomPolicyDelegate):
        (WebTestRunner::WebTestDelegate::waitForPolicyDelegate):
        (WebTestRunner::WebTestDelegate::goToOffset):
        (WebTestRunner::WebTestDelegate::reload):
        (WebTestRunner::WebTestDelegate::loadURLForFrame):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner::WebTestRunner::policyDelegateDone):
        (WebTestRunner::WebTestRunner::shouldInterceptPostMessage):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::WorkQueue::~WorkQueue):
        (WebTestRunner):
        (WebTestRunner::TestRunner::WorkQueue::processWorkSoon):
        (WebTestRunner::TestRunner::WorkQueue::processWork):
        (WebTestRunner::TestRunner::WorkQueue::reset):
        (WebTestRunner::TestRunner::WorkQueue::addWork):
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::policyDelegateDone):
        (WebTestRunner::TestRunner::shouldInterceptPostMessage):
        (WebTestRunner::TestRunner::waitUntilDone):
        (WebTestRunner::TestRunner::notifyDone):
        (WebTestRunner::TestRunner::completeNotifyDone):
        (WorkItemBackForward):
        (WebTestRunner::WorkItemBackForward::WorkItemBackForward):
        (WebTestRunner::WorkItemBackForward::run):
        (WebTestRunner::TestRunner::queueBackNavigation):
        (WebTestRunner::TestRunner::queueForwardNavigation):
        (WorkItemReload):
        (WebTestRunner::WorkItemReload::run):
        (WebTestRunner::TestRunner::queueReload):
        (WorkItemLoadingScript):
        (WebTestRunner::WorkItemLoadingScript::WorkItemLoadingScript):
        (WebTestRunner::WorkItemLoadingScript::run):
        (WorkItemNonLoadingScript):
        (WebTestRunner::WorkItemNonLoadingScript::WorkItemNonLoadingScript):
        (WebTestRunner::WorkItemNonLoadingScript::run):
        (WebTestRunner::TestRunner::queueLoadingScript):
        (WebTestRunner::TestRunner::queueNonLoadingScript):
        (WorkItemLoad):
        (WebTestRunner::WorkItemLoad::WorkItemLoad):
        (WebTestRunner::WorkItemLoad::run):
        (WebTestRunner::TestRunner::queueLoad):
        (WorkItemLoadHTMLString):
        (WebTestRunner::WorkItemLoadHTMLString::WorkItemLoadHTMLString):
        (WebTestRunner::WorkItemLoadHTMLString::run):
        (WebTestRunner::TestRunner::queueLoadHTMLString):
        (WebTestRunner::TestRunner::locationChangeDone):
        (WebTestRunner::TestRunner::windowCount):
        (WebTestRunner::TestRunner::setCloseRemainingWindowsWhenComplete):
        (WebTestRunner::TestRunner::setCustomPolicyDelegate):
        (WebTestRunner::TestRunner::waitForPolicyDelegate):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        (WorkItem):
        (WebTestRunner::TestRunner::WorkItem::~WorkItem):
        (WorkQueue):
        (WebTestRunner::TestRunner::WorkQueue::WorkQueue):
        (WebTestRunner::TestRunner::WorkQueue::setFrozen):
        (WebTestRunner::TestRunner::WorkQueue::isEmpty):
        (WebTestRunner::TestRunner::WorkQueue::taskList):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        (TestShell::runFileTest):
        (TestShell::loadURL):
        (TestShell::createNewWindow):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::testRunner):
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::testFinished):
        (WebViewHost::testTimedOut):
        (WebViewHost::isBeingDebugged):
        (WebViewHost::layoutTestTimeout):
        (WebViewHost::closeRemainingWindows):
        (WebViewHost::navigationEntryCount):
        (WebViewHost::windowCount):
        (WebViewHost::setCustomPolicyDelegate):
        (WebViewHost::waitForPolicyDelegate):
        (WebViewHost::goToOffset):
        (WebViewHost::reload):
        (WebViewHost::loadURLForFrame):
        (WebViewHost::shutdown):
        (WebViewHost::testRunner):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebTestRunner):
        (WebViewHost):

2013-01-28  Timothy Loh  <timloh@chromium.com>

        Refactor ChangeLog and PrepareChangeLog to use FileSystem objects
        https://bugs.webkit.org/show_bug.cgi?id=107903

        Reviewed by Eric Seidel.

        To make ChangeLog and PrepareChangeLog easier to test, we can use
        FileSystem objects instead of just passing around paths.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLog.__init__):
        (ChangeLog.parse_latest_entry_from_file):
        (ChangeLog.parse_entries_from_file):
        (ChangeLog.latest_entry):
        (ChangeLog.update_with_unreviewed_message):
        (ChangeLog.set_reviewer):
        (ChangeLog.set_short_description_and_bug_url):
        (ChangeLog.delete_entries):
        (ChangeLog.prepend_text):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (ChangeLogTest):
        (test_parse_log_entries_from_changelog):
        (test_latest_entry_parse_single_entry):
        (test_set_reviewer):
        (test_set_short_description_and_bug_url):
        (test_delete_entries):
        (test_prepend_text):
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (ReadableTextFileObject.__init__):
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        (PrepareChangeLog._ensure_bug_url):
        (PrepareChangeLog._resolve_existing_entry):
        (PrepareChangeLog.run):
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:
        (test_ensure_bug_url):
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py:
        (_assert_message_for_revert_output):

2013-01-28  Raymond Toy  <rtoy@google.com>

        Add myself to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=107992

        Reviewed by kbr@google.com.

        * Scripts/webkitpy/common/config/committers.py:

2013-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Update PageVisibilityState when WebView is hidden / visible
        https://bugs.webkit.org/show_bug.cgi?id=107509

        Reviewed by Sam Weinig.

        Add a test that PageVisibility of WK1 WebViews and WK2 WKViews
        automatically changes between hidden and visible as the view is added
        and removed from window, or when it is in a window that changes
        visibility, for instance by minimizing / deminimizing.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.html: Added.
        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm: Added.
        (-[PageVisibilityStateDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]):
        (runJavaScriptAlert):
        (PageVisibilityStateWithWindowChanges):
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::initializeView):
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::teardownView):
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::runTest):
        (TestWebKitAPI::TEST_F):
        Test visibility state of a page in a WebView/WKView with different window states.

        * TestWebKitAPI/mac/WebKitAgnosticTest.h:
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        (TestWebKitAPI::WebKitAgnosticTest::teardownView):
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit1Test):
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit2Test):
        Add a WK1 and WK2 teardownView to balance initializeView.

2013-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        Improve PageVisibility API with enums
        https://bugs.webkit.org/show_bug.cgi?id=107364

        Reviewed by Sam Weinig.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::resetPageVisibility):
        (TestRunner::setPageVisibility):
        Update the WK1 test code to use the new WK1 enums.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setVisibilityState):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPageVisibility):
        (WTR::TestRunner::resetPageVisibility):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setVisibilityState):
        * WebKitTestRunner/TestController.h:
        (TestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        Update the WK2 test code to use the new WK2 API and enums.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/PageVisibilityState.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::setPageVisibilityStateWithEvalContinuation):
        (TestWebKitAPI::assertSerializedScriptValueIsStringValue):
        (TestWebKitAPI::didRunStep1StateChangeVisibleToHidden):
        (TestWebKitAPI::didRunStep2StateChangeHiddenToPrerender):
        (TestWebKitAPI::didRunStep3StateChangePrerenderToPreview):
        (TestWebKitAPI::didRunStep4InStatePreview):
        (TestWebKitAPI::TEST):
        Test the new WK2 API with all enum types.

2013-01-28  Jochen Eisinger  <jochen@chromium.org>

        [chromium] remove temporary define used for updating TestRunner API

        Unreviewed. Clean-up change.

        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:

2013-01-28  James Craig  <james@cookiecrook.com>

        HTML5 promotes DL from specific 'definition list' to superset 'description list'; accessibility strings and accessors should be updated to match.
        https://bugs.webkit.org/show_bug.cgi?id=107650

        Reviewed by Chris Fleizach.

        Updating accessibility strings and accessors for DL/DT/DD.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Utilities.js:
        (createDescriptionList):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ViewController.js:
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:

2013-01-28  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK][WTR] Update layoutTestController.pathToLocalResource
        https://bugs.webkit.org/show_bug.cgi?id=107538

        Reviewed by Martin Robinson.

        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
        (WTR::TestRunner::pathToLocalResource): Update implementation based on
        DRT code.

2013-01-28  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK][WTR] Move getTopLevelPath() to utilities file
        https://bugs.webkit.org/show_bug.cgi?id=107541

        Reviewed by Martin Robinson.

        * WebKitTestRunner/GNUmakefile.am: Add new files.
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::getOutputDir): Uses the moved method from InjectedBundleUtilities.
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleUtilities.cpp: Added.
        (WTR):
        (WTR::topLevelPath): Implementation moved from ActivateFontsGtk.
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleUtilities.h: Added.
        (WTR): Add new method header and documentation.

2013-01-28  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL] Include Ecore_Getopt.h in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=108067

        Reviewed by Kenneth Rohde Christiansen.

        Be explicit and include Ecore_Getopt.h since we use it for parsing
        command line options. It is safer than relying on other headers
        including it for us.

        * MiniBrowser/efl/main.c:

2013-01-28  Renata Hodovan  <reni@webkit.org>

        [WK2] Putting QtWebProcess into a chrooted sandbox
        https://bugs.webkit.org/show_bug.cgi?id=90005

        Reviewed by Anders Carlsson and  Zoltan Herczeg.

        Add feature flag for suid sandbox in linux.

        * Scripts/webkitperl/FeatureList.pm:

2013-01-27  David Farler  <dfarler@apple.com>

        REGRESSION (r140912): Broke specifying non-trivial ARCHS value to make / build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=108028

        Reviewed by Dan Bernstein.

        * DumpRenderTree/Makefile: Reverted.
        * Makefile: Reverted.
        * Scripts/webkitdirs.pm: Reverted.

2013-01-27  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        Fixing atomicIncrement implementation for Windows by dropping support before XP SP2.
        https://bugs.webkit.org/show_bug.cgi?id=106740

        Reviewed by Benjamin Poulain.

        * DumpRenderTree/config.h:
        * WinLauncher/stdafx.h:

2013-01-26  David Farler  <dfarler@apple.com>

        Makefiles should work for arbitrary SDKs and architectures on Apple ports
        https://bugs.webkit.org/show_bug.cgi?id=107863

        Reviewed by David Kilzer.

        * Makefile:
        Added temporary filters for projects not yet building on iOS.
        * DumpRenderTree/Makefile:
        Building with iOS SDKs -> -target All-iOS
        * Scripts/webkitdirs.pm:
        (determineConfiguration):
        Added --configuration switch detection.
        (determineArchitecture):
        Added --architecture and ARCH=(.*) switch detection.
        (argumentsForConfiguration):
        (determineXcodeSDK):
        Look for --device, --simulator, and --sdk switches.
        (xcodeSDK):
        Added.
        (XcodeOptions):
        Determine Xcode SDK and generate -arch switches.

2013-01-25  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move tracking of the top loading frame to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=107948

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::WorkQueue::processWorkSoon):
        (DRTTestRunner::WorkQueue::processWork):
        (DRTTestRunner::completeNotifyDone):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebTestProxyBase):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner::WebTestRunner::setTopLoadingFrame):
        (WebTestRunner::WebTestRunner::topLoadingFrame):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::setTopLoadingFrame):
        (WebTestRunner):
        (WebTestRunner::TestRunner::topLoadingFrame):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        (WebTestRunner::TestRunner::locationChangeDone):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::didStartProvisionalLoad):
        (WebTestRunner::WebTestProxyBase::didFailProvisionalLoad):
        (WebTestRunner::WebTestProxyBase::didFailLoad):
        (WebTestRunner::WebTestProxyBase::didFinishLoad):
        (WebTestRunner::WebTestProxyBase::locationChangeDone):
        (WebTestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::reset):
        (WebViewHost::updateURL):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140774.
        http://trac.webkit.org/changeset/140774
        https://bugs.webkit.org/show_bug.cgi?id=107932

         Tests ScrollingCoordinatorChromiumTest.fastScrollingByDefault
        and fastScrollingForFixedPosition are failing (Requested by
        keishi on #webkit).

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::initializeLayerTreeView):
        (WebViewHost::setWebWidget):

2013-01-25  Alan Cutter  <alancutter@chromium.org>

        Quick fix for Chromium EWS bots running out of space due to a tmp file leak
        https://bugs.webkit.org/show_bug.cgi?id=107905

        Reviewed by Eric Seidel.

        Added line to EWS loop to clear /tmp of known Chromium test leak.
        Directories named ".org.chromium.Chromium.XXXXXX" not getting cleaned up.

        * EWSTools/start-queue.sh:

2013-01-25  Ryosuke Niwa  <rniwa@webkit.org>

        Update Anne's email address
        https://bugs.webkit.org/show_bug.cgi?id=107866

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/committers.py:

2013-01-24  Alan Cutter  <alancutter@chromium.org>

        HTTP 500 error between QueueStatusServer and bot(s)
        https://bugs.webkit.org/show_bug.cgi?id=107184

        Reviewed by Adam Barth.

        Removed the use of memcache which was the source of the exception.

        * QueueStatusServer/handlers/updatestatus.py:
        (UpdateStatus.post):
        * QueueStatusServer/model/attachment.py:
        (Attachment):
        (Attachment.summary):

2013-01-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140653.
        http://trac.webkit.org/changeset/140653
        https://bugs.webkit.org/show_bug.cgi?id=107916

        Causes a temp file leak on the bots (Requested by abarth on
        #webkit).

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):

2013-01-24  Eric Seidel  <eric@webkit.org>

        Skip haslanded_unittest.py on systems which do not have interdiff installed
        https://bugs.webkit.org/show_bug.cgi?id=106402

        Unreviewed.

        * Scripts/webkitpy/tool/steps/haslanded_unittest.py:
        (HasLandedTest):

2013-01-24  Ryosuke Niwa  <rniwa@webkit.org>

        Disable the failing webkitpy test for now.

        * Scripts/webkitpy/tool/steps/haslanded_unittest.py:

2013-01-24  Tim 'mithro' Ansell  <mithro@mithis.com>

        Fixing the diff_parser to correctly identify git diffs even with leading comments.
        https://bugs.webkit.org/show_bug.cgi?id=107871

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/diff_parser.py:
        * Scripts/webkitpy/common/checkout/diff_parser_unittest.py:
        * Scripts/webkitpy/tool/steps/haslanded.py:

2013-01-24  James Robinson  <jamesr@chromium.org>

        [chromium] Remove dead transitional code from WebViewImpl
        https://bugs.webkit.org/show_bug.cgi?id=107889

        Reviewed by Adrienne Walker.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::initializeLayerTreeView):
        (WebViewHost::setWebWidget):

2013-01-24  Joshua Bell  <jsbell@chromium.org>

        Add watchlist for IndexedDB development, and add myself and others.

        Unreviewed.

        * Scripts/webkitpy/common/config/watchlist:

2013-01-24  Martin Robinson  <mrobinson@igalia.com>

        Abstract the logic for appending a UChar32 onto StringBuilder
        https://bugs.webkit.org/show_bug.cgi?id=107505

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        (TestWebKitAPI::TEST): Added a simple test for appending UChar32.

2013-01-24  Erik Arvidsson  <arv@chromium.org>

        Unreviewed, rolling out r140703.
        http://trac.webkit.org/changeset/140703
        https://bugs.webkit.org/show_bug.cgi?id=107556

        r140561 was not the reason for the Android breakage

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::~TestShell):
        (TestShell::closeWindow):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::WebViewHost):
        (WebViewHost::~WebViewHost):
        (WebViewHost::shutdown):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-24  Dean Jackson  <dino@apple.com>

        Allow some plugin snapshot UI content to come from Injected Bundle
        https://bugs.webkit.org/show_bug.cgi?id=107852

        Reviewed by Anders Carlsson.

        Null implementations of plugInStartLabelTitle, plugInStartLabelSubtitle and
        plugInExtraStyleSheet.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):

2013-01-24  Erik Arvidsson  <arv@chromium.org>

        Unreviewed, rolling out r140561.
        http://trac.webkit.org/changeset/140561
        https://bugs.webkit.org/show_bug.cgi?id=107556

        Suspected to break Android which prevens WebKit roll

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::~TestShell):
        (TestShell::closeWindow):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::WebViewHost):
        (WebViewHost::~WebViewHost):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-24  Tim 'mithro' Ansell  <mithro@mithis.com>

        Adding "has-landed" command to webkit-patch which compares a
        committed patch to the changes which exist locally (ignoring the
        ChangeLog file).

        https://bugs.webkit.org/show_bug.cgi?id=106402

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/diff_parser.py:
        (git_diff_to_svn_diff):
        * Scripts/webkitpy/common/net/bugzilla/bug.py:
        (Bug.commit_revision):
        * Scripts/webkitpy/common/net/bugzilla/bug_unittest.py:
        (BugTest.test_is_in_comments):
        (BugTest):
        (BugTest.test_commit_revision):
        * Scripts/webkitpy/tool/commands/upload.py:
        (HasLanded):
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/haslanded.py: Added.
        (HasLanded):
        (HasLanded.convert_to_svn):
        (HasLanded.strip_change_log):
        (run):

        * Scripts/webkitpy/common/net/bugzilla/bug.py:
        (Bug.commit_revision):
        * Scripts/webkitpy/common/net/bugzilla/bug_unittest.py:
        (BugTest.test_is_in_comments):
        (BugTest):
        (BugTest.test_commit_revision):
        * Scripts/webkitpy/tool/commands/upload.py:
        (HasLanded):
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/haslanded.py: Added.
        (HasLanded):
        (HasLanded.convert_to_svn):
        (HasLanded.strip_change_log):
        (HasLanded.diff_diff):
        (HasLanded.run):
        * Scripts/webkitpy/tool/steps/haslanded_unittest.py: Added.
        (HasLandedTest):
        (HasLandedTest.test_run):
        (test_convert_to_svn_and_strip_change_log):

2013-01-24  Dan Carney  <dcarney@google.com>

        [chromium] move most WebViewHost printf calls to WebTestProxy
        https://bugs.webkit.org/show_bug.cgi?id=107553

        Reviewed by Jochen Eisinger.

        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestProxyBase):
        (WebTestRunner::WebTestProxy::unableToImplementPolicyWithError):
        (WebTestRunner::WebTestProxy::didAddMessageToConsole):
        (WebTestRunner::WebTestProxy::runModalAlertDialog):
        (WebTestRunner::WebTestProxy::runModalConfirmDialog):
        (WebTestRunner::WebTestProxy::runModalPromptDialog):
        (WebTestRunner::WebTestProxy::runModalBeforeUnloadDialog):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::WebTestProxyBase):
        (WebTestRunner::WebTestProxyBase::reset):
        (WebTestRunner::WebTestProxyBase::setLogConsoleOutput):
        (WebTestRunner):
        (WebTestRunner::WebTestProxyBase::unableToImplementPolicyWithError):
        (WebTestRunner::WebTestProxyBase::didAddMessageToConsole):
        (WebTestRunner::WebTestProxyBase::runModalAlertDialog):
        (WebTestRunner::WebTestProxyBase::runModalConfirmDialog):
        (WebTestRunner::WebTestProxyBase::runModalPromptDialog):
        (WebTestRunner::WebTestProxyBase::runModalBeforeUnloadDialog):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::showDevTools):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didAddMessageToConsole):
        (WebViewHost::runModalAlertDialog):
        (WebViewHost::runModalConfirmDialog):
        (WebViewHost::runModalPromptDialog):
        (WebViewHost::runModalBeforeUnloadDialog):
        (WebViewHost::unableToImplementPolicyWithError):
        (WebViewHost::reset):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-23  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Give webkit_support a chance to reset state between layout test runs
        https://bugs.webkit.org/show_bug.cgi?id=107132

        Reviewed by Adam Barth.

        We currently only have need for this on OS(ANDROID), but now it
        would be useful to have a hook for resetting state on all
        platforms. Will soon be using this for IDBFactory initialization.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController): Call webkit_support::ResetTestEnvironment()

2013-01-23  Alan Cutter  <alancutter@chromium.org>

        QueueStatusServer crashes in production on next-patch
        https://bugs.webkit.org/show_bug.cgi?id=107775

        Reviewed by Adam Barth.

        Replaced Python 2.5 incompatible call to timedelta.total_seconds().

        * QueueStatusServer/app.yaml:
        * QueueStatusServer/model/patchlog.py:
        (PatchLog.calculate_wait_duration):
        (PatchLog.calculate_process_duration):
        (PatchLog):
        (PatchLog._time_delta_to_seconds):

2013-01-23  Ryosuke Niwa  <rniwa@webkit.org>

        The previous patch wasn't complete. Finish reverting r139998 for real.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/WebInspectorShims.js:
        (ProfilerAgent.getProfile):

2013-01-23  Ryosuke Niwa  <rniwa@webkit.org>

        Revert r139998 for now since the Leaks Viewer pulls in a specific version of Inspector code.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/WebInspectorShims.js:
        (ProfilerAgent.getProfile):

2013-01-23  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Remove unused header files in chromium/public/platform/
        https://bugs.webkit.org/show_bug.cgi?id=107741

        Reviewed by James Robinson.

        These header files have migrated to the new Platform directory.
        This patch updates the remaining #include references and removes
        the old files that did nothing but redirect to the new ones.

        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.cpp:
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.h:

2013-01-23  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Bump webkitgtk-test-fonts dependency to cover fallbacks for Tamil, Bengali, and others
        https://bugs.webkit.org/show_bug.cgi?id=107727

        Reviewed by Gustavo Noronha Silva.

        * gtk/jhbuild.modules: Update the JHBuild moduleset to point to the new webkitgtk-test-fonts.
        We are using the git repository now that github has deprecated the downloads feature.

2013-01-23  Tony Chang  <tony@chromium.org>

        Unreviewed, set svn:eol-style to CRLF on Windows .sln files.

        * CLWrapper/CLWrapper.sln: Modified property svn:eol-style.
        * DumpRenderTree/DumpRenderTree.sln: Modified property svn:eol-style.
        * MIDLWrapper/MIDLWrapper.sln: Modified property svn:eol-style.
        * WebKitTestRunner/WebKitTestRunner.sln: Modified property svn:eol-style.

2013-01-23  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Update some #includes in DumpRenderTree for headers in the new Platform directory
        https://bugs.webkit.org/show_bug.cgi?id=107145

        Reviewed by Adam Barth.

        Part of a larger refactoring series; see tracking bug 82948.
        
        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/DRTDevToolsClient.h:
        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        * DumpRenderTree/chromium/DRTTestRunner.h:
        * DumpRenderTree/chromium/MockWebPrerenderingSupport.h:
        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp:
        * DumpRenderTree/chromium/MockWebSpeechInputController.h:
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        * DumpRenderTree/chromium/TestNavigationController.h:
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.cpp:
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.h:
        * DumpRenderTree/chromium/TestRunner/src/GamepadController.h:
        * DumpRenderTree/chromium/TestRunner/src/TestDelegate.h:
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        * DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp:
        * DumpRenderTree/chromium/TestRunner/src/WebPermissions.cpp:
        * DumpRenderTree/chromium/TestRunner/src/WebTestPlugin.cpp:
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        * DumpRenderTree/chromium/TestShell.cpp:
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.h:
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm:
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp:
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:

2013-01-23  Jochen Eisinger  <jochen@chromium.org>

        [chromium] Use after free in plugins/geturlnotify-during-document-teardown.html
        https://bugs.webkit.org/show_bug.cgi?id=107556

        Reviewed by Tony Chang.

        WebViewHost initiates a navigation to about:blank in its destructor.
        However, since WebTestProxy inherits from WebViewHost, at this point
        the WebViewClient and WebFrameClient interfaces are already partially
        destructed resulting in the use after free.

        This does not affect the chromium implementation since it doesn't
        invoke WebKit API methods in its destructor.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::~TestShell):
        (TestShell::closeWindow):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::WebViewHost):
        (WebViewHost::~WebViewHost):
        (WebViewHost::shutdown):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-23  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Create Regions watchlist
        https://bugs.webkit.org/show_bug.cgi?id=107281

        Reviewed by Adam Barth.

        This patch adds 4 new definitions:
        - RegionsDevelopment - used to track the development progress for regions
        - RegionsExpectationsMore and RegionsExpectationsLess - used to track expectations changes for the regions tests
        - RegionsUsage - used to track changes that make use of regions in all the code base

        For now, the Adobe internal tracker is the only email address listening for these patterns.

        * Scripts/webkitpy/common/config/watchlist:

2013-01-22  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: only allow evaluateForTestInFrontend for front-ends under test.
        https://bugs.webkit.org/show_bug.cgi?id=107523

        Reviewed by Yury Semikhatsky.

        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::isUnderTest):
        (DRTDevToolsClient::call):
        * DumpRenderTree/chromium/DRTDevToolsClient.h:
        (DRTDevToolsClient):

2013-01-23  Tim 'mithro' Ansell  <mithro@mithis.com>

        Removing command line shortening as it makes it difficult to see the command during errors.
        https://bugs.webkit.org/show_bug.cgi?id=107643

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/system/executive.py:
        (ScriptError):
        (ScriptError.__init__):
        * Scripts/webkitpy/common/system/executive_unittest.py:

2013-01-23  Tim 'mithro' Ansell  <mithro@mithis.com>

        Adding myself as contributor in committers.py (as requested by eseidel).
        https://bugs.webkit.org/show_bug.cgi?id=107647

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/config/committers.py:

2013-01-22  Alan Cutter  <alancutter@chromium.org>

        Add monitoring of patches and queues to the QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=107612

        Reviewed by Adam Barth.

        Created classes for recording events into the datastore and integrated them into the existing handlers.
        Code for presenting the recorded data will come in a separate patch.

        * QueueStatusServer/app.yaml:
        * QueueStatusServer/config/__init__.py: Added.
        * QueueStatusServer/config/logging.py: Copied from Tools/QueueStatusServer/model/queuestatus.py.
        * QueueStatusServer/config/messages.py: Copied from Tools/QueueStatusServer/model/queuestatus.py.
        * QueueStatusServer/handlers/nextpatch.py:
        (NextPatch.get):
        (NextPatch._assign_patch):
        * QueueStatusServer/handlers/releasepatch.py:
        (ReleasePatch.post):
        * QueueStatusServer/handlers/updatestatus.py:
        (UpdateStatus.post):
        * QueueStatusServer/handlers/updateworkitems.py:
        (UpdateWorkItems._parse_work_items_string):
        (UpdateWorkItems):
        (UpdateWorkItems._update_work_items_from_request):
        (UpdateWorkItems._queue_from_request):
        (UpdateWorkItems.post):
        * QueueStatusServer/loggers/__init__.py: Added.
        * QueueStatusServer/loggers/recordbotevent.py: Copied from Tools/QueueStatusServer/model/queuestatus.py.
        (RecordBotEvent):
        (RecordBotEvent.activity):
        * QueueStatusServer/loggers/recordpatchevent.py: Added.
        (RecordPatchEvent):
        (RecordPatchEvent.added):
        (RecordPatchEvent.retrying):
        (RecordPatchEvent.started):
        (RecordPatchEvent.stopped):
        (RecordPatchEvent.updated):
        (RecordPatchEvent._get_patches_waiting):
        * QueueStatusServer/model/patchlog.py: Copied from Tools/QueueStatusServer/model/queuestatus.py.
        (PatchLog):
        (PatchLog.lookup):
        (PatchLog.calculate_wait_duration):
        (PatchLog.calculate_process_duration):
        * QueueStatusServer/model/queuelog.py: Copied from Tools/QueueStatusServer/handlers/nextpatch.py.
        (QueueLog):
        (QueueLog.get_current):
        (QueueLog.create_key):
        * QueueStatusServer/model/queuestatus.py:
        (QueueStatus.is_retry_request):

2013-01-22  Timothy Loh  <timloh@chromium.com>

        prepare-Changelog should support updating the list of changed files
        https://bugs.webkit.org/show_bug.cgi?id=74358

        Reviewed by Eric Seidel.

        Needing to re-make ChangeLog entries when the list of files/functions
        changes is a bit annoying, it'd be nice to have this more automated.
        This patch makes `webkit-patch update' update the date line and bug
        description if needed, and if the list of changed files/functions has
        changed, either updates the list (if there are no annotations), or
        otherwise appends the new list below.

        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        (PrepareChangeLog._resolve_existing_entry):
        (PrepareChangeLog):
        (PrepareChangeLog._merge_entries):
        (PrepareChangeLog.run):
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:
        (PrepareChangeLogTest.test_resolve_existing_entry):
        (make_entry):
        (test_ensure_bug_url):

2013-01-22  Tim 'mithro' Ansell  <mithro@mithis.com>

        Use Python 2.7 unittest syntax in our unittests
        https://bugs.webkit.org/show_bug.cgi?id=105607

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/**/*_unittest.py:

2013-01-22  Tim 'mithro' Ansell  <mithro@mithis.com>

        Convert disable-msg to disable for new pylint.
        https://bugs.webkit.org/show_bug.cgi?id=107627

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVNRepository.has_authorization_for_realm):
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (Builder.force_build):
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive2.run_command):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.reference_files):
        * Scripts/webkitpy/layout_tests/port/chromium_port_testcase.py:
        (ChromiumPortTestCase.test_default_configuration):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_expectations_ordering):
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase._check_that_all_ports_are_available):
        * Scripts/webkitpy/tool/commands/abstractlocalservercommand.py:
        (AbstractLocalServerCommand.execute):
        * Scripts/webkitpy/tool/commands/download.py:
        (AbstractPatchProcessingCommand):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractRebaseliningCommand):
        (AbstractParallelRebaselineCommand):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (_BaseTestCase.setUp):
        (TestAnalyzeBaselines.setUp):

2013-01-22  Frank Farzan  <frankf@chromium.org>

        Flakiness dashboard: update builders.jsonp
        https://bugs.webkit.org/show_bug.cgi?id=107610

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/builders.jsonp:

2013-01-22  Frank Farzan  <frankf@chromium.org>

        Add Android instrumentation tests from ChromiumLinux waterfall
        https://bugs.webkit.org/show_bug.cgi?id=107597

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/builders.js:
        (loadBuildersList):

2013-01-21  Kentaro Hara  <haraken@chromium.org>

        Implement UIEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=107430

        Reviewed by Adam Barth.

        Editor's draft: https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm

        UIEvent constructor is implemented under a DOM4_EVENTS_CONSTRUCTOR flag,
        which is enabled on Safari and Chromium for now.

        * Scripts/webkitperl/FeatureList.pm:

2013-01-22  Timothy Loh  <timloh@chromium.com>

        Add functions to ChangeLog - parse bug desc/changed functions, delete/prepend entries
        https://bugs.webkit.org/show_bug.cgi?id=107478

        Reviewed by Eric Seidel.

        On the road to resolving Bug 74358, we need a few more functions in
        changelog.py.
        To make things easier to mock, change @staticmethods to @classmethods.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLogEntry):
        (ChangeLogEntry._parse_reviewer_text):
        (ChangeLogEntry._split_contributor_names):
        (ChangeLogEntry._parse_author_name_and_email):
        (ChangeLogEntry._parse_author_text):
        (ChangeLogEntry._parse_touched_functions):
        (ChangeLogEntry._parse_bug_description):
        (ChangeLogEntry._parse_entry):
        (ChangeLogEntry.date_line):
        (ChangeLogEntry.bug_description):
        (ChangeLogEntry.touched_functions):
        (ChangeLogEntry.touched_files_text):
        (ChangeLogEntry.is_touched_files_text_clean):
        (ChangeLog):
        (ChangeLog.parse_latest_entry_from_file):
        (ChangeLog._separate_revision_and_line):
        (ChangeLog.parse_entries_from_file):
        (ChangeLog.set_short_description_and_bug_url):
        (ChangeLog.delete_entries):
        (ChangeLog.prepend_text):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_parse_log_entries_from_changelog):
        (test_latest_entry_parse):
        (test_set_short_description_and_bug_url):
        (test_delete_entries):
        (test_prepend_text):

2013-01-22  Lucas Forschler  <lforschler@apple.com>

        Create a MAC EWS startup shell script.

        Reviewed by Ryosuke Niwa.

        * EWSTools/start-queue-mac.sh: Added.

2013-01-22  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Enable Page Visibility (PAGE_VISIBILITY_API)
        https://bugs.webkit.org/show_bug.cgi?id=107230

        Reviewed by David Kilzer.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::resetPageVisibility):
        Fix a typo in the original implementation. resetPageVisibility should
        pass initialState YES so an event is not dispatched, which causes
        issues in multiple tests. This now matches other ports.

2013-01-22  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Enable CSS Image Orientation feature
        https://bugs.webkit.org/show_bug.cgi?id=99040

        Reviewed by Martin Robinson.

        Enable the CSS Image Orientation feature in the development
        builds of the GTK port. The feature is still disabled in the release
        builds.

        * Scripts/webkitperl/FeatureList.pm:

2013-01-22  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Enable the <template> element support in development builds
        https://bugs.webkit.org/show_bug.cgi?id=106575

        Reviewed by Martin Robinson.

        Enable the <template> element support in the development builds of the GTK port.

        * Scripts/webkitperl/FeatureList.pm:

2013-01-22  Zan Dobersek  <zandobersek@gmail.com>

        Prettify the output of the override-feature-defines script
        https://bugs.webkit.org/show_bug.cgi?id=106542

        Reviewed by Martin Robinson.

        The output now clearly lists the feature defines being overridden
        along with the default and overriding values for each feature define.

        * gtk/override-feature-defines:
        (adjust_feature_defines_makefile):
        (adjust_feature_defines_makefile.override_feature_define):

2013-01-22  Zan Dobersek  <zdobersek@igalia.com>

        Remove uses of deprecated unittest.TestCase aliases
        https://bugs.webkit.org/show_bug.cgi?id=102252

        Reviewed by Adam Barth.

        Replace the deprecated assertEquals method of the TestCase interface
        used in some webkitpy unittests with the assertEqual method.

        * Scripts/webkitpy/common/system/profiler_unittest.py:
        (ProfilerFactoryTest._assert_default_profiler_name):
        (ProfilerFactoryTest.test_default_profiler_output):
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        (GtkPortTest.test_expectations_files):
        * Scripts/webkitpy/layout_tests/servers/http_server_unittest.py:
        (TestHttpServer.test_win32_start_and_stop):

2013-01-22  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r140344): Repeated crashes in WKTR PlatformWebView::viewSupportsOptions().
        https://bugs.webkit.org/show_bug.cgi?id=107562

        Rubber-stamped by Alexy Proskuryakov.

        The input to WKBooleanGetValue() is not NULL-safe, so NULL check its inputs before calling.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::viewSupportsOptions):

2013-01-22  Alexey Proskuryakov  <ap@apple.com>

        One is not allowed to use commit-queue to make oneself a committer.

        * Scripts/webkitpy/common/config/committers.py: Removing eustas@chromium.org.

2013-01-22  Eugene Klyuchnikov  <eustas@chromium.org>

        Add myself to commiters.py
        https://bugs.webkit.org/show_bug.cgi?id=107546

        Reviewed by Kentaro Hara.

        * Scripts/webkitpy/common/config/committers.py:

2013-01-22  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Implement TestRunner::setTextDirection
        https://bugs.webkit.org/show_bug.cgi?id=107131

        Reviewed by Philippe Normand.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Reset direction to default value.
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        (TestRunner::setTextDirection): Implement method using
        gtk_widget_set_direction.

2013-01-22  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move spell checking mocks to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=107455

        Reviewed by Kent Tamura.

        The content module doesn't provide its own WebSpellCheckClient.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestRunner::WebTestDelegate::fillSpellingSuggestionList):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestRunner):
        (WebTestProxyBase):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::makeMenuItemStringsFor):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.cpp: Renamed from Tools/DumpRenderTree/chromium/MockGrammarCheck.cpp.
        (MockGrammarCheck::checkGrammarOfString):
        * DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.h: Renamed from Tools/DumpRenderTree/chromium/MockGrammarCheck.h.
        (WebKit):
        (MockGrammarCheck):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp: Renamed from Tools/DumpRenderTree/chromium/MockSpellCheck.cpp.
        (MockSpellCheck::MockSpellCheck):
        (MockSpellCheck::~MockSpellCheck):
        (isNotASCIIAlpha):
        (MockSpellCheck::spellCheckWord):
        (MockSpellCheck::fillSuggestionList):
        (MockSpellCheck::initializeIfNeeded):
        * DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.h: Renamed from Tools/DumpRenderTree/chromium/MockSpellCheck.h.
        (MockSpellCheck):
        * DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp: Added.
        (WebTestRunner::SpellCheckClient::SpellCheckClient):
        (WebTestRunner):
        (WebTestRunner::SpellCheckClient::~SpellCheckClient):
        (WebTestRunner::SpellCheckClient::setDelegate):
        (WebTestRunner::SpellCheckClient::spellCheck):
        (WebTestRunner::SpellCheckClient::checkTextOfParagraph):
        (WebTestRunner::SpellCheckClient::requestCheckingOfText):
        (WebTestRunner::SpellCheckClient::finishLastTextCheck):
        (WebTestRunner::SpellCheckClient::autoCorrectWord):
        * DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/src/TestDelegate.h.
        (WebTestRunner):
        (SpellCheckClient):
        (WebTestRunner::SpellCheckClient::taskList):
        (WebTestRunner::SpellCheckClient::mockSpellCheck):
        * DumpRenderTree/chromium/TestRunner/src/TestDelegate.h:
        (TestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestInterfaces::Internal):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::WebTestProxyBase):
        (WebTestRunner::WebTestProxyBase::~WebTestProxyBase):
        (WebTestRunner::WebTestProxyBase::setDelegate):
        (WebTestRunner::WebTestProxyBase::spellCheckClient):
        (WebTestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::WebViewHost):
        (WebViewHost::setWebWidget):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-22  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Adds Accessibility support to wk1
        https://bugs.webkit.org/show_bug.cgi?id=107440

        Reviewed by Gyuyoung Kim.

        * DumpRenderTree/efl/CMakeLists.txt: Adds ATK headers and libraries.

2013-01-21  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] WK1 MiniBrowser should clear delegates before releasing webview
        https://bugs.webkit.org/show_bug.cgi?id=107506

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController dealloc]):

2013-01-21  Dirk Schulze  <dschulze@adobe.com>

        Add build flag for Canvas's Path object (disabled by default)
        https://bugs.webkit.org/show_bug.cgi?id=107473

        Reviewed by Dean Jackson.

        Add CANVAS_PATH build flag to build systems.

        * Scripts/webkitperl/FeatureList.pm:

2013-01-21  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Add APIs to set/get view source mode
        https://bugs.webkit.org/show_bug.cgi?id=106633

        Reviewed by Gyuyoung Kim.

        Added a shotcut 'F8' in Minibrowser to display a source code
        of the web page in a new window.

       * MiniBrowser/efl/main.c:
        (on_key_down):
        (on_window_create):
        (window_create):
        (elm_main):

2013-01-21  Nico Weber  <thakis@chromium.org>

        [chromium] Don't archive generated source files.
        https://bugs.webkit.org/show_bug.cgi?id=106736

        Reviewed by Eric Seidel.

        They shouldn't be needed to run tests. They don't need a lot of space,
        but add many lines to the "extracting" stdout. This attempts to reduce
        that noise a bit.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):

2013-01-21  Benjamin Poulain  <benjamin@webkit.org>

        Mac DumpRenderTree's installSignalHandlers() is unreachable code
        https://bugs.webkit.org/show_bug.cgi?id=107383

        Reviewed by Sam Weinig.

        The CrashHandler of DumpRenderTree were originally used for restoring
        the color profile of the main display even if DRT crashes.

        That feature was later limited to pixel tests only in r29999.

        In r104351, the DRT was changed to use device color space. Making the crash
        handlers useless, but they were left in the code since the error reporting
        code was still reachable.

        Later, r124581 refactored the code and dumpPixelsForCurrentTest
        is being used before being assigned its value.
        This did cause any regression because the code had become useless with the previous change.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        Remove crashHandler() and installSignalHandlers() as they have become useless and
        have been unreachable code for 6 months.
        (dumpRenderTree):
        Remove the code that was unreachable due to dumpPixelsForCurrentTest being always false
        at those points.

2013-01-21  Nico Weber  <thakis@chromium.org>

        Make ninja the default build system for build-webkit --chromium on mac
        https://bugs.webkit.org/show_bug.cgi?id=106737

        Reviewed by Eric Seidel.

        * Scripts/update-webkit-chromium:

2013-01-21  Christophe Dumez  <christophe.dumez@intel.com>

        Regression(r140262): Causes a lot of flakiness
        https://bugs.webkit.org/show_bug.cgi?id=107454

        Reviewed by Alexey Proskuryakov.

        r140262 introduced a lot of flakiness due to fixed layout mode
        not getting disabled on the view after being enabled for
        specific test cases. This patch makes sure fixed layout mode
        properly gets reset in WebKitTestRunner to avoid flakiness.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::updateLayoutType):

2013-01-21  Gustavo Noronha Silva  <gns@gnome.org>

        REGRESSION (r140285): GTK uses WKPageResourceLoadClient which was removed
        https://bugs.webkit.org/show_bug.cgi?id=107421

        Unreviewed build fix.

        * Scripts/run-gtk-tests:
        (TestRunner): skip Resource tests.

2013-01-21  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WKTR] platformRunUntil() should keep the main loop running
        https://bugs.webkit.org/show_bug.cgi?id=107442

        Reviewed by Noam Rosenthal.

        EFL's implementation of platformRunUntil() should keep the main loop
        running and avoid calling sleep() between calls to
        ecore_main_loop_iterate(). This call to sleep seems to be a source
        of deadlocks (see Bug 106884).

        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::TestController::platformRunUntil):

2013-01-21  Vivek Galatage  <vivek.vg@samsung.com>

        QtTestBrowser should provide way to clear selected elements
        https://bugs.webkit.org/show_bug.cgi?id=107437

        Reviewed by Simon Hausmann.

        Provide a way to "Clear selection" in the "Develop" menu to clear the previous search highlight.
        Invoke the clearSelection prior to highlighting new elements.

        * QtTestBrowser/launcherwindow.cpp:
        (ElementHighlight):
        (LauncherWindow::createChrome):
        (LauncherWindow::selectElements):
        (LauncherWindow::clearSelection):
        * QtTestBrowser/launcherwindow.h:
        (LauncherWindow):

2013-01-21  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move methods interacting with willSendRequest to TestRunner
        https://bugs.webkit.org/show_bug.cgi?id=107270

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::waitForPolicyDelegate):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner::WebTestRunner::shouldStayOnPageAfterHandlingBeforeUnload):
        (WebTestRunner::WebTestRunner::httpHeadersToClear):
        (WebTestRunner::WebTestRunner::shouldBlockRedirects):
        (WebTestRunner::WebTestRunner::willSendRequestShouldReturnNull):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::httpHeadersToClear):
        (WebTestRunner):
        (WebTestRunner::TestRunner::shouldBlockRedirects):
        (WebTestRunner::TestRunner::willSendRequestShouldReturnNull):
        (WebTestRunner::TestRunner::setWillSendRequestClearHeader):
        (WebTestRunner::TestRunner::setWillSendRequestReturnsNullOnRedirect):
        (WebTestRunner::TestRunner::setWillSendRequestReturnsNull):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::willSendRequest):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::willSendRequest):
        (WebViewHost::reset):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-21  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Stop building WebKit2 on GTK EWSs
        https://bugs.webkit.org/show_bug.cgi?id=107435

        Reviewed by Philippe Normand.

        The WebKit2 build of the GTK is at the moment not efficiently maintainable,
        so stop building it on GTK EWSs.

        * Scripts/webkitpy/common/config/ports.py:
        (GtkPort.build_webkit_command):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_gtk_port):

2013-01-21  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Update the RTCPeerConnection states to match the latest specification
        https://bugs.webkit.org/show_bug.cgi?id=107120

        Reviewed by Adam Barth.

        Updating mock to use the new states.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (RTCPeerConnectionStateTask::RTCPeerConnectionStateTask):
        (MockWebRTCPeerConnectionHandler::initialize):
        (MockWebRTCPeerConnectionHandler::updateICE):

2013-01-20  Tim 'mithro' Ansell  <mithro@mithis.com>

        Extend diff_parser to support the --full-index output.
        https://bugs.webkit.org/show_bug.cgi?id=107408

        Reviewed by Maciej Stachowiak.

        * Scripts/webkitpy/common/checkout/diff_parser.py:
        (git_diff_to_svn_diff):
        * Scripts/webkitpy/common/checkout/diff_parser_unittest.py:
        (DiffParserTest):
        (DiffParserTest.test_git_diff_to_svn_diff):
        (git_diff_to_svn_diff):

2013-01-20  Yoshifumi Inoue  <yosin@chromium.org>

        Dragging over an element with scrollbars should scroll the element when dragging near edges
        https://bugs.webkit.org/show_bug.cgi?id=39725

        Reviewed by Hajime Morita.

        This patch introduces canceling drag-and-drop by escape key for testing
        behavior after cancellation drag-and-drop.

        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::doMouseUp):
        (WebTestRunner::EventSender::finishDragAndDrop):
        (WebTestRunner::EventSender::keyDown):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.h:
        (EventSender):
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.h: Added VKEY_ESCAPE.

2013-01-20  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move frame generation related methods to TestRunner
        https://bugs.webkit.org/show_bug.cgi?id=107268

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::setWillSendRequestReturnsNull):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestRunner::WebTestDelegate::display):
        (WebTestRunner::WebTestDelegate::displayInvalidatedRegion):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::display):
        (WebTestRunner):
        (WebTestRunner::TestRunner::displayInvalidatedRegion):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::display):
        (WebViewHost::displayInvalidatedRegion):
        * DumpRenderTree/chromium/WebViewHost.h:

2013-01-20  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move speech related methods to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=107266

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::displayInvalidatedRegion):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestDelegate):
        (WebTestRunner::WebTestDelegate::addMockSpeechInputResult):
        (WebTestRunner::WebTestDelegate::setMockSpeechInputDumpRect):
        (WebTestRunner::WebTestDelegate::addMockSpeechRecognitionResult):
        (WebTestRunner::WebTestDelegate::setMockSpeechRecognitionError):
        (WebTestRunner::WebTestDelegate::wasMockSpeechRecognitionAborted):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner):
        (WebTestRunner::TestRunner::addMockSpeechInputResult):
        (WebTestRunner::TestRunner::setMockSpeechInputDumpRect):
        (WebTestRunner::TestRunner::addMockSpeechRecognitionResult):
        (WebTestRunner::TestRunner::setMockSpeechRecognitionError):
        (WebTestRunner::TestRunner::wasMockSpeechRecognitionAborted):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::addMockSpeechInputResult):
        (WebViewHost::setMockSpeechInputDumpRect):
        (WebViewHost::addMockSpeechRecognitionResult):
        (WebViewHost::setMockSpeechRecognitionError):
        (WebViewHost::wasMockSpeechRecognitionAborted):
        * DumpRenderTree/chromium/WebViewHost.h:

2013-01-20  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move notification related methods to TestRunner
        https://bugs.webkit.org/show_bug.cgi?id=107269

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestDelegate):
        (WebTestRunner::WebTestDelegate::grantWebNotificationPermission):
        (WebTestRunner::WebTestDelegate::simulateLegacyWebNotificationClick):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner):
        (WebTestRunner::TestRunner::grantWebNotificationPermission):
        (WebTestRunner::TestRunner::simulateLegacyWebNotificationClick):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::grantWebNotificationPermission):
        (WebViewHost::simulateLegacyWebNotificationClick):
        * DumpRenderTree/chromium/WebViewHost.h:

2013-01-20  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move geolocation related methods to TestRunner
        https://bugs.webkit.org/show_bug.cgi?id=107267

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestRunner::WebTestDelegate::numberOfPendingGeolocationPermissionRequests):
        (WebTestRunner::WebTestDelegate::setGeolocationPermission):
        (WebTestRunner::WebTestDelegate::setMockGeolocationPosition):
        (WebTestRunner::WebTestDelegate::setMockGeolocationPositionUnavailableError):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::numberOfPendingGeolocationPermissionRequests):
        (WebTestRunner):
        (WebTestRunner::TestRunner::setGeolocationPermission):
        (WebTestRunner::TestRunner::setMockGeolocationPosition):
        (WebTestRunner::TestRunner::setMockGeolocationPositionUnavailableError):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::numberOfPendingGeolocationPermissionRequests):
        (WebViewHost::setGeolocationPermission):
        (WebViewHost::setMockGeolocationPosition):
        (WebViewHost::setMockGeolocationPositionUnavailableError):
        * DumpRenderTree/chromium/WebViewHost.h:

2013-01-19  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix for Qt WK2 after r140258.
        Use the size_t type instead of unsigned for the variable
        which holds the position of the first null character in the
        console message.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willAddMessageToConsole):

2013-01-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140260.
        http://trac.webkit.org/changeset/140260
        https://bugs.webkit.org/show_bug.cgi?id=107387

        breaks fast/text/hyphens.html, fast/text/hyphenate-* (but
        nothing else) (Requested by thakis__ on #webkit).

        * Scripts/update-webkit-chromium:

2013-01-19  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        Delegated scrolling: Assertion on attempt to show a CSS sticky element
        https://bugs.webkit.org/show_bug.cgi?id=106890

        Reviewed by Kenneth Rohde Christiansen.

        Enabled fixed layout mode in WTR for 'fast/css/sticky' tests.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::shouldUseFixedLayout):
        (WTR):
        (WTR::updateLayoutType):

2013-01-19  Nico Weber  <thakis@chromium.org>

        Make ninja the default build system for build-webkit --chromium on mac
        https://bugs.webkit.org/show_bug.cgi?id=106737

        Reviewed by Eric Seidel.

        * Scripts/update-webkit-chromium:

2013-01-19  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] svg/dom/fuzz-path-parser.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=107133

        Reviewed by Alexey Proskuryakov.

        Console messages can contain null characters before the end of string.
        Appending such message to the StringBuilder as a WTFString appends the
        complete string, including the null character. This later cuts off everything
        after the null character when the string is being printed out to the test
        output.

        To avoid this, truncate the string up to the first null character. This
        preserves the newline character appended immediately after this and
        stops giving incorrect output.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willAddMessageToConsole):

2013-01-19  Eric Seidel  <eric@webkit.org>

        Update error regexps so that Parser/html-parser-srcdoc.html can "pass"
        https://bugs.webkit.org/show_bug.cgi?id=107367

        Reviewed by Ryosuke Niwa.

        Using srcdoc instead of document.write changes the error output
        ever so slightly.  Clearly we were already trying to ignore these
        messages, just not succeeding.  This change makes this new test "pass" correctly.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest):

2013-01-18  Dan Winship  <danw@gnome.org>

        REGRESSION (r139071): run-webkit-httpd complains at launch
        https://bugs.webkit.org/show_bug.cgi?id=107310

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitperl/httpd.pm:
        (getApacheVersion): use preferred perl syntax

2013-01-18  Julie Parent  <jparent@chromium.org>

        Add back 'group' as a default cross dashboard parameter, but with null as its value.
        https://bugs.webkit.org/show_bug.cgi?id=107336

        We need to have 'group' listed as a parameter, else we never parse it,
        as we only parse parameters with defaults.
        
        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/dashboard_base.js:

2013-01-18  Emil A Eklund  <eae@chromium.org>

        Update LayoutUnit rounding unit test
        https://bugs.webkit.org/show_bug.cgi?id=107322

        Reviewed by Levi Weintraub.
        
        Update the LayoutUnitRounding test to use fromFloatRound for
        values that cannot accurately be represented as a LayoutUnit
        (the default behavior is to floor the value to the nearest
        LayoutUnit).

        * TestWebKitAPI/Tests/WebCore/LayoutUnit.cpp:
        (TestWebKitAPI::TEST):

2013-01-18  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        VCSUtils.pm: Stop calling git repo-config.
        https://bugs.webkit.org/show_bug.cgi?id=107294

        Reviewed by Dirk Pranke.

        The `repo-config' git command has been deprecated since early
        2008, and recent versions have started warning it is deprecated.

        Basically revert r27870 and use the `config' command all the time.

        * Scripts/VCSUtils.pm:
        (gitConfig):

2013-01-18  Levi Weintraub  <leviw@chromium.org>

        LayoutUnit should round half consistently, not away from zero
        https://bugs.webkit.org/show_bug.cgi?id=107208

        Reviewed by Eric Seidel.

        * TestWebKitAPI/Tests/WebCore/LayoutUnit.cpp: Updating to reflect and
        cover this change in rounding behavior.

2013-01-18  Tim Horton  <timothy_horton@apple.com>

        [mac] DumpRenderTree/WebKitTestRunner should not participate in Exposé/Mission Control
        https://bugs.webkit.org/show_bug.cgi?id=107234

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow): Disable participation in Exposé via NSWindowCollectionBehaviorStationary.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView): Ditto.

2013-01-18  Tim Horton  <timothy_horton@apple.com>

        [mac] DumpRenderTree/WebKitTestRunner should disable NSBeep
        https://bugs.webkit.org/show_bug.cgi?id=107251

        Reviewed by Simon Fraser.

        Disable NSBeep in DumpRenderTree and WebKitTestRunner using NSSound SPI.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):

2013-01-18  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Enable indexed database for development builds
        https://bugs.webkit.org/show_bug.cgi?id=107299

        Reviewed by Gustavo Noronha Silva.

        * Scripts/webkitperl/FeatureList.pm: Enable indexed database by default
        for GTK+ development builds.

2013-01-18  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Improve table-guessing heuristics
        https://bugs.webkit.org/show_bug.cgi?id=107042

        Reviewed by Chris Fleizach.

        Implement parentElementCallback on Chromium to make testing easier.

        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        (WebTestRunner::AccessibilityUIElement::parentElementCallback):

2013-01-18  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add property for IndexedDB database path to WebKitGTK+
        https://bugs.webkit.org/show_bug.cgi?id=106136

        Reviewed by Gustavo Noronha Silva.

        During testing, set the web database directory to DUMPRENDERTREE_TEMP
        before falling back to the old default. This is necessary because
        indexed database tests require that each DRT shard is using a different
        IDB database location.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (temporaryDatabaseDirectory): Added this helper for getting the
        database directory.
        (setDefaultsToConsistentStateValuesForTesting): Use the new helper.

2013-01-18  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] Enable API test InjectedBundleFrameHitTest on EFL
        https://bugs.webkit.org/show_bug.cgi?id=107264

        Reviewed by Laszlo Gombos.

        Enable API test InjectedBundleFrameHitTest for hit-testing,
        since it is now passing on both Debug and Release builds.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformEfl.cmake:

2013-01-18  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Implement TestRunner::addUserScript
        https://bugs.webkit.org/show_bug.cgi?id=107275

        Reviewed by Philippe Normand.

        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        (TestRunner::addUserScript): Implement method using
        DumpRenderTreeSupportGtk::addUserScript.

2013-01-18  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        Unreviewed, add my secondary email address to the list.

        * Scripts/webkitpy/common/config/committers.py:

2013-01-18  Dan Carney  <dcarney@google.com>

        [chromium] move pointerlock functions to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=107241

        Reviewed by Jochen Eisinger.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestRunner::WebTestDelegate::didAcquirePointerLock):
        (WebTestRunner::WebTestDelegate::didNotAcquirePointerLock):
        (WebTestRunner::WebTestDelegate::didLosePointerLock):
        (WebTestRunner::WebTestDelegate::setPointerLockWillRespondAsynchronously):
        (WebTestRunner::WebTestDelegate::setPointerLockWillFailSynchronously):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner):
        (WebTestRunner::TestRunner::didAcquirePointerLock):
        (WebTestRunner::TestRunner::didNotAcquirePointerLock):
        (WebTestRunner::TestRunner::didLosePointerLock):
        (WebTestRunner::TestRunner::setPointerLockWillRespondAsynchronously):
        (WebTestRunner::TestRunner::setPointerLockWillFailSynchronously):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-14  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL] Update freetype in jhbuild to 2.4.11 and activate subpixel layout
        https://bugs.webkit.org/show_bug.cgi?id=106774

        Reviewed by Martin Robinson.

        In order to fix a long standing linespacing/font ascent & descent issue
        we found that FreeType commit b0962ac34e660 solves that problem.
        Let's update FreeType accordingly, but bump it to 2.4.11 due to the
        maintainer recommending several security updates after that said commit.

        Also, in order to avoid extra rebaselining, let's activate subpixel
        layout at the same time.

        * efl/jhbuild.modules: New freetype 2.4.11

2013-01-17  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] DRT - Accept http/file URL when running drt-launcher from command line
        https://bugs.webkit.org/show_bug.cgi?id=107107
        PR 282192

        Reviewed by Rob Buis.

        The DRT application will convert relative/absolute file path to
        file://<real-file-path> format, so we only check for http/file prefix.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::isFullUrl):
        (WebKit):
        (BlackBerry::WebKit::DumpRenderTree::runCurrentTest):

2013-01-17  Frank Farzan  <frankf@chromium.org>

        Flakiness dashboard: Add ChromiumFYI master
        https://bugs.webkit.org/show_bug.cgi?id=107180

        Reviewed by Ojan Vafai.

        This is needed to enable Chrome Android bots
        to upload results for instrumentation tests.

        * TestResultServer/generate_builders_json.py:
        (main):
        * TestResultServer/static-dashboards/builders.jsonp:

2013-01-17  Frank Farzan  <frankf@chromium.org>

        Add Chrome on Android instrumentation test types to flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=106964

        Reviewed by Ojan Vafai.

        Specifically, add these test types:
        
         androidwebview_instrumentation_tests
         chromiumtestshell_instrumentation_tests
         contentshell_instrumentation_tests
        
        Also, add ChromiumFYI to the list of masters.

        * TestResultServer/static-dashboards/builders.js:
        (loadBuildersList):
        * TestResultServer/static-dashboards/dashboard_base.js:
        (currentBuilderGroupCategory):

2013-01-17  Tim 'mithro' Ansell  <mithro@mithis.com>

        Fixing webkitpy's SCM unit tests.
        https://bugs.webkit.org/show_bug.cgi?id=106429

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/scm/detection_unittest.py:
        (SCMDetectorTest.test_detect_scm_system):
        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.in_working_directory):
        (Git.read_git_config):
        (Git._assert_can_squash):
        (Git.remote_branch_ref):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (GitSVNTest.test_commit_with_message_multiple_local_commits_always_squash):
        (GitTestWithMock):
        (GitTestWithMock.make_scm):
        (GitTestWithMock.test_create_patch):
        * Scripts/webkitpy/common/system/outputcapture.py:
        (OutputCapture.assert_outputs):
        (OutputCaptureTestCaseBase):
        * Scripts/webkitpy/test/printer.py:
        (Printer.configure):

2013-01-17  Julie Parent  <jparent@chromium.org>

        Flakiness dashboard assumes there must be ToT tests
        https://bugs.webkit.org/show_bug.cgi?id=107155

        Remove group as a default parameter, since we can't actually know
        the name of a group initially.  Instead, introduces 
        currentBuilderGroupName which returns the current builder group
        if it has been explicitly set, or picks the first one available
        as a default. Allows us to remove some extra code tracking this
        stuff as well.
        
        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (parseCrossDashboardParameters):
        (currentBuilderGroupName):
        (currentBuilderGroup):
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (platformAndBuildType):
        * TestResultServer/static-dashboards/loader.js:
        (.):

2013-01-16  Ryosuke Niwa  <rniwa@webkit.org>

        Remove NodeListsNodeData when it's no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=107074

        Reviewed by Darin Adler.

        Generalize the warning a little so that it's also ignored on PerformanceTests/DOM/TraverseChildNodes.html

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest):

2013-01-17  Simon Fraser  <simon.fraser@apple.com>

        Ref test images are upside-down in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=105457

        Reviewed by Sam "Speedy" Weinig.
        
        The bitmap context created in TestInvocation::dumpPixelsAndCompareWithExpected()
        from the window snapshot contained a flipped copy of the image, causing all ref
        and pixel images to be upside-down.

        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2013-01-17  Timothy Loh  <timloh@google.com>

        Replaced specifiers variable with is_debug in builders.py
        https://bugs.webkit.org/show_bug.cgi?id=107057

        Reviewed by Dirk Pranke.

        Replaced specifiers variable with is_debug in builders.py to simplify
        Bug 106259. The other specifiers are not used elsewhere in the code.
        Fixed builder_name_for_port_name to return a debug builder if we don't
        have a release builder.

        * Scripts/webkitpy/layout_tests/port/builders.py:
        (all_port_names):
        (builder_name_for_port_name):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineExpectations.test_rebaseline_expectations):

2013-01-17  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Build with LevelDB when IndexedDB is enabled
        https://bugs.webkit.org/show_bug.cgi?id=103220

        Reviewed by Gustavo Noronha Silva.

        * Scripts/webkitpy/style/checker.py: Do not style check the leveldb source code
        as it does not conform to WebKit style.

2013-01-17  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] Fix misuse of ASSERT on ecore_evas_init()
        https://bugs.webkit.org/show_bug.cgi?id=107119

        Reviewed by Laszlo Gombos.

        Do not use ASSERT on ecore_evas_init(), since the expression inside
        the macro compiles out of release builds.

        * TestWebKitAPI/PlatformEfl.cmake: Enable API test UserMessage.
        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::initEcoreEvas): Remove ASSERT on ecore_evas_init().

2013-01-17  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Profiler: split "getProfile" to "getCPUProfile" and "loadHeapSnapshot"
        https://bugs.webkit.org/show_bug.cgi?id=104545

        Reviewed by Yury Semikhatsky.

        Adopt signature changes.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/WebInspectorShims.js:
        (ProfilerAgent.getCPUProfile): Renamed.
        (ProfilerAgent.getHeapSnapshot): Added.

2013-01-17  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][EFL] NWRT should check that Xvfb is installed
        https://bugs.webkit.org/show_bug.cgi?id=71767

        Reviewed by Dirk Pranke.

        EFL and GTK ports now check that Xvfb is installed before running
        layout tests. The command line used to check whether Xvfb is present
        is a simple `which Xvfb` that should return 0 as the exit code upon
        success.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort.show_results_html_file):
        (EflPort):
        (EflPort.check_sys_deps):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.check_sys_deps):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        (XvfbDriver):
        (XvfbDriver.check_xvfb):

2013-01-16  Alan Cutter  <alancutter@chromium.org>

        sheriffbot can't tell me who "kov" is
        https://bugs.webkit.org/show_bug.cgi?id=106184

        Reviewed by Eric Seidel.

        Added glob style searching to the CommitterList contributors_by_search_string function so exact matches are favoured.

        * Scripts/webkitpy/common/config/committers.py:
        (Account.matches_glob):
        (CommitterList.contributors_by_search_string):
        * Scripts/webkitpy/common/config/committers_unittest.py:
        (CommittersTest.test_committer_lookup):
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Whois):

2013-01-16  David Kilzer  <ddkilzer@apple.com>

        Use xcrun to find path to make for Mac port
        <http://webkit.org/b/107091>

        Reviewed by Dan Bernstein.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort._build_java_test_support): Call self.make_command().
        (MacPort.make_command): Add.  Call xcrun_find().
        (MacPort.nm_command): Use self.xcrun_find().
        (MacPort.xcrun_find): Add.  Extract from nm_command().

2013-01-16  Sam Weinig  <sam@webkit.org>

        Make debug-safari --target-web-process work again
        https://bugs.webkit.org/show_bug.cgi?id=107088

        Reviewed by Anders Carlsson.

        * Scripts/webkitdirs.pm:
        (execMacWebKitAppForDebugging):
        The shim is now called SecItemShim.

2013-01-16  Alan Cutter  <alancutter@chromium.org>

        GCE build scripts don't take working directory into account when calling findzone.sh
        https://bugs.webkit.org/show_bug.cgi?id=106962

        Reviewed by Adam Barth.

        * EWSTools/GoogleComputeEngine/build-chromium-ews.sh:
        * EWSTools/GoogleComputeEngine/build-commit-queue.sh:
        * EWSTools/GoogleComputeEngine/build-feeder-style-sheriffbot.sh:

2013-01-16  Alan Cutter  <alancutter@chromium.org>

        start-queue.sh does not pass remaining parameters correctly
        https://bugs.webkit.org/show_bug.cgi?id=107054

        Reviewed by Adam Barth.

        start-queue.sh now passes all remaining params to the webkit-patch command.
        Previously only one additional queue parameter could be sent.

        * EWSTools/start-queue.sh:

2013-01-16  Xueqing Huang  <huangxueqing@baidu.com>

        check-webkit-style script cannot running in Chinese windows.
        https://bugs.webkit.org/show_bug.cgi?id=87548

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._win_version_tuple_from_cmd):

2013-01-16  Dirk Pranke  <dpranke@chromium.org>

        Delete an extraneous print statement.
        https://bugs.webkit.org/show_bug.cgi?id=106562

        Delete the extraneous print statement introduced in r139841.

        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_found):

2013-01-16  Zan Dobersek  <zdobersek@igalia.com>

        Please reinstate --pixel
        https://bugs.webkit.org/show_bug.cgi?id=101995

        Reviewed by Dirk Pranke.

        Add the '--pixel' and '--no-pixel' options for NRWT as aliases for
        the '--pixel-tests' (or '-p') and '--no-pixel-tests' options respectively.
        Some developers are still used to these options that were available in the ORWT.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2013-01-16  Eric Seidel  <eric@webkit.org>

        Remove --shark* support from sunspider/run-sunspider now that Shark is dead
        https://bugs.webkit.org/show_bug.cgi?id=99512

        Reviewed by Darin Adler.

        * Scripts/run-sunspider:

2013-01-16  Eric Seidel  <eric@webkit.org>

        Remove webkitpy Visual Studio files, as core developers are not interested in maintaining them
        https://bugs.webkit.org/show_bug.cgi?id=106036

        Reviewed by Darin Adler.

        * Scripts/webkitpy/webkitpy.pyproj: Removed.
        * Scripts/webkitpy/webkitpy.sln: Removed.

2013-01-16  Chris Hopman  <cjhopman@chromium.org>

        [Chromium] Remove hardcoded chromium_*.jar in gyp files
        https://bugs.webkit.org/show_bug.cgi?id=104049

        Reviewed by Eric Seidel.

        Targets with dependencies (direct/indirect) on a java target receive
        the chromium_*.jar paths in the variable input_jars_paths. Targets
        should use that rather than hardcoding where they think the jar will
        be. These can be passed directly to ant as INPUT_JARS_PATHS rather
        than as --jars to generate_native_test.py.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2013-01-16  Dan Carney  <dcarney@google.com>

        [chromium] move setMockDeviceOrientation to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=106895

        Reviewed by Jochen Eisinger.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebKit):
        (WebTestRunner::WebTestDelegate::setDeviceOrientation):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::setMockDeviceOrientation):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::setDeviceOrientation):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-16  Jochen Eisinger  <jochen@chromium.org>

        [chromium] route more webkit_support and webviewhost callbacks through WebTestDelegate
        https://bugs.webkit.org/show_bug.cgi?id=106904

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::notifyDone):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestRunner::WebTestDelegate::setDeviceScaleFactor):
        (WebTestRunner::WebTestDelegate::setFocus):
        (WebTestRunner::WebTestDelegate::setAcceptAllCookies):
        (WebTestRunner::WebTestDelegate::pathToLocalResource):
        (WebTestRunner::WebTestDelegate::setLocale):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::setAlwaysAcceptCookies):
        (WebTestRunner):
        (WebTestRunner::TestRunner::setWindowIsKey):
        (WebTestRunner::TestRunner::pathToLocalResource):
        (WebTestRunner::TestRunner::setBackingScaleFactor):
        (WebTestRunner::TestRunner::setPOSIXLocale):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebTestRunner::TestRunner::taskList):
        (TestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::setDeviceScaleFactor):
        (WebViewHost::setFocus):
        (WebViewHost::setAcceptAllCookies):
        (WebViewHost::pathToLocalResource):
        (WebViewHost::setLocale):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-16  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] build-webkit fails if the jhbuild wrapper is not used
        https://bugs.webkit.org/show_bug.cgi?id=106769

        Reviewed by Martin Robinson.

        Return an empty array instead of "" in
        jhbuildWrapperPrefixIfNeeded() because otherwise that empty string
        will not be recognized as a valid command when the returned array
        is directly passed to perl's system() call.

        * Scripts/webkitdirs.pm:
        (jhbuildWrapperPrefixIfNeeded):

2013-01-16  Jochen Eisinger  <jochen@chromium.org>

        [chromium] add title text direction attribute to TestRunner
        https://bugs.webkit.org/show_bug.cgi?id=106907

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner::WebTestRunner::setTitleTextDirection):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::setTitleTextDirection):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::didReceiveTitle):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didReceiveTitle):

2013-01-16  Jussi Kukkonen  <jussi.kukkonen@intel.com>

        NRWT still confused about test count with --repeat-each and --iterations
        https://bugs.webkit.org/show_bug.cgi?id=106562

        Reviewed by Dirk Pranke.

        Fix the printed unique test count and skipped count. This
        seems to have broken in r127688 ("NRWT lies about the number
        of tests that it's skipping when used with --repeat-each").

        Also add a test for print_found()

        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_found):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_details):
        (Testprinter):
        (Testprinter.test_found):

2013-01-15  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r139769.

        Note that omitting the WebKit1 code from the build now
        works for GTK as well.

        * Scripts/build-webkit:

2013-01-15  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: truncate output to the terminal width when necessary
        https://bugs.webkit.org/show_bug.cgi?id=106973

        Reviewed by Ojan Vafai.

        this implements the same logic for test-webkitpy that we have
        for run-webkit-tests (and ninja).

        No tests written as this is exercised by running test-webkitpy itself.

        * Scripts/webkitpy/test/printer.py:
        (Printer.configure):
        (Printer._test_line):

2013-01-15  Dirk Pranke  <dpranke@chromium.org>

        remove extraneous output in test-webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=106971

        Reviewed by Ojan Vafai.

        We weren't ignoring or capturing the echoed output from
        these two tests, and getting noise in the logs as a result.

        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_auto_stringify_args):
        (ExecutiveTest.test_popen_args):

2013-01-15  Dirk Pranke  <dpranke@chromium.org>

        webkitpy.layout_tests.servers.http_server_unittest.TestHttpServer.test_win32_start_and_stop is flaky
        https://bugs.webkit.org/show_bug.cgi?id=106974

        Reviewed by Ryosuke Niwa.

        I forgot to stub out the call to check to ensure that the ports were
        available, so this test could fail if something was listening on 8000 or
        8443 on the machine.

        * Scripts/webkitpy/layout_tests/servers/http_server_unittest.py:
        (TestHttpServer.test_win32_start_and_stop):

2013-01-15  Levi Weintraub  <leviw@chromium.org>

        Unreviewed, rolling out r139792.
        http://trac.webkit.org/changeset/139792
        https://bugs.webkit.org/show_bug.cgi?id=106970

        Broke the windows build.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::notifyDone):
        (DRTTestRunner::reset):
        (DRTTestRunner::setAlwaysAcceptCookies):
        (DRTTestRunner::setWindowIsKey):
        (DRTTestRunner::pathToLocalResource):
        (DRTTestRunner::setPOSIXLocale):
        (InvokeCallbackTask):
        (InvokeCallbackTask::InvokeCallbackTask):
        (InvokeCallbackTask::runIfValid):
        (DRTTestRunner::setBackingScaleFactor):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        (DRTTestRunner::taskList):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestRunner::WebTestDelegate::setDatabaseQuota):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::setDatabaseQuota):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::setPendingExtraData):
        (WebViewHost::setDeviceScaleFactor):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-15  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r139357. The port name of MacWK2EWS should be 'mac-wk2'.

        * Scripts/webkitpy/common/config/ports.py:
        (MacWK2Port):

2013-01-15  Alan Cutter  <alancutter@chromium.org>

        Extend sheriffbot's "help" command to be able to get help on individual commands
        https://bugs.webkit.org/show_bug.cgi?id=106629

        Reviewed by Eric Seidel.

        Added a help command to sheriffbot.
        Fixed some style issues and ordered the commands alphabetically.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (IRCCommand):
        (IRCCommand.execute):
        (IRCCommand.usage):
        (IRCCommand.help):
        (CreateBug):
        (CreateBug.execute):
        (Help):
        (Help.execute):
        (Help._post_command_help):
        (Hi):
        (Hi.execute):
        (Restart):
        (RollChromiumDEPS):
        (RollChromiumDEPS._parse_args):
        (RollChromiumDEPS._expand_irc_nickname):
        (RollChromiumDEPS.execute):
        (Rollout):
        (Rollout._extract_revisions):
        (Rollout.execute):
        (Sheriffs):
        (Sheriffs.execute):
        (Whois):
        (Whois.execute):
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        (IRCBotTest.test_help):

2013-01-15  Enrica Casucci  <enrica@apple.com>

        Add a new set of WebKit2 APIs for text search and
        search results management.
        https://bugs.webkit.org/show_bug.cgi?id=106834.
        <rdar://problem/12597159>

        Added new test for the new WebKit2 API for
        text search.
        
        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/FindMatches.mm: Added.

2013-01-15  Levi Weintraub  <leviw@chromium.org>

        [chromium] route more webkit_support and webviewhost callbacks through WebTestDelegate
        https://bugs.webkit.org/show_bug.cgi?id=106904

        Reverting 139794. It broke the build. It appears that a header file,
        WebTextDirection.h, was left out.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner::setTitleTextDirection):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner::WebTestRunner::shouldStayOnPageAfterHandlingBeforeUnload):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::shouldStayOnPageAfterHandlingBeforeUnload):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::didReceiveTitle):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didReceiveTitle):

2013-01-15  Jochen Eisinger  <jochen@chromium.org>

        [chromium] route more webkit_support and webviewhost callbacks through WebTestDelegate
        https://bugs.webkit.org/show_bug.cgi?id=106904

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::notifyDone):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestRunner::WebTestDelegate::setDeviceScaleFactor):
        (WebTestRunner::WebTestDelegate::setFocus):
        (WebTestRunner::WebTestDelegate::setAcceptAllCookies):
        (WebTestRunner::WebTestDelegate::pathToLocalResource):
        (WebTestRunner::WebTestDelegate::setLocale):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::setAlwaysAcceptCookies):
        (WebTestRunner):
        (WebTestRunner::TestRunner::setWindowIsKey):
        (WebTestRunner::TestRunner::pathToLocalResource):
        (WebTestRunner::TestRunner::setBackingScaleFactor):
        (WebTestRunner::TestRunner::setPOSIXLocale):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebTestRunner::TestRunner::taskList):
        (TestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::setDeviceScaleFactor):
        (WebViewHost::setFocus):
        (WebViewHost::setAcceptAllCookies):
        (WebViewHost::pathToLocalResource):
        (WebViewHost::setLocale):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-15  Zan Dobersek  <zdobersek@igalia.com>

        Tests with WontFix expectation are (indirectly) skipped
        https://bugs.webkit.org/show_bug.cgi?id=105860

        Reviewed by Dirk Pranke.

        Only skip the WontFix expectation if there are no other layout test
        expectations (like Failure, ImageOnlyFailure) listed for the test.
        This makes it possible to run an expected failure for which there
        is no reason or interest to fix. There are some ports that would like
        to exercise this behavior as well as specific test cases that should use
        such expectations.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser._tokenize_line): Only add the SKIP modifier for a
        WONTFIX test if there are no expectations listed. The warning is adjusted
        to reflect the new behavior.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Add
        and adjust test cases for these changes.
        (ExpectationSyntaxTests.test_wontfix):
        (SemanticTests.test_skip_and_wontfix):

2013-01-15  Jochen Eisinger  <jochen@chromium.org>

        [chromium] add title text direction attribute to TestRunner
        https://bugs.webkit.org/show_bug.cgi?id=106907

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner::WebTestRunner::setTitleTextDirection):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::setTitleTextDirection):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::didReceiveTitle):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didReceiveTitle):

2013-01-15  Dirk Pranke  <dpranke@chromium.org>

        nrwt: change the default # of locked shards on chromium_win to 1
        https://bugs.webkit.org/show_bug.cgi?id=106938

        Reviewed by Eric Seidel.

        It looks like LigHTTPd might be buggy or unstable if we are
        running multiple http tests in parallel; see
        http://code.google.com/p/chromium/issues/detail?id=169530 for more
        context as well. This change will stop running http tests in parallel
        and we can see if this fixes things.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort.default_max_locked_shards):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest.test_path_to_image_diff):
        (ChromiumWinTest):
        (ChromiumWinTest.test_default_max_locked_shards):

2013-01-15  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move WebDatabase related methods to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=106905

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestRunner::WebTestDelegate::clearAllDatabases):
        (WebTestRunner::WebTestDelegate::setDatabaseQuota):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::clearAllDatabases):
        (WebTestRunner):
        (WebTestRunner::TestRunner::setDatabaseQuota):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::clearAllDatabases):
        (WebViewHost::setDatabaseQuota):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-15  Tim 'mithro' Ansell  <mithro@mithis.com>

        Renaming CleanWorkingDirectory step to DiscardLocalChanges to make
        functionality match the name.
        https://bugs.webkit.org/show_bug.cgi?id=106870

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/download.py:
        (Clean):
        (Update):
        (Build):
        (BuildAndTest):
        (CheckStyle):
        (BuildAttachment):
        (BuildAndTestAttachment):
        (AbstractPatchApplyingCommand):
        (ApplyWatchList):
        (AbstractPatchLandingCommand):
        (CreateRollout):
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/cleanworkingdirectory.py:
        (CleanWorkingDirectory.options):
        (CleanWorkingDirectory.run):
        * Scripts/webkitpy/tool/steps/cleanworkingdirectory_unittest.py:
        * Scripts/webkitpy/tool/steps/discardlocalchanges.py: Copied from Tools/Scripts/webkitpy/tool/steps/cleanworkingdirectory.py.
        * Scripts/webkitpy/tool/steps/discardlocalchanges_unittest.py: Copied from Tools/Scripts/webkitpy/tool/steps/cleanworkingdirectory_unittest.py.

2013-01-15  Zan Dobersek  <zandobersek@gmail.com>

        [Autotools] Add support for WebKit2-only builds
        https://bugs.webkit.org/show_bug.cgi?id=106889

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Only build the GtkLauncher and DumpRenderTree if building WebKit1.
        * Scripts/build-webkit: Pass along the information on whether to build WebKit1 when
        building the GTK port through build-webkit.
        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject): Add the --disable-webkit1 configuration flag to the build
        arguments when not building WebKit1.
        (buildGtkProject): Pass along the information on whether to build WebKit1 when building
        through the Autotools build system.

2013-01-15  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Enable Performance Timeline, Resource Timing, Navigation Timing features
        https://bugs.webkit.org/show_bug.cgi?id=106197

        Reviewed by Martin Robinson.

        * Scripts/webkitperl/FeatureList.pm: Add the configuration options for all three
        features. Enable them on GTK, meaning they will be enabled in development builds
        (i.e. when building with build-webkit).

2013-01-15  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Enable CSS Image Resolution feature
        https://bugs.webkit.org/show_bug.cgi?id=99038

        Reviewed by Gustavo Noronha Silva.

        Enable the CSS Image Resolution feature for the development
        builds of the GTK port.

        * Scripts/webkitperl/FeatureList.pm:

2013-01-15  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Stop passing the unstable features flag to configure script when using build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=106579

        Reviewed by Gustavo Noronha Silva.

        The --enable-unstable-features flag is not required to be passed anymore
        to the configure script as it was removed in r138252.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject):

2013-01-15  Tony Chang  <tony@chromium.org>

        [chromium] Unreviewed, fix a bug where we don't properly shutdown lighttpd.

        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd._check_and_kill): Pass /pid so taskkill.exe doesn't error out on us.
        * Scripts/webkitpy/layout_tests/servers/http_server_unittest.py:
        (TestHttpServer.test_win32_start_and_stop):

2013-01-15  Joshua Bell  <jsbell@chromium.org>

        Unreviewed. Adding Michael Pruett as contributor.

        * Scripts/webkitpy/common/config/committers.py:

2013-01-15  Victor Carbune  <victor@rosedu.org>

        Unreviewed. Update my email addresses.

        * Scripts/webkitpy/common/config/committers.py:

2013-01-15  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Waiting on the gdb process will lead to deadlock
        https://bugs.webkit.org/show_bug.cgi?id=106906

        Reviewed by Philippe Normand.

        Use communicate() rather than wait() on the Popen object that's running the gdb
        command. This avoids the deadlock that occurs on the GTK builders.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._get_gdb_output):

2013-01-15  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Limit the number of frames printed out when backtracing with gdb
        https://bugs.webkit.org/show_bug.cgi?id=106901

        Reviewed by Philippe Normand.

        Printing an unlimited number of frames when dumping the gdb backtracing
        output can cause timeouts in the builders. This patch limits the number
        of frames that are printed out to 1024.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._get_gdb_output):

2013-01-15  Andras Becsi  <andras.becsi@digia.com>

        [Qt] Fix ImageDiff's image format conversion
        https://bugs.webkit.org/show_bug.cgi?id=106880

        Reviewed by Csaba Osztrogonác.

        Besides actually doing the conversion this also silences the suspicious warning:
        "ignoring return value of function declared with warn_unused_result attribute".

        * ImageDiff/qt/ImageDiff.cpp:
        (main): QImage::convertToFormat, contrary to the assumed behaviour, returns a
        copy of the image in the given format and does not alter the image itself.

2013-01-15  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move remaining methods that just set a boolean flag to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=106823

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner::WebTestRunner::shouldDumpBackForwardList):
        (WebTestRunner::WebTestRunner::deferMainResourceDataLoad):
        (WebTestRunner::WebTestRunner::shouldDumpSelectionRect):
        (WebTestRunner::WebTestRunner::testRepaint):
        (WebTestRunner::WebTestRunner::sweepHorizontally):
        (WebTestRunner::WebTestRunner::isPrinting):
        (WebTestRunner::WebTestRunner::shouldStayOnPageAfterHandlingBeforeUnload):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::shouldDumpBackForwardList):
        (WebTestRunner):
        (WebTestRunner::TestRunner::deferMainResourceDataLoad):
        (WebTestRunner::TestRunner::shouldDumpSelectionRect):
        (WebTestRunner::TestRunner::testRepaint):
        (WebTestRunner::TestRunner::sweepHorizontally):
        (WebTestRunner::TestRunner::isPrinting):
        (WebTestRunner::TestRunner::shouldStayOnPageAfterHandlingBeforeUnload):
        (WebTestRunner::TestRunner::dumpBackForwardList):
        (WebTestRunner::TestRunner::setDeferMainResourceDataLoad):
        (WebTestRunner::TestRunner::dumpSelectionRect):
        (WebTestRunner::TestRunner::repaintSweepHorizontally):
        (WebTestRunner::TestRunner::setPrinting):
        (WebTestRunner::TestRunner::setShouldStayOnPageAfterHandlingBeforeUnload):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):

2013-01-14  Dirk Pranke  <dpranke@chromium.org>

        nrwt: stub out show_results_html for mock ports
        https://bugs.webkit.org/show_bug.cgi?id=106848

        Reviewed by Ojan Vafai.

        We were accidentally using the underlying ports'
        show_results_html_file() implementation, which would, unsurprisingly,
        fail in many cases (e.g., running mock-efl on the mac).

        No test added since we don't generally add tests for the mock
        implementation.

        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        (MockDRTPort.show_results_html_file):

2013-01-14  Tim 'mithro' Ansell  <mithro@mithis.com>

        Changing clean_working_directory/clean_local_commits and related
        functions to have consistent naming.

        https://bugs.webkit.org/show_bug.cgi?id=104198

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/tool/steps/cleanworkingdirectory.py:
        * Scripts/webkitpy/tool/steps/cleanworkingdirectory_unittest.py:

2013-01-14  Alan Cutter  <alancutter@chromium.org>

        Fix EWS GCE build scripts to detect which zone is available
        https://bugs.webkit.org/show_bug.cgi?id=106524

        Reviewed by Adam Barth.

        * EWSTools/GoogleComputeEngine/build-chromium-ews.sh:
        * EWSTools/GoogleComputeEngine/build-commit-queue.sh:
        * EWSTools/GoogleComputeEngine/build-feeder-style-sheriffbot.sh:
        * EWSTools/GoogleComputeEngine/findzone.sh: Added.

2013-01-14  Tim 'mithro' Ansell  <mithro@mithis.com>

        Adding an error string to AmbiguousCommitError.
        https://bugs.webkit.org/show_bug.cgi?id=106846

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (AmbiguousCommitError.__init__):

2013-01-14  Dirk Pranke  <dpranke@chromium.org>

        kill whole lighttpd process tree for chromium win
        https://bugs.webkit.org/show_bug.cgi?id=106838

        Reviewed by Tony Chang.

        Land a speculative fix for lighttpd.exe hanging on some chromium bots;
        I think a test is causing a httpd server child process to wedge and
        killing the parent httpd server process isn't sufficient to ensure
        that the children are also killed.

        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd._check_and_kill):
        * Scripts/webkitpy/layout_tests/servers/http_server_unittest.py:
        (TestHttpServer.test_start_cmd):
        (TestHttpServer):
        (TestHttpServer.test_win32_start_and_stop):
        (TestHttpServer.test_win32_start_and_stop.wait_for_action):
        (TestHttpServer.test_win32_start_and_stop.mock_returns):
        (TestHttpServer.test_win32_start_and_stop.mock_returns.return_value_thunk):

2013-01-14  Nico Weber  <thakis@chromium.org>

        [chromium] Enable `update-webkit --chromium --ninja` on windows
        https://bugs.webkit.org/show_bug.cgi?id=106836

        Reviewed by Eric Seidel.

        After running this, build-webkit --chromium will use ninja to build.
        Apparently there are some minor issues with that still, so it's
        not quite ready for use yet.

        * Scripts/webkitdirs.pm:
        (determineIsChromiumNinja):
        (buildChromium):

2013-01-14  Dirk Pranke  <dpranke@chromium.org>

        nrwt: use the same search path for baselines and TestExpectations on apple mac
        https://bugs.webkit.org/show_bug.cgi?id=105599

        Reviewed by Ryosuke Niwa.

        Bug 105583 revealed some confusion due to the fact that the Apple
        Mac port used a different list of directories to search for baselines
        and TestExpectations files (actually, pretty much every port does).

        It seems like a good idea to use the same list for both by default, but
        making this happen will affect every port in slightly different ways, so
        we'll try this on the Apple Mac port first.

        Note that the effective changes for this are that:
        1) The apple mac port will look in platform/wk2 for baselines where
        it didn't before (it will look after looking in mac-wk2 but before
        the non-wk2 dirs)
        2) The apple mac-snowleopard port will use the expectations in
        mac-lion as well as the expectations in mac-snowleopard, although
        I'm not even sure if mac-snowleopard is still supported ...

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.default_baseline_search_path):
        (MacPort.expectations_files):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_baseline_search_path):

2013-01-14  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Need to implement ColorWellRole
        https://bugs.webkit.org/show_bug.cgi?id=106756

        Reviewed by Chris Fleizach.

        Returns a string representation of the value of a color
        when the role is Color Well, to make it easy to write layout
        tests for color controls.

        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:

2013-01-14  Dominic Mazzoni  <dmazzoni@google.com>

        Chromium: Error in AccessibilityUIElement::intValueGetterCallback
        https://bugs.webkit.org/show_bug.cgi?id=106682

        Reviewed by Chris Fleizach.

        Modify Chromium's DRT implementation of intValue to return a
        different value depending on the role.

        There are actually platform-specific differences in what should
        be returned in the "value" of an object, so Chromium normally keeps
        these separate (i.e. valueForRange, headingLevel, hierarchicalLevel, etc.)
        but this is a fine simplification to make cross-platform tests easier.

        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        (WebTestRunner::AccessibilityUIElement::intValueGetterCallback):

2013-01-14  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move remaining methods to dump WebViewClient callbacks to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=106785

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebTestProxyBase):
        (WebTestRunner::WebTestProxy::setStatusText):
        (WebTestRunner::WebTestProxy::didStopLoading):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner::WebTestRunner::shouldDumpStatusCallbacks):
        (WebTestRunner::WebTestRunner::shouldDumpProgressFinishedCallback):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::shouldDumpStatusCallbacks):
        (WebTestRunner):
        (WebTestRunner::TestRunner::shouldDumpProgressFinishedCallback):
        (WebTestRunner::TestRunner::dumpWindowStatusChanges):
        (WebTestRunner::TestRunner::dumpProgressFinishedCallback):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::setStatusText):
        (WebTestRunner):
        (WebTestRunner::WebTestProxyBase::didStopLoading):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didStopLoading):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-14  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: devtools front-end doesn't have focus in TestShell
        https://bugs.webkit.org/show_bug.cgi?id=106778

        Reviewed by Pavel Feldman.

        Focus devTools window after loadURL method.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):

2013-01-14  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][jhbuild] Build the GStreamer-related dependencies with the "configure" script
        https://bugs.webkit.org/show_bug.cgi?id=106573

        Reviewed by Philippe Normand.

        Similarly to what's been described in bug 106569, we're building
        from release tarballs, so there's no reason to regenerate the
        autoconf-related stuff with autogen.sh, especially since we might
        run into trouble with automake 1.13 and deprecated macros.

        * efl/jhbuild.modules:

2013-01-14  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] The Qt's configuration isn't honoured regarding the use of the system libpng and libjpeg
        https://bugs.webkit.org/show_bug.cgi?id=104909

        Reviewed by Simon Hausmann.

        To be able to build redistribuable binary packages, Qt's configure switches
        -qt-libpng and -qt-libjpeg are used to avoid having the binaries trying to
        dynamically link to optional system libraries.
        QtWebKit is doing its own configure checks for those libraries, thus adding a
        runtime dependency that might not be fulfilled if the packager's machine had
        those libraries while the user's machine won't.

        Since in most cases where WebKit will want to use those system libraries, Qt will
        also be using them, remove these configure tests from WebKit.

        * qmake/config.tests/libjpeg/libjpeg.cpp: Removed.
        * qmake/config.tests/libjpeg/libjpeg.pro: Removed.
        * qmake/config.tests/libpng/libpng.cpp: Removed.
        * qmake/config.tests/libpng/libpng.pro: Removed.
        * qmake/mkspecs/features/features.prf:

2013-01-09  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][jhbuild] Bump the EFL dependencies in jhbuild to 1.7.5.
        https://bugs.webkit.org/show_bug.cgi?id=106574

        Reviewed by Laszlo Gombos.

        Rely on a more recent stable release, which includes support for
        Lua 5.2 in Edje and other assorted minor fixes.

        While here, also use the "configure" script to build the libraries
        instead of relying on autogen.sh, which is not really needed with
        a release tarball and may have problems with automake 1.13.

        * efl/jhbuild.modules:

2013-01-14  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: fix DRT to deliver simulated events to devtools front-end
        https://bugs.webkit.org/show_bug.cgi?id=106650

        Reviewed by Pavel Feldman.

        Add separated m_devToolsTestInterfaces object to testShell which is
        bind to devTools webview.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        (TestShell::createMainWindow):
        (TestShell::~TestShell):
        (TestShell::showDevTools):
        (TestShell::resetTestController):
        (TestShell::bindJSObjectsToWindow):
        (TestShell::createNewWindow):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):

2013-01-14  Alan Cutter  <alancutter@chromium.org>

        Sheriffbot command aliases need test cases
        https://bugs.webkit.org/show_bug.cgi?id=106754

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:
        (SheriffBotTest.test_command_aliases):

2013-01-13  Alan Cutter  <alancutter@chromium.org>

        Allow users to misspell the "sheriffs" command in sheriffbot
        https://bugs.webkit.org/show_bug.cgi?id=106628

        Reviewed by Steve Block.

        * Scripts/webkitpy/tool/bot/irc_command.py:

2013-01-13  Alan Cutter  <alancutter@chromium.org>

        Make "gardeners" an alias for "sheriffs" in sherrifbot
        https://bugs.webkit.org/show_bug.cgi?id=106627

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/tool/bot/irc_command.py:

2013-01-13  Dirk Pranke  <dpranke@chromium.org>

        [chromium] webkitpy-test: executive.py stringify_args error on the release test bot
        https://bugs.webkit.org/show_bug.cgi?id=105380

        Reviewed by Eric Seidel.

        Fix a regression introduced in r137692 where we were double-encoding
        the arguments to popen(); this was only an issue on windows, where
        we would try to encode something to mbcs, then try to encode it
        to unicode as if the input as ascii.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.run_command):

2013-01-13  Alan Cutter  <alancutter@chromium.org>

        State who told sheriffbot to roll the Chromium deps and to what revision
        https://bugs.webkit.org/show_bug.cgi?id=106626

        Reviewed by Eric Seidel.

        Added optional argument to post-chromium-deps-roll so Sheriffbot can specify ChangeLog message.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (RollChromiumDEPS._expand_irc_nickname):
        (RollChromiumDEPS.execute):
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_roll_chromium_deps):
        * Scripts/webkitpy/tool/bot/sheriff.py:
        (Sheriff.post_chromium_deps_roll):
        * Scripts/webkitpy/tool/commands/roll.py:
        (RollChromiumDEPS._prepare_state):
        (PostChromiumDEPSRoll):
        (PostChromiumDEPSRoll._prepare_state):
        * Scripts/webkitpy/tool/commands/roll_unittest.py:
        (PostRollCommandsTest.test_prepare_state):
        * Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py:
        (PrepareChangeLogForDEPSRoll.run):

2013-01-13  Alan Cutter  <alancutter@chromium.org>

        Add Alan Cutter as contributor
        https://bugs.webkit.org/show_bug.cgi?id=106747

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/config/committers.py:

2013-01-13  Jonathan Liu  <net147@gmail.com>

        Fix CONFIG missing link_pkgconfig on Windows
        https://bugs.webkit.org/show_bug.cgi?id=106647

        Some libraries (e.g. libxslt, libxml2 and sqlite3) fail to link
        properly on Windows because they are added to PKGCONFIG but
        CONFIG does not contain link_pkgconfig.

        This is because link_pkgconfig is added in unix/default_pre.prf
        which is only used for UNIX platforms. To fix this, move it to
        the general default_pre.prf.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/unix/default_pre.prf:

2013-01-12  Nico Weber  <thakis@chromium.org>

        nrwt/chromium: Don't prefer chromium over webkit build directories
        https://bugs.webkit.org/show_bug.cgi?id=105597

        Reviewed by Dirk Pranke.

        Rely on the new timestamp logic instead. Requested by dpranke in
        https://bugs.webkit.org/show_bug.cgi?id=105498

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort._static_build_path):
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        (ChromiumLinuxPortTest.test_build_path):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_build_path):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest.test_build_path):

2013-01-12  Nico Weber  <thakis@chromium.org>

        Use ninja by default on Linux for build-webkit --chromium, bot edition
        https://bugs.webkit.org/show_bug.cgi?id=104434

        Reviewed by Eric Seidel.

        r139557 changed update-webkit to pick ninja by default on linux, but
        the bots run update-webkit-chromium directly so they didn't see this.
        Move the default for ninja into update-webkit-chromium so that it's
        picked up by the bots, and let update-webkit forward non-default
        options to there.

        This way, the default is in one place only and both developers (who
        usually use update-webkit which then shells out to
        updat-webkit-chromium) and bots (which use update-webkit-chromium
        directly) see the same behavior.

        * Scripts/update-webkit:
        * Scripts/update-webkit-chromium:

2013-01-12  Nico Weber  <thakis@chromium.org>

        Make ninja the default build system on Linux for build-webkit --chromium
        https://bugs.webkit.org/show_bug.cgi?id=104434

        Reviewed by Eric Seidel.

        * Scripts/update-webkit:

2013-01-12  Alan Cutter  <alancutter@chromium.org>

        Migrate the remaining bots in EC2 to Google Compute Engine
        https://bugs.webkit.org/show_bug.cgi?id=106005

        Reviewed by Eric Seidel.

        Updated bot scripts for launching feeder-queue, style-queue and sheriffbot on GCE.

        * EWSTools/GoogleComputeEngine/build-feeder-style-sheriffbot.sh: Copied from Tools/EWSTools/build-repo.sh.
        * EWSTools/boot.sh:
        * EWSTools/build-repo.sh:
        * EWSTools/start-queue.sh:

2013-01-12  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move inspector related methods to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=106654

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestRunner::WebTestDelegate::showDevTools):
        (WebTestRunner::WebTestDelegate::closeDevTools):
        (WebTestRunner::WebTestDelegate::evaluateInWebInspector):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::showWebInspector):
        (WebTestRunner):
        (WebTestRunner::TestRunner::closeWebInspector):
        (WebTestRunner::TestRunner::evaluateInWebInspector):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::showDevTools):
        (WebViewHost::closeDevTools):
        (WebViewHost::evaluateInWebInspector):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-11  Julie Parent  <jparent@chromium.org>

        Builder should not be a valid parameter for stats dashboard
        https://bugs.webkit.org/show_bug.cgi?id=106698

        Reviewed by Dirk Pranke.
        
        Since builder is a dashboard specific parameter, dashboard_base
        should not be handling it in handleValidHashParameterWrapper, rather,
        each specific dashboard should in its handleValidHashParameter function.
    
        Note that the FIXME in dashboard_base about this was actually wrong -
        we don't want to move it to g_crossDashboardState, because it isn't
        actually cross dashboard state.
        
        In fact, flakiness and treemap have the code in 
        handleValidHashParameter, but it is currently dead code because 
        dashboard_base gets to it first.
        
        Added the proper handling to timeline_explorer, since builder is
        valid there.

        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/timeline_explorer.html:

2013-01-11  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION: buildbot mangles error messages with timestamps run-webkit-tests outputs
        https://bugs.webkit.org/show_bug.cgi?id=106688

        Reviewed by Eric Seidel.

        Update the regular expression used to strip the garbage at the beginning.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests.nrwt_log_message_regexp):

2013-01-11  Pratik Solanki  <psolanki@apple.com>

        TestRunner leaks when running tests
        https://bugs.webkit.org/show_bug.cgi?id=106683

        Reviewed by Simon Fraser.

        Remove extra ref() that we missed out on deleting when refactoring window.layoutTestController
        to window.testRunner in r124705. This caused the TestRunner object to be leaked when running
        tests.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::makeWindowObject):

2013-01-11  Julie Parent  <jparent@chromium.org>

        Dashboard Cleanup: Add isLoadingComplete to the loader.Loader object.
        https://bugs.webkit.org/show_bug.cgi?id=106247

        Old code nulled out the loader instance when it completed loading and
        then later used the fact that it was null to determine if it had loaded
        or not.  This is not only unintuitive, but it also prevents using the
        loader object later on.
        
        Added new method, used it, added unit test for it.
        
        Reviewed by Dirk Pranke.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (resourceLoadingComplete):
        (handleLocationChange):
        * TestResultServer/static-dashboards/loader.js:
        (.):
        * TestResultServer/static-dashboards/loader_unittests.js:

2013-01-11  Ryosuke Niwa  <rniwa@webkit.org>

        Try CRLF to LF change in r139407 again.

        * BuildSlaveSupport/delete-stale-build-files:
        (main):
        (webkitBuildDirectory):
        * BuildSlaveSupport/kill-old-processes:
        (main):

2013-01-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Disable the unit tests timeout when running from make check
        https://bugs.webkit.org/show_bug.cgi?id=106670

        Reviewed by Philippe Normand.

        * GNUmakefile.am: Pass --timeout=-1 to run-gtk-test.

2013-01-11  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Yet another unreviewed fix after r139431.

        * Scripts/run-launcher: Pass the arguments to `jhbuild-wrapper' in
        the correct order.

2013-01-11  Dan Carney  <dcarney@google.com>

        [chromium] move some whitespace and resize related methods to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=106655

        Reviewed by Jochen Eisinger.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebKit):
        (WebTestRunner::WebTestDelegate::setClientWindowRect):
        (WebTestRunner::WebTestDelegate::setSelectTrailingWhitespaceEnabled):
        (WebTestRunner::WebTestDelegate::setSmartInsertDeleteEnabled):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::setSmartInsertDeleteEnabled):
        (WebTestRunner):
        (WebTestRunner::TestRunner::setSelectTrailingWhitespaceEnabled):
        (WebTestRunner::TestRunner::enableAutoResizeMode):
        (WebTestRunner::TestRunner::disableAutoResizeMode):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::setClientWindowRect):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-11  Mario Sanchez Prada  <mario.prada@samsung.com>

        Unreviewed. Update my e-mail addresses.

        * Scripts/webkitpy/common/config/committers.py:

2013-01-11  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Another unreviewed fix after r139431.

        In a way, this is also a generic bug fix, since previously isEfl()
        would fail when called from run-efl-tests and we thus did not use
        jhbuild to run our tests. This now resulted in us calling
        "jhbuild-wrapper run" without specifying a platform.

        * Scripts/run-efl-tests: Pass "--efl" to ARGV manually for isEfl()
        to work.

2013-01-11  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt][WK1] Web Audio support
        https://bugs.webkit.org/show_bug.cgi?id=106651

        Reviewed by Jocelyn Turcotte.

        Implements support for dumping audio data in DumpRenderTree.

        Adds WebAudio to toggleable features in QtTestBrowser.

        Enables LEGACY_WEB_AUDIO. This feature is required for 2/3 of the web audio regression tests. It is enabled by default
        because it has no effect when WEB_AUDIO is not enabled. This combination matches the settings in FeatureList.pm.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::reset):
        (TestRunner::overridePreference):
        (TestRunner::setAudioData):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner::shouldDumpAsAudio):
        (TestRunner::audioData):
        (TestRunner):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::applyPrefs):
        (LauncherWindow::createChrome):
        (LauncherWindow::toggleWebAudio):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        (WindowOptions):
        (LauncherWindow):
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/features.pri:

2013-01-11  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Unreviewed jhbuild-related fix after r139431.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort.__init__): Pass a string to set_option_default(), since
        shlex.split() will be called on it later.

2013-01-11  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed typo fixes after r139431.

        * Scripts/run-javascriptcore-tests:

2013-01-11  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [jhbuild] Remove the "run-with-jhbuild" scripts.
        https://bugs.webkit.org/show_bug.cgi?id=106572

        Reviewed by Martin Robinson.

        Both ports which use jhbuild were mostly duplicating the
        `run-with-jhbuild' script in their own directories for no clear reason.

        The script itself was just a thin wrapper around the `jhbuild-wrapper',
        so just start using that directly and get rid of a useless middle man.

        Adjust scripts which called run-with-jhbuild to call jhbuild-wrapper
        instead.

        * Scripts/run-javascriptcore-tests:
        * Scripts/run-launcher:
        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProjectIfNecessary):
        (buildAutotoolsProject):
        (jhbuildWrapperPrefixIfNeeded):
        (generateBuildSystemFromCMakeProject):
        (buildCMakeGeneratedProject):
        * Scripts/webkitpy/common/multiprocessing_bootstrap.py:
        (run):
        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort.__init__):
        (EflPort._image_diff_command):
        * efl/run-with-jhbuild: Removed.
        * gtk/run-with-jhbuild: Removed.

2013-01-11  Alan Cutter  <alancutter@chromium.org>

        Allow arbitrary queue launch parameters in EWSTools/start-queue.sh
        https://bugs.webkit.org/show_bug.cgi?id=106636

        Reviewed by Adam Barth.

        This parameter will allow the bot boot script to use start-queue.sh and provide an IRC password for sheriffbot.

        * EWSTools/GoogleComputeEngine/build-chromium-ews.sh:
        * EWSTools/GoogleComputeEngine/build-commit-queue.sh:
        * EWSTools/screen-config:
        * EWSTools/start-queue.sh:

2013-01-10  Ryosuke Niwa  <rniwa@webkit.org>

        kill-old-processes and delete-stale-build-files use CRLF linebreaks
        https://bugs.webkit.org/show_bug.cgi?id=106622

        Reviewed by Simon Fraser.

        Use LF instead of CRLF in kill-old-processes and delete-stale-build-files.
        Also escape clang\+\+ correctly in kill-old-processes.

        * BuildSlaveSupport/delete-stale-build-files:
        * BuildSlaveSupport/kill-old-processes:

2013-01-10  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r139357. It was missing a comma.

        * QueueStatusServer/model/queues.py:
        (Queue):

2013-01-10  Tim 'mithro' Ansell  <mithro@mithis.com>

        Fixing AuthenticationError when running test-webkitpy as a non-committer.
        https://bugs.webkit.org/show_bug.cgi?id=106420

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.push_local_commits_to_server):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVNRepository):
        (SVNRepository.has_authorization_for_realm):

2013-01-10  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][jhbuild] Use tarballs for gstreamer instead of git
        https://bugs.webkit.org/show_bug.cgi?id=106552

        Reviewed by Laszlo Gombos.

        Use tarballs for gstreamer instead of git in EFL's jhbuild
        to work around intermittent network issues on our build
        bots. Tarballs are fully cached and require no network
        operation if their checksum matches.

        * efl/jhbuild.modules:

2013-01-10  Ryosuke Niwa  <rniwa@webkit.org>

        Add Mac WK2 EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=106590

        Reviewed by Adam Barth.

        Added MacWK2EWS, and made myself a watcher for MacEWS and MacWK2EWS.
        Also add a deprecated MacWK2Port class.

        * QueueStatusServer/model/queues.py:
        (Queue):
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.port):
        (MacWK2Port):
        (MacWK2Port.run_webkit_tests_command):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (MacEWS):
        (MacWK2EWS):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (_test_ewses):

2013-01-10  Dan Carney  <dcarney@google.com>

        [chromium] move webpermissionclient related methods to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=106548

        Reviewed by Jochen Eisinger.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestRunner::WebTestDelegate::normalizeLayoutTestURL):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebKit):
        (WebTestRunner::WebTestRunner::webPermissions):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::setDelegate):
        (WebTestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::webPermissions):
        (WebTestRunner::TestRunner::dumpPermissionClientCallbacks):
        (WebTestRunner::TestRunner::setImagesAllowed):
        (WebTestRunner::TestRunner::setScriptsAllowed):
        (WebTestRunner::TestRunner::setStorageAllowed):
        (WebTestRunner::TestRunner::setPluginsAllowed):
        (WebTestRunner::TestRunner::setAllowDisplayOfInsecureContent):
        (WebTestRunner::TestRunner::setAllowRunningOfInsecureContent):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebTestRunner):
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebPermissions.cpp: Renamed from Tools/DumpRenderTree/chromium/WebPermissions.cpp.
        (WebTestRunner):
        (WebTestRunner::WebPermissions::WebPermissions):
        (WebTestRunner::WebPermissions::~WebPermissions):
        (WebTestRunner::WebPermissions::allowImage):
        (WebTestRunner::WebPermissions::allowScriptFromSource):
        (WebTestRunner::WebPermissions::allowStorage):
        (WebTestRunner::WebPermissions::allowPlugins):
        (WebTestRunner::WebPermissions::allowDisplayingInsecureContent):
        (WebTestRunner::WebPermissions::allowRunningInsecureContent):
        (WebTestRunner::WebPermissions::setImagesAllowed):
        (WebTestRunner::WebPermissions::setScriptsAllowed):
        (WebTestRunner::WebPermissions::setStorageAllowed):
        (WebTestRunner::WebPermissions::setPluginsAllowed):
        (WebTestRunner::WebPermissions::setDisplayingInsecureContentAllowed):
        (WebTestRunner::WebPermissions::setRunningInsecureContentAllowed):
        (WebTestRunner::WebPermissions::setDelegate):
        (WebTestRunner::WebPermissions::setDumpCallbacks):
        (WebTestRunner::WebPermissions::reset):
        * DumpRenderTree/chromium/TestRunner/src/WebPermissions.h: Renamed from Tools/DumpRenderTree/chromium/WebPermissions.h.
        (WebTestRunner):
        (WebPermissions):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        (TestShell::resetTestController):
        (TestShell::createNewWindow):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::normalizeLayoutTestURL):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-10  Alan Cutter  <alancutter@chromium.org>

        Split EWS tool cold-boot.sh into modular components
        https://bugs.webkit.org/show_bug.cgi?id=106527

        Reviewed by Adam Barth.

        Split cold-boot.sh script up into build-vm.sh, build-repo.sh and build-boot-cmd.sh.
        Updated GCE bot build scripts to match.
        Unable to test scripts directly as they depend on being in the repository to work!

        * EWSTools/GoogleComputeEngine/build-chromium-ews.sh:
        * EWSTools/GoogleComputeEngine/build-commit-queue.sh:
        * EWSTools/build-boot-cmd.sh: Copied from Tools/EWSTools/GoogleComputeEngine/build-chromium-ews.sh.
        * EWSTools/build-repo.sh: Copied from Tools/EWSTools/cold-boot.sh.
        * EWSTools/build-vm.sh: Renamed from Tools/EWSTools/cold-boot.sh.

2013-01-10  Julie Parent  <jparent@chromium.org>

        Dashboard Cleanup: Do not generate the page if we are about to reload.
        https://bugs.webkit.org/show_bug.cgi?id=106584

        Reviewed by Dirk Pranke.

        Move the logic to determine if we should generate the page into
        parseParameters() since that is where we have the knowledge to
        determine it, and return that value to handleLocationChange, 
        rather than passing the changed parameters back to handleLocationChange
        and having it make the decision.
        
        This is logically equivalent, save one case: when we are about to do
        a reload, we know that there is no reason to generate the page.  Old
        code was causing an extra page generation in this case.
        
        * TestResultServer/static-dashboards/dashboard_base.js:
        (parseParameters):
        (handleLocationChange):

2013-01-10  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [jhbuild] Use the "configure" script to build glib
        https://bugs.webkit.org/show_bug.cgi?id=106569

        Reviewed by Martin Robinson.

        So far both EFL and GTK have been using autogen.sh to build glib.
        While that does work most of the time, it's not really needed since
        we are downloading and building stable releases from tarballs.
        Additionally, autogen.sh fails to work with automake 1.13 due to the
        usage of some macros that have been removed (this has already been
        fixed in glib master).

        * efl/jhbuild.modules:
        * gtk/jhbuild.modules:

2013-01-10  Tim 'mithro' Ansell  <mithro@mithis.com>

        Changing tests to be consistent and use self.scm rather then recreating the scm object.
        (Missed a couple)
        https://bugs.webkit.org/show_bug.cgi?id=106536

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:

2013-01-10  Tony Chang  <tony@chromium.org>

        Speed up supplemental dependency computation
        https://bugs.webkit.org/show_bug.cgi?id=106503

        Reviewed by Adam Barth.

        Pass the IDL attributes file for generating the bindings in WebKitTestRunner.

        * WebKitTestRunner/CMakeLists.txt:

2013-01-10  Zan Dobersek  <zandobersek@gmail.com>

        Remove the ENABLE_ANIMATION_API feature define occurences
        https://bugs.webkit.org/show_bug.cgi?id=106544

        Reviewed by Simon Fraser.

        The Animation API code was removed in r137243. The ENABLE_ANIMATION_API
        feature define handling still lingers in various build systems and configurations
        but is of no use, so it should be removed.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2013-01-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add support for loading web process extensions
        https://bugs.webkit.org/show_bug.cgi?id=105631

        Reviewed by Gustavo Noronha Silva.

        * MiniBrowser/gtk/GNUmakefile.am:
        * MiniBrowser/gtk/main.c:
        (main): Set WEBKIT_INJECTED_BUNDLE env var to use the injected
        bundle lib from build dir.
        * Scripts/webkitpy/style/checker.py: Add exceptions for GTK+ API
        located in WebProcess/InjectedBundle/API/gtk.
        * gtk/generate-gtkdoc:
        (get_webkit2_options): Scan also files in
        WebProcess/InjectedBundle/API/gtk to generate API docs.
        (get_webkit2_options.injected_bundle_src_path): Helper function to
        build paths in WebProcess/InjectedBundle/API/gtk.

2013-01-10  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Writing immediately to created windows (open) fails
        https://bugs.webkit.org/show_bug.cgi?id=105276

        Reviewed by Kenneth Rohde Christiansen.

        Do not reset 'about:blank' url for the new pages in mini browser.

        * MiniBrowser/efl/main.c:
        (window_create):

2013-01-10  Tim 'mithro' Ansell  <mithro@mithis.com>

        Changing tests to be consistent and use self.scm rather then recreating the scm object.
        https://bugs.webkit.org/show_bug.cgi?id=106536

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:

2013-01-10  Tim 'mithro' Ansell  <mithro@mithis.com>

        Converting to unittest2 so we can use assertItemsEqual, making tests
        not dependent on order of items.
        https://bugs.webkit.org/show_bug.cgi?id=106532

        Before:
        Ran 1733 tests in 38.385s
        FAILED (failures=1, errors=22)

        After:
        Ran 1733 tests in 32.298s
        FAILED (failures=0, errors=22)

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_unittest2):

2013-01-10  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Add gstreamer 1.0.5 to jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=106178

        Reviewed by Laszlo Gombos.

        Add gstreamer 1.0.5 to EFL's jhbuild configuration.

        * efl/jhbuild.modules:

2013-01-09  Alan Cutter  <alancutter@chromium.org>

        Updated parameters in GCE build scripts so they now work.
        https://bugs.webkit.org/show_bug.cgi?id=106523

        Reviewed by Adam Barth.

        * EWSTools/GoogleComputeEngine/build-chromium-ews.sh:
        * EWSTools/GoogleComputeEngine/build-commit-queue.sh:
        * EWSTools/cold-boot.sh:

2013-01-09  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Remove some stray references to WebKitPlatformSupport.h in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=106520

        Reviewed by James Robinson.

        Part of a larger refactoring series. See tracking bug 82948.

        * DumpRenderTree/chromium/WebThemeEngineDRTMac.h:
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm:

2013-01-09  Julie Parent  <jparent@chromium.org>

        Dashboard cleanup: Remove code for currentState and window.location.hash getting out of state
        https://bugs.webkit.org/show_bug.cgi?id=106514

        This is old code, as these can no longer get out of sync.
        permmaLinkURLHash is generated from currentState, which is set only
        from the location.  The commment about how these can get out of sync
        refers to a function that no longer exists.
        
        Reviewed by Dirk Pranke.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (handleLocationChange):

2013-01-09  Julie Parent  <jparent@chromium.org>

        Dashboard Cleanup: Reload the page as soon as we know we need to.
        https://bugs.webkit.org/show_bug.cgi?id=106515

        No need to continue parsing all of the data once we know that
        we need to do a reload.
        
        Reviewed by Dirk Pranke.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (parseParameters):

2013-01-09  Eric Seidel  <eric@webkit.org>

        run-perf-tests --chromium-android --profile should show symbols for the kernel
        https://bugs.webkit.org/show_bug.cgi?id=106498

        Reviewed by Adam Barth.

        Turns out this was easy, once I finally read the output from "perf report".
        It appears there may be a bug in "perf record" on android, as it complains
        about not being able to read from /proc/kallsyms even when
        /proc/sys/kernel/kptr_restrict is 0.  For now I've not bothered
        to keep /proc/sys/kernel/kptr_restrict as 0 during the actual record
        but rather just flip it to 0 long enough to grab the /proc/kallsyms
        and then flip it back to whatever the device had.

        /proc/sys/kernel/kptr_restrict controls what /proc/kallsyms returns
        on Linux.  /proc/kallsyms contains a mapping of kernel addresses
        to symbol names.  Its world-readable, but will return all 0s if you
        don't have permission to see the kernel symbols.  kptr_restrict
        supports values 0, 1, 2.  Where 0 means "everyone can see the real symbols"
        1 is only a specific group, and 2 is "no one, not even root".
        By default kptr_restrict is 2 on Android it seems.
        More kptr_restrict docs: http://lwn.net/Articles/420403/

        I also took this opportunity to clean up how the perf record command
        was built for use/display in AndroidPerf.profile_after_exit and
        change to always using long-form names for the arguments (to hopefully help readability).

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (AndroidPerf.__init__):
        (profile_after_exit):
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._update_kallsyms_cache):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:

2013-01-09  Julie Parent  <jparent@chromium.org>

        Dashboard cleanup: remove dead code.
        https://bugs.webkit.org/show_bug.cgi?id=106509

        Reviewed by Dirk Pranke.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (parseParameters):

2013-01-09  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] accessibility/aria-labelledby-overrides-label.html requires a proper baseline
        https://bugs.webkit.org/show_bug.cgi?id=105638

        Reviewed by Martin Robinson.

        The test was failing for two reasons:
        - AccessibilityRenderObject::correspondingLabelForControlElement() was
          not ignoring the ARIA labelled-by property
        - AccessibilityController::accessibleElementById() was not implemented

        Because getting an element by ID cannot be done in the UIProcess, the
        decision was made to expose the element's ID as an accessible attribute
        of the object.

        In addition, fixing the bug in AccessibilityRenderObject made it possible
        to eliminate the Gtk platform-specific expectations for another test.

        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (childElementById): Added. Walks the tree looking for the AtkObject
        Attribute which exposes the HTML element's ID.
        (AccessibilityController::accessibleElementById): Implemented.
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::title): Modified to print out "AXTitle: " even
        when there is no title, as is done with the Mac port.
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        (WTR::childElementById): Added. Walks the tree looking for the AtkObject
        Attribute which exposes the HTML element's ID.
        (WTR):
        (WTR::AccessibilityController::accessibleElementById): Implemented.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::title): Modified to print out "AXTitle: "
        even when there is no title, as is done with the Mac port.

2013-01-09  Gregg Tavares  <gman@google.com>

        Add Gregg Tavares as a committer
        https://bugs.webkit.org/show_bug.cgi?id=106492

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py:

2013-01-09  Roger Fong  <roger_fong@apple.com>

        Enable seamless iFrames for Windows DRT.
        https://bugs.webkit.org/show_bug.cgi?id=106468.

        Rubberstamped by Timothy Horton.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):

2013-01-09  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Implement eventSender.scheduleAsynchronousKeyDown
        https://bugs.webkit.org/show_bug.cgi?id=93979

        Reviewed by Benjamin Poulain.

        Implement eventSender.scheduleAsynchronousKeyDown() in
        WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::createKeyDownMessageBody):
        (WTR::EventSendingController::keyDown):
        (WTR::EventSendingController::scheduleAsynchronousKeyDown):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        (EventSendingController):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveKeyDownMessageFromInjectedBundle):
        (WTR::TestController::didReceiveMessageFromInjectedBundle):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestController.h:
        (TestController):

2013-01-09  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move resource load callback dumping to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=106449

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebKit):
        (WebTestRunner::WebTestDelegate::makeURLErrorDescription):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestProxyBase):
        (WebTestRunner::WebTestProxy::assignIdentifierToRequest):
        (WebTestRunner::WebTestProxy::willRequestResource):
        (WebTestRunner::WebTestProxy::willSendRequest):
        (WebTestRunner::WebTestProxy::didReceiveResponse):
        (WebTestRunner::WebTestProxy::didFinishResourceLoad):
        (WebTestRunner::WebTestProxy::didFailResourceLoad):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner::WebTestRunner::shouldDumpResourceLoadCallbacks):
        (WebTestRunner::WebTestRunner::shouldDumpResourceRequestCallbacks):
        (WebTestRunner::WebTestRunner::shouldDumpResourceResponseMIMETypes):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::shouldDumpResourceLoadCallbacks):
        (WebTestRunner::TestRunner::shouldDumpResourceRequestCallbacks):
        (WebTestRunner::TestRunner::shouldDumpResourceResponseMIMETypes):
        (WebTestRunner):
        (WebTestRunner::TestRunner::dumpResourceLoadCallbacks):
        (WebTestRunner::TestRunner::dumpResourceRequestCallbacks):
        (WebTestRunner::TestRunner::dumpResourceResponseMIMETypes):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::reset):
        (WebTestRunner):
        (WebTestRunner::WebTestProxyBase::assignIdentifierToRequest):
        (WebTestRunner::WebTestProxyBase::willRequestResource):
        (WebTestRunner::WebTestProxyBase::willSendRequest):
        (WebTestRunner::WebTestProxyBase::didReceiveResponse):
        (WebTestRunner::WebTestProxyBase::didFinishResourceLoad):
        (WebTestRunner::WebTestProxyBase::didFailResourceLoad):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::willSendRequest):
        (WebViewHost::makeURLErrorDescription):
        (WebViewHost::reset):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-09  Dan Carney  <dcarney@google.com>

        [chromium] move dumpcreateview methods to testrunner library
        https://bugs.webkit.org/show_bug.cgi?id=106434

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner::WebTestRunner::shouldDumpCreateView):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::shouldDumpCreateView):
        (WebTestRunner):
        (WebTestRunner::TestRunner::dumpCreateView):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):

2013-01-09  Csaba Osztrogonác  <ossy@webkit.org>

        webkitpy cleanup: Merge additional_comment_text into comment_text
        https://bugs.webkit.org/show_bug.cgi?id=106421

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/committervalidator.py:
        (CommitterValidator.reject_patch_from_commit_queue):
        (CommitterValidator.reject_patch_from_review_queue):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.set_flag_on_attachment):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        (MockBugzilla.set_flag_on_attachment):
        * Scripts/webkitpy/tool/bot/feeders_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem._post_reject_message_on_bug):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2013-01-09  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Raise version of gdk-pixbuf in jhbuild up to 2.26.5
        https://bugs.webkit.org/show_bug.cgi?id=106464

        Reviewed by Martin Robinson.

        Current version in jhbuild.modules (2.26.0) is giving trouble to
        when trying to build WebKitGTK from scratch, due to a segmentation
        fault error in gdk-pixbuf-query-loader during the 'make'
        phase. Raising the version to 2.26.5 fixes this issue.

        * gtk/jhbuild.modules: Version raised, checksums updated.

2013-01-09  János Badics  <jbadics@inf.u-szeged.hu>

        [Qt][NRWT] Pass --timeout to DRT/WTR if a test is marked as SLOW.
        https://bugs.webkit.org/show_bug.cgi?id=90968.

        Reviewed by Csaba Osztrogonác.

        Added functionality in DRT and WTR to use any timeout value while running
        slow tests (eventually, any test). Now NRWT --time-out-ms determines the
        timeout value for the test. Added a flag in NRWT (supports_per_test_timeout)
        to indicate whether the current port supports setting timeout value
        per test (it's False by default; I enabled it only on Qt).
        Also corrected a typo in driver.py

        * DumpRenderTree/DumpRenderTree.h:
        (TestCommand::TestCommand):
        (TestCommand):
        * DumpRenderTree/DumpRenderTreeCommon.cpp:
        (parseInputLine):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::processLine):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.supports_per_test_timeout):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.run_test):
        (Driver._command_from_driver_input):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.supports_per_test_timeout):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::InjectedBundle):
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setCustomTimeout):
        (WTR):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):
        * WebKitTestRunner/InjectedBundle/qt/TestRunnerQt.cpp:
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::getCustomTimeout):
        (WTR):
        (WTR::TestCommand::TestCommand):
        (TestCommand):
        (WTR::parseInputLine):
        (WTR::TestController::runTest):
        (WTR::TestController::runUntil):
        * WebKitTestRunner/TestController.h:
        (TestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::setCustomTimeout):
        (WTR):
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/TestInvocation.h:
        (TestInvocation):

2013-01-08  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Regression(r138681): Add HAVE(ACCESSIBILITY) guard to atk files
        https://bugs.webkit.org/show_bug.cgi?id=106290

        Reviewed by Martin Robinson.

        Some atk files don't use HAVE(ACCESSIBILITY). It might make build errors when
        the macro isn't enabled.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2013-01-08  Martin Robinson  <mrobinson@igalia.com>

        WebKitTestRunner needs support for setHandlesAuthenticationChallenges
        https://bugs.webkit.org/show_bug.cgi?id=103653

        Reviewed by Anders Carlsson.

        Implement setHandlesAuthenticationChallenges in the UIProcess by sending credentials
        and the enabled boolean to the UIProcess and then implementing the didReceiveAuthenticationChallengeInFrame
        client callback.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: Exposed the new TestRunner
        methods to the JavaScript API.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setHandlesAuthenticationChallenges): Added this callback for the JavaScript API.
        (WTR::TestRunner::setAuthenticationUsername): Ditto.
        (WTR::TestRunner::setAuthenticationPassword): Ditto.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner): Added new declarations for the above.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions): Hook up the new didReceiveSynchronousMessageFromInjectedBundle
        callback.
        (WTR::TestController::resetStateToConsistentValues): Reset the credentials and enabled boolean between tests.
        (WTR::TestController::didReceiveAuthenticationChallengeInFrame): Handle the callback by using
        the authentication information passed from the InjectedBundle.
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::setHandlesAuthenticationChallenges): Added setter to allow TestInvocation
        to communicate with the TestController.
        (WTR::TestController::setAuthenticationUsername): Ditto.
        (WTR::TestController::setAuthenticationPassword): Ditto.
        (TestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): Handle the messages sending authentication
        information from the InjectedBundle.
        (WTR::TestInvocation::outputText): Added this method so that the TestController can output
        text to the TestInvocation text output.
        * WebKitTestRunner/TestInvocation.h:
        (TestInvocation): Added declaration for new method.

2013-01-08  Benjamin Poulain  <benjamin@webkit.org>

        Add myself as a watcher for Web Geolocation

        Unreviewed.

        * Scripts/webkitpy/common/config/watchlist:

2013-01-08  Zan Dobersek  <zandobersek@gmail.com>

        [webkitpy] Call setup_test_run method of the parent Port interface when method is called on subclasses
        https://bugs.webkit.org/show_bug.cgi?id=106364

        Reviewed by Eric Seidel.

        When the setup_test_run method is called on the subclasses of the base Port
        interface, the parent method should also be called via super(), despite the
        parent method not doing anything at the moment.

        The according calls to super() are required in the ChromiumPort, EflPort
        and GtkPort implementations.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.setup_test_run):
        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort.setup_test_run):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.setup_test_run):

2013-01-08  Julie Parent  <jparent@chromium.org>

        Dashboard cleanup: Remove globals g_buildersThatFailedToLoad and g_staleBuilders
        https://bugs.webkit.org/show_bug.cgi?id=106356

        g_buildersThatFailedToLoad and g_staleBuilders were globals defined in
        dashboard_base, assigned by Loader, and used only by dashboard_base to
        create error messages.  Moved the variables to be privates on the Loader
        object, moved error message creation to _getLoadingErrorMessages on the
        Loader object, and now pass the errors back to dashboard base via the
        resourceLoadingComplete callback.
        
        Also removed the now unused clearError function, it was only being used
        by unit tests to clean up global state.
        
        Reviewed by Dirk Pranke.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (resourceLoadingComplete):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        * TestResultServer/static-dashboards/loader.js:
        (.):
        * TestResultServer/static-dashboards/loader_unittests.js:

2013-01-08  Zan Dobersek  <zandobersek@gmail.com>

        [EFL][GTK] Make the PulseAudioSanitizer an object on the EflPort, GtkPort
        https://bugs.webkit.org/show_bug.cgi?id=106354

        Reviewed by Eric Seidel.

        Put the PulseAudioSanitizer object on the EflPort and GtkPort interfaces
        instead of those two inheriting from it. Also add a mock object of the
        sanitizer that's used in unit tests.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort):
        (EflPort.__init__):
        (EflPort.setup_test_run):
        (EflPort.clean_up_test_run):
        * Scripts/webkitpy/layout_tests/port/efl_unittest.py: Also correct the
        importing order.
        (EflPortTest.make_port): Put a mock PulseAudioSanitizer on the instance.
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort):
        (GtkPort.__init__):
        (GtkPort.setup_test_run):
        (GtkPort.clean_up_test_run):
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py: Also correct the
        importing order.
        (GtkPortTest.make_port): Put a mock PulseAudioSanitizer on the instance.
        * Scripts/webkitpy/layout_tests/port/pulseaudio_sanitizer.py:
        (PulseAudioSanitizer.unload_pulseaudio_module): Stylize the method as public.
        (PulseAudioSanitizer.restore_pulseaudio_module): Ditto.
        * Scripts/webkitpy/layout_tests/port/pulseaudio_sanitizer_mock.py: Added.
        (PulseAudioSanitizerMock): A simple mock interface for PulseAudioSanitizer.
        (PulseAudioSanitizerMock.unload_pulseaudio_module):
        (PulseAudioSanitizerMock.restore_pulseaudio_module):

2013-01-08  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move dumpFrameLoadCallbacks and friends to the TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=106324

        Reviewed by Adam Barth.

        Since the frame load callbacks are part of the WebFrameClient, the
        WebTestProxy is now intercepting both WebViewClient and WebFrameClient
        methods.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        (WebTestInterfaces):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestProxyBase):
        (WebTestRunner):
        (WebTestRunner::WebTestProxy::WebTestProxy):
        (WebTestProxy):
        (WebTestRunner::WebTestProxy::didInvalidateRect):
        (WebTestRunner::WebTestProxy::didScrollRect):
        (WebTestRunner::WebTestProxy::scheduleComposite):
        (WebTestRunner::WebTestProxy::scheduleAnimation):
        (WebTestRunner::WebTestProxy::setWindowRect):
        (WebTestRunner::WebTestProxy::show):
        (WebTestRunner::WebTestProxy::didAutoResize):
        (WebTestRunner::WebTestProxy::postAccessibilityNotification):
        (WebTestRunner::WebTestProxy::startDragging):
        (WebTestRunner::WebTestProxy::shouldBeginEditing):
        (WebTestRunner::WebTestProxy::shouldEndEditing):
        (WebTestRunner::WebTestProxy::shouldInsertNode):
        (WebTestRunner::WebTestProxy::shouldInsertText):
        (WebTestRunner::WebTestProxy::shouldChangeSelectedRange):
        (WebTestRunner::WebTestProxy::shouldDeleteRange):
        (WebTestRunner::WebTestProxy::shouldApplyStyle):
        (WebTestRunner::WebTestProxy::didBeginEditing):
        (WebTestRunner::WebTestProxy::didChangeSelection):
        (WebTestRunner::WebTestProxy::didChangeContents):
        (WebTestRunner::WebTestProxy::didEndEditing):
        (WebTestRunner::WebTestProxy::registerIntentService):
        (WebTestRunner::WebTestProxy::dispatchIntent):
        (WebTestRunner::WebTestProxy::willPerformClientRedirect):
        (WebTestRunner::WebTestProxy::didCancelClientRedirect):
        (WebTestRunner::WebTestProxy::didStartProvisionalLoad):
        (WebTestRunner::WebTestProxy::didReceiveServerRedirectForProvisionalLoad):
        (WebTestRunner::WebTestProxy::didFailProvisionalLoad):
        (WebTestRunner::WebTestProxy::didCommitProvisionalLoad):
        (WebTestRunner::WebTestProxy::didReceiveTitle):
        (WebTestRunner::WebTestProxy::didFinishDocumentLoad):
        (WebTestRunner::WebTestProxy::didHandleOnloadEvents):
        (WebTestRunner::WebTestProxy::didFailLoad):
        (WebTestRunner::WebTestProxy::didFinishLoad):
        (WebTestRunner::WebTestProxy::didChangeLocationWithinPage):
        (WebTestRunner::WebTestProxy::didDisplayInsecureContent):
        (WebTestRunner::WebTestProxy::didRunInsecureContent):
        (WebTestRunner::WebTestProxy::didDetectXSS):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner::WebTestRunner::setTestIsRunning):
        (WebTestRunner::WebTestRunner::shouldDumpFrameLoadCallbacks):
        (WebTestRunner::WebTestRunner::setShouldDumpFrameLoadCallbacks):
        (WebTestRunner::WebTestRunner::shouldDumpUserGestureInFrameLoadCallbacks):
        (WebTestRunner::WebTestRunner::stopProvisionalFrameLoads):
        (WebTestRunner::WebTestRunner::shouldDumpTitleChanges):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::setTestIsRunning):
        (WebTestRunner):
        (WebTestRunner::TestRunner::shouldDumpFrameLoadCallbacks):
        (WebTestRunner::TestRunner::setShouldDumpFrameLoadCallbacks):
        (WebTestRunner::TestRunner::shouldDumpUserGestureInFrameLoadCallbacks):
        (WebTestRunner::TestRunner::stopProvisionalFrameLoads):
        (WebTestRunner::TestRunner::shouldDumpTitleChanges):
        (WebTestRunner::TestRunner::dumpFrameLoadCallbacks):
        (WebTestRunner::TestRunner::dumpUserGestureInFrameLoadCallbacks):
        (WebTestRunner::TestRunner::setStopProvisionalFrameLoads):
        (WebTestRunner::TestRunner::dumpTitleChanges):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestInterfaces::Internal):
        (WebTestRunner::WebTestInterfaces::Internal::webView):
        (WebTestRunner::WebTestInterfaces::Internal::Internal):
        (WebTestRunner::WebTestInterfaces::Internal::setWebView):
        (WebTestRunner):
        (WebTestRunner::WebTestInterfaces::Internal::setTestIsRunning):
        (WebTestRunner::WebTestInterfaces::setWebView):
        (WebTestRunner::WebTestInterfaces::setTestIsRunning):
        (WebTestRunner::WebTestInterfaces::webView):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::willPerformClientRedirect):
        (WebTestRunner):
        (WebTestRunner::WebTestProxyBase::didCancelClientRedirect):
        (WebTestRunner::WebTestProxyBase::didStartProvisionalLoad):
        (WebTestRunner::WebTestProxyBase::didReceiveServerRedirectForProvisionalLoad):
        (WebTestRunner::WebTestProxyBase::didFailProvisionalLoad):
        (WebTestRunner::WebTestProxyBase::didCommitProvisionalLoad):
        (WebTestRunner::WebTestProxyBase::didReceiveTitle):
        (WebTestRunner::WebTestProxyBase::didFinishDocumentLoad):
        (WebTestRunner::WebTestProxyBase::didHandleOnloadEvents):
        (WebTestRunner::WebTestProxyBase::didFailLoad):
        (WebTestRunner::WebTestProxyBase::didFinishLoad):
        (WebTestRunner::WebTestProxyBase::didChangeLocationWithinPage):
        (WebTestRunner::WebTestProxyBase::didDisplayInsecureContent):
        (WebTestRunner::WebTestProxyBase::didRunInsecureContent):
        (WebTestRunner::WebTestProxyBase::didDetectXSS):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):
        (TestShell::testFinished):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didStartProvisionalLoad):
        (WebViewHost::didReceiveServerRedirectForProvisionalLoad):
        (WebViewHost::didFailProvisionalLoad):
        (WebViewHost::didCommitProvisionalLoad):
        (WebViewHost::didReceiveTitle):
        (WebViewHost::didFailLoad):
        (WebViewHost::didFinishLoad):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2013-01-08  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Lower the default timeout value for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=106353

        Reviewed by Dirk Pranke.

        The default timeout value for WebKitTestRunner should be lowered.
        The current value (80 seconds) is irrational and just leads to producing
        text failures for layout tests that genuinely time out. This just leads
        to more deviation from the GTK WK1 port in terms of test expectations.

        The value used is the same as when running the DumpRenderTree, that's
        6 seconds in release builds and 12 seconds in debug builds.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        (GtkPortTest.test_default_timeout_ms):

2013-01-08  Zan Dobersek  <zandobersek@gmail.com>

        test-webkitpy shows failure output on my linux box
        https://bugs.webkit.org/show_bug.cgi?id=101261

        Reviewed by Eric Seidel.

        Mock out the PulseAudioSanitizer methods when creating testing instances
        of EflPort and GtkPort interfaces in unit tests. This stops throwing up
        PulseAudio output when the sanitizer was trying to unload modules which
        were already unloaded by another unit test that was being run in parallel.

        * Scripts/webkitpy/layout_tests/port/efl_unittest.py:
        (EflPortTest):
        (EflPortTest.make_port):
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        (GtkPortTest):
        (GtkPortTest.make_port):

2013-01-08  Julie Parent  <jparent@chromium.org>

        Dashboard Cleanup: Remove g_hasDoneInitialPageGeneration
        https://bugs.webkit.org/show_bug.cgi?id=106254

        Remove the global variable g_hasDoneInitialPageGeneration.  It was used
        only to figure out if we should call addBuilderLoadErrors during
        handleLocationChange, which was called when the loader completed and on
        any hash change, but we only ever wanted to call addBuilderLoadErrors
        on the initial loader load.  Moved the call of addBuilderLoadErrors to
        resourceLoadingComplete rather than handleLocationChange, so now we
        only call it when we want to, and the check can go away completely.

        Reviewed by Dirk Pranke.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (addBuilderLoadErrors):
        (resourceLoadingComplete):
        (handleLocationChange):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:

2013-01-08  Dominic Mazzoni  <dmazzoni@google.com>

        Add aboxhall@chromium.org to accessibility watchlist.

        Unreviewed.

        * Scripts/webkitpy/common/config/watchlist:

2013-01-08  Dan Winship  <danw@gnome.org>

        Add Apache 2.4 support for Fedora 18
        https://bugs.webkit.org/show_bug.cgi?id=104478

        Reviewed by Martin Robinson.

        Apache 2.4's httpd.conf is slightly incompatible with 2.2's, so we
        need a separate config.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._apache_version):
        (Port._apache_config_file_name_for_platform):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/run-webkit-httpd:
        * Scripts/webkitperl/httpd.pm:
        (getApacheVersion):
        (getDefaultConfigForTestDirectory):
        (getHTTPDConfigPathForTestDirectory):

2013-01-08  Zan Dobersek  <zandobersek@gmail.com>

        Make the override-feature-defines script compatible with Python v3
        https://bugs.webkit.org/show_bug.cgi?id=105742

        Reviewed by Martin Robinson.

        Instead of printing output through a statement, use the print function and format
        the output using the str.format method. This makes the script runnable with Python v3.

        * gtk/override-feature-defines:
        (adjust_feature_defines_makefile):

2013-01-08  Heikki Paajanen  <heikki.paajanen@palm.com>

        [Qt] Fix libxml2 config test
        https://bugs.webkit.org/show_bug.cgi?id=106317

        Reviewed by Simon Hausmann.

        Don't assume standard include/libxml2, libxml-2.0.pc should know
        where it's headers are.

        * qmake/config.tests/libxml2/libxml2.cpp: Fix include

2013-01-08  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Make Tools/gtk/generate-gtkdoc compatible with Python 3
        https://bugs.webkit.org/show_bug.cgi?id=106195

        Reviewed by Philippe Normand.

        Perform changes in the generate-gtkdoc script and common and gtkdoc modules
        to make the Python code compatible with Python 3. This includes modifying
        print statements, exception handling, dictionary iteration and
        byte-sequence-to-string conversion.

        * gtk/common.py:
        (get_build_path):
        (pkg_config_file_variable):
        (gtk_version_of_pkg_config_file):
        * gtk/generate-gtkdoc:
        (print_missing_api):
        * gtk/gtkdoc.py:
        (GTKDoc.__init__):
        (GTKDoc._run_command):

2013-01-02  Steve Block  <steveblock@chromium.org>

        Add chromium.org email address for Steve Block.

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py:

2013-01-07  Filip Pizlo  <fpizlo@apple.com>

        Rationalize closure call heuristics and profiling
        https://bugs.webkit.org/show_bug.cgi?id=106270

        Reviewed by Oliver Hunt.
        
        Add ability to use display-profiler-output via a pipe, and add the ability to dump
        all generated code ('display *' or 'd *').

        * Scripts/display-profiler-output:

2013-01-07  Ryosuke Niwa  <rniwa@webkit.org>

        Sorted more xcodeproj files.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:

2013-01-07  Ryosuke Niwa  <rniwa@webkit.org>

        Sorted xcodeproj files.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2013-01-07  Dan Bernstein  <mitz@apple.com>

        [mac] WebKit1 clients can’t tell when a frame has been removed from the hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=106261

        Reviewed by Simon Fraser.

        Added a test for -[WebFrameLoadDelegate webView:didRemoveFrameFromHierarchy:].

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/WebViewDidRemoveFrameFromHierarchy.mm: Added.
        (-[DidRemoveFrameFromHierarchyFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[DidRemoveFrameFromHierarchyFrameLoadDelegate webView:didRemoveFrameFromHierarchy:]):
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2013-01-07  Ojan Vafai  <ojan@chromium.org>

        Add the Apple MountainLion bots to garden-o-matic.
        Eventually, we really should move away from hardcoding
        the list of bots.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:

2013-01-07  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move web audio related methods to testrunner library
        https://bugs.webkit.org/show_bug.cgi?id=106211

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebKit):
        (WebTestRunner::WebTestRunner::shouldDumpAsAudio):
        (WebTestRunner::WebTestRunner::audioData):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::shouldDumpAsAudio):
        (WebTestRunner):
        (WebTestRunner::TestRunner::audioData):
        (WebTestRunner::TestRunner::setAudioData):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dump):

2013-01-07  Mike West  <mkwst@chromium.org>

        Make the IFRAME_SEAMLESS flag runtime-enabled.
        https://bugs.webkit.org/show_bug.cgi?id=106213

        Reviewed by Ojan Vafai.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
            Ensure that seamless IFrames are enabled for layout tests in each of
            the ports that support seamless IFrames.

2013-01-07  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move dumpAsText and friends to the TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=106222

        Reviewed by Adam Barth.

        This moves dumpAsText, dumpChildFramesAsText, and dumpChildFrameScrollPositions to the TestRunner library.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h:
        (WebTestRunner::WebTestRunner::shouldDumpAsText):
        (WebTestRunner::WebTestRunner::setShouldDumpAsText):
        (WebTestRunner::WebTestRunner::shouldGeneratePixelResults):
        (WebTestRunner::WebTestRunner::setShouldGeneratePixelResults):
        (WebTestRunner::WebTestRunner::shouldDumpChildFrameScrollPositions):
        (WebTestRunner::WebTestRunner::shouldDumpChildFramesAsText):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::shouldDumpAsText):
        (WebTestRunner):
        (WebTestRunner::TestRunner::setShouldDumpAsText):
        (WebTestRunner::TestRunner::shouldGeneratePixelResults):
        (WebTestRunner::TestRunner::setShouldGeneratePixelResults):
        (WebTestRunner::TestRunner::shouldDumpChildFrameScrollPositions):
        (WebTestRunner::TestRunner::shouldDumpChildFramesAsText):
        (WebTestRunner::TestRunner::dumpAsText):
        (WebTestRunner::TestRunner::dumpChildFrameScrollPositions):
        (WebTestRunner::TestRunner::dumpChildFramesAsText):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):

2013-01-07  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix attempt after r138810.

        Apparently python 2.6 is really bad at floating point computation.

        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        (MainTest.test_run_memory_test):

2013-01-07  Ryosuke Niwa  <rniwa@webkit.org>

        Extract a class to represent a test result to simplify PerfTest.parse_output and PageLoadPerfTest._run_with_driver
        https://bugs.webkit.org/show_bug.cgi?id=106172

        Reviewed by Tony Chang.

        Extracted PerfTestMetric, which represents a test result and knows how to compute statistics and convert itself
        to a dictionary. A metric is a type of measurement each test makes such as "Time", "Malloc", and "JSHeap".
        A single test (e.g. html5-full-render.html) may have multiple metrics, each of which is reported as a separate
        test on perf-o-matic and perf. test's results page.

        Also, use python's compute_statistics instead of reading statistics off of DriverOutput to simplify the code.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTestMetric): Added.
        (PerfTestMetric.__init__): Added.
        (PerfTestMetric.metric): Added.
        (PerfTestMetric.has_values): Added.
        (PerfTestMetric.legacy_chromium_bot_compatible_test_name): Added. Following the legacy convention, "Malloc" and
        "JSHeap" will use "test_name:Malloc" whereas "Time" uses "test_name" itself. We should eventually move these
        conversions to be done on the client side (perf-o-matic and results page).
        (PerfTestMetric.append): Added.
        (PerfTestMetric.to_dict): Added. Computes the statistics and generates the dictionary object that represents
        a result for this metric.
        (PerfTestMetric.metric_to_unit): Added. Each metric maps to exactly one unit (it's not one-to-one).
        (PerfTestMetric.compute_statistics): Moved from PerfTest.

        (PerfTest._create_driver): Extracted from PerfTest.run.
        (PerfTest.run): Given an array of PerfTestMetric, generate the results dictionary. Also print out results
        as needed.
        (PerfTest._run_with_driver):
        (PerfTest): Removed _result_classes and _result_class_regex. "result class" is the old name for "metric".
        (PerfTest.parse_output): Dramatically simplified. We now just return an array of PerfTestMetric's. Also ignore
        all keys except "values". We rely on PerfTestMetric to compute the statistics for us.

        (ChromiumStylePerfTest.run): Added and merged _run_with_driver. Since chromium style perf tests are so different
        from other perf tests, there isn't much point in sharing the code here.

        (PageLoadingPerfTest._run_with_driver): Simplified. Just create an array of PerfTestMetric's without computing
        statistics for the measured values.

        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPerfTestMetric): Added.
        (TestPerfTestMetric.test_init_set_missing_unit): Added.
        (TestPerfTestMetric.test_legacy_chromium_bot_compatible_test_name): Added.
        (TestPerfTestMetric.test_has_values): Added.
        (TestPerfTestMetric.test_append): Added.
        (TestPerfTestMetric.test_compute_statistics.compute_statistics):
        (TestPerfTestMetric.test_compute_statistics): Added a trivial test case.

        (TestPerfTest._assert_results_are_correct): Updated as needed.
        (TestPageLoadingPerfTest.test_run): Ditto. Notice that we no longer log anything in _run_with_driver. It's done
        in PerfTest.run now after generating the results dictionary.
        (TestPageLoadingPerfTest.test_run_with_memory_output): Ditto.

2013-01-07  Julien Chaffraix  <jchaffraix@webkit.org>

        Support size_t multiplication and division operators on LayoutUnit
        https://bugs.webkit.org/show_bug.cgi?id=83848

        Reviewed by Emil A Eklund.

        * TestWebKitAPI/Tests/WebCore/LayoutUnit.cpp:
        Added some simple tests for the new operators using size_t.

2013-01-07  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] run-webkit-tests cleanup for parallel NRWT
        https://bugs.webkit.org/show_bug.cgi?id=106220

        Reviewed by Dirk Pranke.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort):
        (QtPort.default_child_processes):

2013-01-07  Philippe Normand  <pnormand@igalia.com>

        Create a GStreamerAudio watchlist and add myself to it.

        Unreviewed.

        * Scripts/webkitpy/common/config/watchlist:

2013-01-05  Ryosuke Niwa  <rniwa@webkit.org>

        Add svn:executable to a bunch of scripts in BuildSlaveSupport.
        Also removed the empty mac directory.

        * BuildSlaveSupport/built-product-archive: Added property svn:executable.
        * BuildSlaveSupport/download-built-product: Added property svn:executable.
        * BuildSlaveSupport/mac: Removed.
        * BuildSlaveSupport/test-result-archive: Added property svn:executable.

2013-01-04  Ryosuke Niwa  <rniwa@webkit.org>

        Add a script to delete stale zero-byte build files
        https://bugs.webkit.org/show_bug.cgi?id=106131

        Reviewed by Tony Chang.

        Delete zero-byte build files on Mac port for now. It doesn't do anything on other ports.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (DeleteStaleBuildFiles): Added.
        (Factory.__init__): Add DeleteStaleBuildFiles step.
        * BuildSlaveSupport/delete-stale-build-files: Added.
        (main): Delete zero-byte files except ones intentionally generated by our build process.
        (webkitBuildDirectory): Copied from build-product-archive.

2013-01-04  Michael Pruett  <michael@68k.org>

        [GTK] Fix build error on GTK due to r138836
        https://bugs.webkit.org/show_bug.cgi?id=106154

        Reviewed by Kentaro Hara.

        * GNUmakefile.am:

2013-01-04  Dan Bernstein  <mitz@apple.com>

        [mac] WebKit1 has no equivalent of WKBundleNodeHandleCopyHTMLTableCellElementCellAbove
        https://bugs.webkit.org/show_bug.cgi?id=106121

        Reviewed by Adele Peterson.

        Added test for -[DOMTHMLTableCellElement _cellAbove].

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/DOMHTMLTableCellCellAbove.mm: Added.
        (-[HTMLTableCellElementCellAboveTest webView:didFinishLoadForFrame:]):
        (TestWebKitAPI):
        (TestWebKitAPI::expectCellAboveCell):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/DOMHTMLTableCellElementCellAbove.html: Added.

2013-01-04  Eric Seidel  <eric@webkit.org>

        FlakyTestReporter should be re-enabled and taught how to post patches
        https://bugs.webkit.org/show_bug.cgi?id=103839

        Reviewed by Adam Barth.

        This moves LayoutTestResultsReader off of the DeprecatedPort object.
        It also adds a real Port object to the EWS and CommitQueue objects
        using a new PatchProcessingQueue superclass.
        PatchProcessingQueue doesn't seem to be the cleanest insertion point
        but works for this purpose.
        I also moved _upload_results_archive_for_patch into PatchProcessingQueue
        to resolve a FIXME.

        This required some hacks/shiming between the non-specific "old"
        port names which the EWS system is currently using, and the new
        port objects.  This shimming is done in PatchProcessingQueue._new_port_name_from_old.

        Hopefully this will fix the flaky test reporter and results uploading.
        Certainly it's another small step towards getting rid of the old ports.py
        infrastructure and making the NRWT Port class common webkitpy infrastructure.

        Now that DeprecatedPort is no longer used for the results directory
        I removed all the explicit results-dir code which webkit-patch was using
        in --non-interactive mode to tell NRWT to use a results-dir it understood. :)

        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.run_perl_unittests_command):
        * Scripts/webkitpy/common/config/ports_mock.py:
        (MockPort.name):
        * Scripts/webkitpy/common/system/outputcapture.py:
        (OutputCapture.assert_outputs):
        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.determine_full_port_name):
        * Scripts/webkitpy/tool/bot/layouttestresultsreader.py:
        (LayoutTestResultsReader.__init__):
        (LayoutTestResultsReader):
        (LayoutTestResultsReader._read_file_contents):
        (LayoutTestResultsReader._create_layout_test_results):
        (LayoutTestResultsReader._create_unit_test_results):
        (LayoutTestResultsReader.results):
        (LayoutTestResultsReader.archive):
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        (LayoutTestResultsReaderTest.test_missing_layout_test_results):
        (LayoutTestResultsReaderTest.test_create_unit_test_results):
        (test_missing_unit_test_results_path):
        (test_layout_test_results):
        (test_archive_last_layout_test_results):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem):
        (AbstractEarlyWarningSystem.__init__):
        (AbstractEarlyWarningSystem.begin_work_queue):
        (AbstractEarlyWarningSystem.run_command):
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractPatchQueue.work_item_log_path):
        (PatchProcessingQueue):
        (PatchProcessingQueue._new_port_name_from_old):
        (PatchProcessingQueue.begin_work_queue):
        (PatchProcessingQueue._upload_results_archive_for_patch):
        (CommitQueue):
        (CommitQueue.begin_work_queue):
        (CommitQueue.run_command):
        (AbstractReviewQueue):
        (AbstractReviewQueue.__init__):
        (AbstractReviewQueue.begin_work_queue):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (AbstractPatchQueueTest.test_next_patch):
        (PatchProcessingQueueTest):
        (PatchProcessingQueueTest.test_upload_results_archive_for_patch):
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:

2013-01-04  Dana Jansens  <danakj@chromium.org>

        [chromium] Remove lost-compositor-context layout tests
        https://bugs.webkit.org/show_bug.cgi?id=106089

        Reviewed by James Robinson.

        Remove the loseCompositorContext() test function.

        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):

2013-01-04  Adam Klein  <adamk@chromium.org>

        Remove ENABLE_MUTATION_OBSERVERS #define
        https://bugs.webkit.org/show_bug.cgi?id=105459

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2013-01-04  Ryosuke Niwa  <rniwa@webkit.org>

        Statistics used in perftest_unittest.py and perftest_integrationtest.py are bogus
        https://bugs.webkit.org/show_bug.cgi?id=106078

        Reviewed by Tony Chang.

        This patch updates values for individual iterations in dummy performance tests used in
        perftest_unittest.py and perftest_integrationtest.py so that they match up with
        statistics such as stdev and median reported in those tests. This change is required
        to resolve the bug 97510.

        This patch also refactors integration tests by extracting *TestData classes that
        centralizes the definitions of each dummy performance test's text (DRT output),
        runner output, and parsed results (JSON) so that we may share more data between
        python tests.

        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (MainTest._assert_results_are_correct): Extracted from test_parse_output.
        Use self.assertAlmostEqual when comparing the standard deviation.
        (MainTest.test_parse_output):
        (test_parse_output_with_failing_line):
        (test_parse_output_with_description): Use _assert_results_are_correct.
        (test_parse_output_with_subtests): Ditto.

        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        (InspectorPassTestData): Extracted from tests below.
        (EventTargetWrapperTestData): Ditto.
        (SomeParserTestData): Ditto.
        (MemoryTestData): Ditto.
        (TestDriver.run_test): Moved test definitions out of the method.
        (MainTest._normalize_output): Truncate standard deviations at 5th decimal point.
        (MainTest._load_output_json): Extracted from create_runner.
        (MainTest.create_runner):
        (MainTest.test_run_test_set_for_parser_tests):
        (MainTest.test_run_memory_test):
        (MainTest._test_run_with_json_output):
        (MainTest.test_run_with_json_output):
        (MainTest.test_run_with_description):
        (MainTest.test_run_generates_json_by_default):
        (MainTest.test_run_merges_output_by_default):
        (MainTest.test_run_respects_reset_results):
        (MainTest.test_run_generates_and_show_results_page):
        (MainTest.test_run_with_slave_config_json):
        (MainTest.test_run_with_multiple_repositories):

2013-01-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] Clicking on a word that is selected in an editable area deletes it
        https://bugs.webkit.org/show_bug.cgi?id=106045

        Reviewed by Carlos Garcia Campos.

        Update test results to confirm that compositions without preedits do not trigger
        a composition confirmation.

        * TestWebKitAPI/Tests/gtk/InputMethodFilter.cpp:
        (TestWebKitAPI::verifyCanceledComposition):

2013-01-04  Sailesh Agrawal  <sail@chromium.org>

        [Mac] [WK2] platform/mac/fast/events/numpad-keycode-mapping.html fails
        https://bugs.webkit.org/show_bug.cgi?id=105958

        Reviewed by Alexey Proskuryakov.

        Ported code from DumpRenderTree to WebKitTestRunner to map all numpad keys.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (KeyMappingEntry):
        (WTR):
        (WTR::EventSenderProxy::keyDown): Added all numpad keys.

2013-01-03  Chris Fleizach  <cfleizach@apple.com>

        REGRESSION: [Mac] Intermittent crash in WTR::AccessibilityUIElement::isEqual
        https://bugs.webkit.org/show_bug.cgi?id=106073

        Reviewed by Ryosuke Niwa.

        Check that the element being compared to is not nil. 
        This crash is happening because one of the accessibility tests does an isEqual comparison within a callback function.
        It looks like occasionally, one of the elements passed in to the isEqual is nil because the notification handler is on the accessibility
        controller, and the notification is being delivered after the document objects are cleared. This shouldn't happen but I've seen it 
        sometimes before on parallel WebKitTestRunner runs.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::isEqual):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::isEqual):

2013-01-03  Tim 'mithro' Ansell  <mithro@mithis.com>

        Downloads can be flaky, so try downloading multiple times.
        https://bugs.webkit.org/show_bug.cgi?id=105976

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._download_to_stream):

2013-01-03  Eric Seidel  <eric@webkit.org>

        Rename Tool.port to deprecated_port in preparation for removing more callers
        https://bugs.webkit.org/show_bug.cgi?id=106076

        Reviewed by Ryosuke Niwa.

        This resolves a long-standing FIXME to rename this method. :)

        * Scripts/webkitpy/tool/bot/botinfo.py:
        (BotInfo.summary_text):
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Rollout._update_working_copy):
        * Scripts/webkitpy/tool/bot/layouttestresultsreader.py:
        (LayoutTestResultsReader._create_layout_test_results):
        (LayoutTestResultsReader._create_unit_test_results):
        (LayoutTestResultsReader._results_directory):
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        (test_missing_unit_test_results_path):
        * Scripts/webkitpy/tool/main.py:
        (WebKitPatch.deprecated_port):
        * Scripts/webkitpy/tool/mocktool.py:
        (MockTool.deprecated_port):
        * Scripts/webkitpy/tool/steps/build.py:
        (Build.build):
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        (CheckStyle.run):
        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit._check_test_expectations):
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        (PrepareChangeLog.run):
        * Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py:
        (PrepareChangeLogForDEPSRoll.run):
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        (PrepareChangeLogForRevert.run):
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest.test_runtests_args):
        * Scripts/webkitpy/tool/steps/update.py:
        (Update._update_command):

2013-01-03  Eric Seidel  <eric@webkit.org>

        Add myself to the webkitpy watchlist.

        Unreviewed.

        * Scripts/webkitpy/common/config/watchlist:

2013-01-03  Ryosuke Niwa  <rniwa@webkit.org>

        Cleanup perftest* tests and add a test for computing statistics
        https://bugs.webkit.org/show_bug.cgi?id=105685

        Reviewed by Eric Seidel.

        Add a test for PerfTest.compute_statistics (moved and renamed from PageLoadingPerfTest.calculate_statistics) and
        extracted perftestsrunner_itegrationtests.py from perftestsrunner_unittests.py.

        Also fixed a bug in compute_statistics that the mean ('avg') value can have a large rounding errors in some cases.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest.compute_statistics): Moved from PageLoadingPerfTest to prepare for the bug 97510. Also compute the mean
        directly from sorted_values instead of using the one from Knuth's online algorithm. This approach gives more
        accurate result for the mean.
        (PageLoadingPerfTest.run_single):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (MainTest.test_compute_statistics):
        (MainTest.test_compute_statistics.compute_statistics): Added.
        (TestPageLoadingPerfTest.test_run): floatify values.
        (TestPageLoadingPerfTest.test_run_with_memory_output): Ditto. Also got rid of ".0" from mean values now that Python
        correctly recognizes them as integers.

        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py: Copied from
        Tools/Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py.
        (TestDriver): Moved out of MainTest.
        (MainTest): Got rid of assertWritten and all unit tests.
        (MainTest._normalize_output): Renamed from normalizeFinishedTime to match the PEP8 naming convention.
        (MainTest.test_run_test_set_kills_drt_per_run.TestDriverWithStopCount):
        (MainTest.test_run_test_set_for_parser_tests):
        (MainTest.test_run_memory_test):
        (MainTest._test_run_with_json_output):
        (MainTest.test_run_generates_json_by_default):
        (MainTest.test_run_merges_output_by_default):
        (MainTest.test_run_respects_reset_results):
        (MainTest.test_run_generates_and_show_results_page): Use runner.load_output_json() instead of manually loading and
        parsing output JSON files. Just verify that the output path is correct instead.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest): Removed all integration tests.
        (MainTest.create_runner): Simplified.

2013-01-03  Julie Parent  <jparent@chromium.org>

        Dashboard cleanup: remove usage of global g_defaultBuilderName
        https://bugs.webkit.org/show_bug.cgi?id=106043

        Use now public defaultBuilder() from the BuilderGroup, rather
        than global variable.

        Also eliminates the setup() and initBuilders() functions since we
        no longer need to track the global.

        Reviewed by Adam Barth.

        * TestResultServer/static-dashboards/builders.js:
        (BuilderGroup.prototype.defaultBuilder):
        (BuilderGroup.prototype.master):
        * TestResultServer/static-dashboards/dashboard_base.js:
        (parseParameters):
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (updateDefaultBuilderState):
        * TestResultServer/static-dashboards/loader.js:
        (.):
        * TestResultServer/static-dashboards/loader_unittests.js:

2013-01-03  Ryosuke Niwa  <rniwa@webkit.org>

        Disable an intermittently failing unit test for now.
        The failure is tracked by the bug 106051.

        * TestWebKitAPI/Tests/mac/MemoryCachePruneWithinResourceLoadDelegate.mm:
        (TestWebKitAPI::TEST):

2013-01-03  Dan Bernstein  <mitz@apple.com>

        No way to obtain a DOMNode given a JS wrapper for a Node
        https://bugs.webkit.org/show_bug.cgi?id=106033

        Added a test for +[DOMNode _nodeFromJSWrapper:].

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/DOMNodeFromJSObject.mm: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2013-01-03  Emil A Eklund  <eae@chromium.org>

        Fix overflow in LayoutUnit::ceil and floor for SATURATED_LAYOUT_ARITHMETIC
        https://bugs.webkit.org/show_bug.cgi?id=105961

        Reviewed by Levi Weintraub.
        
        Add tests for LayoutUnit::ceil and floor.

        * TestWebKitAPI/Tests/WebCore/LayoutUnit.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI):

2013-01-03  Julie Parent  <jparent@chromium.org>

        Add unit test for default builder for the dashboards.
        https://bugs.webkit.org/show_bug.cgi?id=105972

        Reviewed by Dirk Pranke.

        * TestResultServer/static-dashboards/loader_unittests.js:

2013-01-03  Tony Chang  <tony@chromium.org>

        Generate internal.settings from Settings.in
        https://bugs.webkit.org/show_bug.cgi?id=104740

        Reviewed by Adam Barth.

        * GNUmakefile.am: Compile new generated files on GTK+.
        * qmake/mkspecs/features/default_post.prf: Qt: Make it so an action
        with both extra_sources and add_output_to_sources=false will still
        compile the files in extra_sources. This makes it possible to compile
        InternalSettingsGenerated.cpp and not be confused by
        InternalSettingsGenerated.idl.

2013-01-03  Zan Dobersek  <zandobersek@gmail.com>

        [style] WebIDL-reflecting uppercase enums reported as style violation
        https://bugs.webkit.org/show_bug.cgi?id=105832

        Reviewed by Tony Chang.

        Recognize the enum as WebIDL-reflecting one if there's a comment present that
        indicates this. In enums spanning over multiple lines, the comment is expected
        on the first line. In enums placed in one line, the comment is expected at the
        end of that line.

        WebIDL-reflecting enum values are required to be written in uppercase and as such
        violate the common rule of these values being written in InterCaps. Annotating
        enums this way makes it possible to avoid false style violation reports.

        The comment is of form '// Web(?:Kit)?IDL enum'.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_EnumState.__init__):
        (_EnumState.process_clean_line):
        (check_enum_casing):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (NoNonVirtualDestructorsTest.test_enum_casing):

2013-01-03  Tim 'mithro' Ansell  <mithro@mithis.com>

        Adding favicon.ico to the garden-o-matic.
        https://bugs.webkit.org/show_bug.cgi?id=105982

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/favicon.ico:

2013-01-03  Jonathan Liu  <net147@gmail.com>

        [Qt] Fix library linking order
        https://bugs.webkit.org/show_bug.cgi?id=105818

        Some Qt libraries are linked before the private static libraries
        that depend on them which results in QtWebKit failing to link.

        Copy Qt module dependencies from QT to QT_PRIVATE when creating
        module to ensure the Qt libraries are linked after the private
        static libraries that depend on them.

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/default_post.prf:

2013-01-02  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] Fix tooltip bugs in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=102209

        Reviewed by Gyuyoung Kim.

        Set tooltip on the elm_window instead of ewk_view, and add delay to
        show the tooltip window.

        Setting tooltip on the ewk_view makes elementary error message because
        ewk_view is not an elementary widget. To remove the error message,
        tooltip should be set on the elm_window.

        Most browsers show the tooltip after a mouse pointer stays on an
        element object that has tooltip text.
        But elm_tooltip widget itself doesn't have delay or handle mouse
        events to show/hide.

        So additional codes are added to show/hide tooltip widget along with
        mouse events.
          1) When a mouse pointer stays for a second on an element which has
             tooltip text, then tooltip widget is displayed.
          2) When a mouse pointer is moved or out of ewk_view, hide the tooltip
             widget.

        * MiniBrowser/efl/main.c:
        (_Tooltip_Information):
        (_Browser_Window):
        (on_tooltip_show):
        (window_tooltip_hide):
        (window_tooltip_update):
        (on_mouse_in):
        (on_mouse_move):
        (on_mouse_out):
        (window_free):
        (on_tooltip_text_set):
        (on_tooltip_text_unset):
        (window_create):

2013-01-02  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r138661.
        http://trac.webkit.org/changeset/138661
        https://bugs.webkit.org/show_bug.cgi?id=104740

        Compile problems on EFL

        * GNUmakefile.am:
        * qmake/mkspecs/features/default_post.prf:

2013-01-02  Tony Chang  <tony@chromium.org>

        Generate internal.settings from Settings.in
        https://bugs.webkit.org/show_bug.cgi?id=104740

        Reviewed by Adam Barth.

        * GNUmakefile.am: Compile new generated files on GTK+.
        * qmake/mkspecs/features/default_post.prf: Qt: Make it so an action
        with both extra_sources and add_output_to_sources=false will still
        compile the files in extra_sources. This makes it possible to compile
        InternalSettingsGenerated.cpp and not be confused by
        InternalSettingsGenerated.idl.

2013-01-02  Adam Barth  <abarth@webkit.org>

        Remove old-run-webkit-tests support from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=105619

        Reviewed by Eric Seidel.

        This patch removes support for webkitpy parsing the
        old-run-webkit-tests results format. There doesn't seem to be any
        reason to keep this code around anymore now that most bots have
        switched to new-run-webkit-tests.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (Builder.fetch_layout_test_results):
        * Scripts/webkitpy/common/net/layouttestresults.py:
        (path_for_layout_test):
        (LayoutTestResults.results_from_string):
        (LayoutTestResults):
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        (LayoutTestResultsTest.test_results_from_string):
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        (test_flaky_test_failure):
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        (LayoutTestResultsReaderTest.test_missing_layout_test_results):
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (PatchAnalysisTask._test_patch):
        * Scripts/webkitpy/tool/commands/queuestest.py:
        (QueuesTest.assert_queue_outputs):

2013-01-02  Heikki Paajanen  <heikki.paajanen@palm.com>

        [Qt][WK2] Add simple UI to find text from page
        https://bugs.webkit.org/show_bug.cgi?id=96481

        Reviewed by Jocelyn Turcotte.

        Find bar that slides between navigation bar and WebView.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::toggleFind):
        * MiniBrowser/qt/BrowserWindow.h:
        (BrowserWindow):
        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/icons/find.png: Added.
        * MiniBrowser/qt/qml/BrowserWindow.qml:

2013-01-02  Christophe Dumez  <christophe.dumez@intel.com>

        Regression(r138603): Caused 2 webkitpy tests to fail
        https://bugs.webkit.org/show_bug.cgi?id=105913

        Reviewed by Kentaro Hara.

        Fix 2 webkitpy tests that started to fail after
        r138603.

        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest._sheriff_test_data_url): Make sure the
        returned test file URL is valid no matter what the
        current working directory is.
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        (IRCBotTest.test_help): Add "sheriffs" command to the
        list of available commands.

2013-01-01  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] plugins/clicking-missing-plugin-fires-delegate.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=105897

        Reviewed by Alexey Proskuryakov.

        Dump in WebKitTestRunner the message that is expected by layout tests
        when the missing plugin button is clicked.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::unavailablePluginButtonClicked):
        (WTR):
        * WebKitTestRunner/TestController.h:
        (TestController):

2013-01-01  KwangYong Choi  <ky0.choi@samsung.com>

        [EFL] Enable MHTML feature
        https://bugs.webkit.org/show_bug.cgi?id=105815

        Reviewed by Laszlo Gombos.

        Enable MHTML feature for EFL port by default.

        * Scripts/webkitperl/FeatureList.pm:

2013-01-01  Alan Cutter  <alancutter@chromium.org>

        sheriff-bot should know who the gardeners/sheriffs are
        https://bugs.webkit.org/show_bug.cgi?id=105698

        Reviewed by Eric Seidel.

        Added a "sheriffs" command to sheriffbot to fetch the current Chromium Webkit sheriffs.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Current):
        (Current._retrieve_webkit_sheriffs):
        (Current.execute):
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_current):
        * Scripts/webkitpy/tool/bot/testdata/webkit_sheriff_0.js: Added.
        * Scripts/webkitpy/tool/bot/testdata/webkit_sheriff_1.js: Added.
        * Scripts/webkitpy/tool/bot/testdata/webkit_sheriff_2.js: Added.
        * Scripts/webkitpy/tool/bot/testdata/webkit_sheriff_malformed.js: Added.
        * Scripts/webkitpy/tool/bot/testdata/webkit_sheriff_zero.js: Added.

2012-12-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move ImageDiff to the Tools directory root
        https://bugs.webkit.org/show_bug.cgi?id=105421

        Reviewed by Kenneth Rohde Christiansen.

        * DumpRenderTree/gtk/GNUmakefile.ImageDiff.am: Removed.
        * GNUmakefile.am:
        * ImageDiff/gtk/ImageDiff.cpp: Renamed from Tools/DumpRenderTree/gtk/ImageDiff.cpp.

2012-12-30  Mike West  <mkwst@chromium.org>

        Add myself to watchlists for CSP and console logs.
        https://bugs.webkit.org/show_bug.cgi?id=105874

        Reviewed by Dirk Pranke.

        Because I really, really, really need more email.

        * Scripts/webkitpy/common/config/committers.py:
            Add mkwst+watchlist@chromium.org as a contributor.
        * Scripts/webkitpy/common/config/watchlist:
            Create watchlist categories for 1) the various mechanisms used to
            generate console messages, and 2) CSP usage and files.

2012-12-30  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Enable TEMPLATE_ELEMENT feature
        https://bugs.webkit.org/show_bug.cgi?id=105865
        
        Reviewed by Laszlo Gombos.

        * Scripts/webkitperl/FeatureList.pm: Enable template element feature for EFL port.

2012-12-30  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed GTK gardening of the unit tests.

        Skip the TestInspectorServer unit test that's timing out completely.

        * Scripts/run-gtk-tests:
        (TestRunner):

2012-12-29  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation plugin: do not generate 'not instrumented' warning for instrumented mutable members.
        https://bugs.webkit.org/show_bug.cgi?id=105855

        Reviewed by Vsevolod Vlasov.

        Extract MemberExpr from ImplicitCastExpr. It happens when we instrument a mutable member because
        addMember expects const T& and the mutable ref to member implicitly converts into const ref to member.

        * clang/ReportMemoryUsagePlugin/ReportMemoryUsage.cpp:
        (ReportMemoryUsageVisitor):
        (clang::AddMemberCallVisitor::VisitCallExpr):
        (clang::ReportMemoryUsageVisitor::VisitCXXMethodDecl):
        (clang::ReportMemoryUsageVisitor::checkMembersCoverage):

2012-12-29  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation plugin: move function bodies out of class declarations.
        https://bugs.webkit.org/show_bug.cgi?id=105852

        Reviewed by Alexander Pavlov.

        * clang/ReportMemoryUsagePlugin/ReportMemoryUsage.cpp:
        (clang):
        (AddMemberCallVisitor):
        (ReportMemoryUsageVisitor):
        (clang::ReportMemoryUsageAction::ParseArgs):
        (clang::AddMemberCallVisitor::VisitCallExpr):
        (clang::ReportMemoryUsageVisitor::VisitCXXMethodDecl):
        (clang::ReportMemoryUsageVisitor::emitWarning):
        (clang::ReportMemoryUsageVisitor::findInstrumentationMethod):
        (clang::ReportMemoryUsageVisitor::needsToBeInstrumented):
        (clang::ReportMemoryUsageVisitor::CheckMembersCoverage):

2012-12-29  Zan Dobersek  <zandobersek@gmail.com>

        [webkitpy] Omit webkitpy/thirdparty/BeautifulSoup.py from code coverage checking
        https://bugs.webkit.org/show_bug.cgi?id=105835

        Reviewed by Dirk Pranke.

        The BeautifulSoup module is a third-party import and as such we don't have much control
        over its testing. Because of that it should be omitted from code coverage checking.

        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests):

2012-12-28  Martin Robinson  <mrobinson@igalia.com>

        [GTK][WK2] Add support for IME Composition
        https://bugs.webkit.org/show_bug.cgi?id=65093

        Reviewed by Carlos Garcia Campos.

        Update unit tests for GtkInputMethodFilter to note whether or not an event
        was a fake event synthesized for composition purposes. This is now used
        for WebKit2.

        * TestWebKitAPI/Tests/gtk/InputMethodFilter.cpp:
        (TestWebKitAPI::TestInputMethodFilter::sendSimpleKeyEvent):
        (TestWebKitAPI::TestInputMethodFilter::sendKeyEventWithCompositionResults):
        (TestWebKitAPI::TEST):
        * gtk/generate-gtkdoc:
        (get_webkit2_options): Skip new files in the WebKit2 source directory for documentation
        generation.

2012-12-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation. Update clang plugin according to the current state of memory instrumentation code.
        https://bugs.webkit.org/show_bug.cgi?id=105800

        Reviewed by Yury Semikhatsky.

        * clang/ReportMemoryUsagePlugin/ReportMemoryUsage.cpp:
        (clang::ReportMemoryUsageConsumer::ReportMemoryUsageConsumer):
        (clang):

2012-12-27  Zan Dobersek  <zandobersek@gmail.com>

        Create a GTK build system watchlist and add myself to it
        https://bugs.webkit.org/show_bug.cgi?id=105769

        Reviewed by Dirk Pranke.

        Add a GTK build system watchlist, watching the configure.ac, GNUmakefile.am files
        and the input GNUmakefile.features.am.in file. The GNUmakefile.list.am files are
        omitted on purpose due to relatively high change rate they are exposed to.

        The new watchlist would be of use to me as the GTK build system recently went
        through a series of changes that included a changed policy on adding configuration
        flags to configure.ac and subsequent additions to GNUmakefile.am files. A PSA on the
        mailing list about this change will be published later, but I'd also like to be
        notified of any pending changes to these files just so I can check the changes are
        in compliance with the new policy.

        * Scripts/webkitpy/common/config/watchlist:

2012-12-26  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed. Replace find("Tools") with rfind("Tools") because base dir of WebKit may have Tools word.
        As example ..../DevTools/src/third_party/WebKit

        * Scripts/webkitpy/common/webkit_finder.py:
        (WebKitFinder.webkit_base):

2012-12-25  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Refactor snapshot taking code
        https://bugs.webkit.org/show_bug.cgi?id=105687

        Reviewed by Kenneth Rohde Christiansen.

        Call WKViewCreateSnapshot() instead of WKViewGetSnapshot()
        since the function was renamed to follow naming style.

        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::windowSnapshotImage):

2012-12-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: propagate member type as edge type to the serialized heap graph.
        https://bugs.webkit.org/show_bug.cgi?id=105725

        Reviewed by Yury Semikhatsky.

        MemberType value names were adjusted according to Style Guide.
        Existing tests were extended with link type validation.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:

2012-12-24  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] DRT - Crashed when running pixels tests
        https://bugs.webkit.org/show_bug.cgi?id=105711

        RIM PR 270003

        Reviewed by George Staikos.

        Calling window->post() here will result in buffer swapping which is
        only allowed in UI thread now, and I found we don't need to call it
        for GL renderer.

        * DumpRenderTree/blackberry/PixelDumpSupportBlackBerry.cpp:
        (createBitmapContextFromWebView):

2012-12-22  Dan Winship  <danw@gnome.org>

        Add a patch to fix libxml2 2.9.0 regression
        https://bugs.webkit.org/show_bug.cgi?id=104494

        Reviewed by Martin Robinson.

        * gtk/jhbuild.modules:
        * gtk/patches/libxml2-2.9.0-dtd.patch: patch from upstream

2012-12-23  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Unreviewed update of status to reviewer.

        * Scripts/webkitpy/common/config/committers.py:

2012-12-23  Philippe Normand  <pnormand@igalia.com>

        [GTK][jhbuild] Bump GStreamer to 1.0.4
        https://bugs.webkit.org/show_bug.cgi?id=105640

        Reviewed by Martin Robinson.

        * gtk/jhbuild.modules: Update GStreamer modules to 1.0.4.

2012-12-21  Nico Weber  <thakis@chromium.org>

        chromium: webkit-build-directory doesn't handle ninja output dirs
        https://bugs.webkit.org/show_bug.cgi?id=105671

        Reviewed by Daniel Bates.

        Teach webkit-build-directory to detect the ninja build directory.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        (determineIsChromiumNinja):

2012-12-21  Ryosuke Niwa  <rniwa@webkit.org>

        [Mountain Lion] platform/mac/editing/spelling/removing-underline-after-accepting-autocorrection-using-punctuation.html failing
        https://bugs.webkit.org/show_bug.cgi?id=95477

        Reviewed by Sam Weinig.

        Co-authored by Jia Pu.

        Specify a fixed autocorrection dictionary in resetDefaultsToConsistentValues() so that
        we can have consistent autocorrection behavior when running tests.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):

2012-12-21  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Add WebKit1-specific TestExpectations file
        https://bugs.webkit.org/show_bug.cgi?id=97562

        Reviewed by Dirk Pranke.

        Implement the expectations_files method inside the GtkPort class that
        returns the list of the TestExpectations files the current test configuration
        requires. The method is implemented in a similar way as on the EFL port.
        A unit test is also added.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._search_paths):
        (GtkPort):
        (GtkPort.expectations_files):
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        (GtkPortTest.test_expectations_files):

2012-12-21  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL] Enable feature option for the CSS sticky position
        https://bugs.webkit.org/show_bug.cgi?id=105630

        Reviewed by Kenneth Rohde Christiansen.

        Enable CSS sticky position feature by default for the
        EFL port. This feature option was added in r138252.

        No new tests. Existing layout tests pass.

        * Scripts/webkitperl/FeatureList.pm:

2012-12-21  Jussi Kukkonen  <jussi.kukkonen@intel.com>

        [WK2] REGRESSION(r138232): It made 4 tests timeout
        https://bugs.webkit.org/show_bug.cgi?id=105623

        Reviewed by Kenneth Rohde Christiansen.

        r138232 changed functionality so that empty text output
        no longer leads to a dump() call, which leads to a timeout.
        Instead do a text dump if there is text output or if there
        is no audio output.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpResults):

2012-12-21  Zeno Albisser  <zeno@webkit.org>

        [Qt][Mac] run-launcher cannot find Qt5WebKitWidgets.
        https://bugs.webkit.org/show_bug.cgi?id=105309

        On Windows the library name is Qt5WebKitWidgets as well.
        So r138136 should not have adjusted the library name for Windows.

        Reviewed by Simon Hausmann.

        * Scripts/webkitdirs.pm:
        (builtDylibPathForName):

2012-12-21  Zeno Albisser  <zeno@webkit.org>

        [Qt] Add new TestExpectations for qt-5.0-mac-wk2.
        https://bugs.webkit.org/show_bug.cgi?id=105424

        This change will allow us to run a very specific
        subset of the available LayoutTests on a mac buildbot.
        The new baseline search path for mac will look as follows:
        qt-5.0-mac-wk2 -> qt-5.0-wk2 -> qt-5.0 -> qt-mac -> qt

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._search_paths):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest):

2012-12-20  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Build break with latest EFL libraries.
        https://bugs.webkit.org/show_bug.cgi?id=104827

        Reviewed by Laszlo Gombos.

        The eo EFL package is introduced and evas and ecore use it since 1.8.
        While introducing Eo, EFL changed several structures of Evas and Ecore
        from own specific class to Eo.

        So, this patch adds FindEo and changes declaration of Evas, Evas_Object,
        Ecore_Timer to build with latest EFL libraries.

        * DumpRenderTree/efl/CMakeLists.txt: Includes eo EFL library.
        * EWebLauncher/CMakeLists.txt: Ditto.
        * MiniBrowser/efl/CMakeLists.txt: Ditto.
        * ImageDiff/PlatformEfl.cmake: Ditto.
        * TestWebKitAPI/PlatformEfl.cmake: Ditto.
        * TestWebKitAPI/PlatformWebView.h: Modified declaration of Evas_Object.
        * WebKitTestRunner/InjectedBundle/TestRunner.h: Modified declaration of Ecore_Timer.
        * WebKitTestRunner/PlatformEfl.cmake: Includes eo EFL library.
        * WebKitTestRunner/PlatformWebView.h: Modified declaration of Evas_Object.

2012-12-20  Dirk Pranke  <dpranke@chromium.org>

        TestExpectation fallback is broken
        https://bugs.webkit.org/show_bug.cgi?id=105583

        Reviewed by Ryosuke Niwa.

        When I added support for the -wk2 in port names, it looks
        like I broke the way we computed the list of TestExpectations
        files so that the implementation-version directory was left out :(.
        Fixed and cleaned up the tests.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.expectations_files):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (TestWebKitPort.__init__):
        (PortTestCase.test_skipped_directories_for_symbols):
        (test_skipped_directories_for_features):
        (test_skipped_directories_for_features_no_matching_tests_in_test_list):
        (test_skipped_tests_for_unsupported_features_empty_test_list):
        (test_skipped_layout_tests):
        (test_expectations_files):

2012-12-20  Anders Carlsson  <andersca@apple.com>

        Don't include WebKit2 headers when building TestWebKitAPI on windows
        https://bugs.webkit.org/show_bug.cgi?id=105582

        Reviewed by Tim Horton.

        * TestWebKitAPI/config.h:
        * TestWebKitAPI/win/main.cpp:

2012-12-20  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r133820?): SimplifyMarkupTest API test asserts
        https://bugs.webkit.org/show_bug.cgi?id=105370

        Reviewed by Simon Fraser.

        Re-enable the test.

        * TestWebKitAPI/Tests/mac/SimplifyMarkup.mm:
        (TestWebKitAPI::TEST):

2012-12-20  Nico Weber  <thakis@chromium.org>

        chromium nrwt: Pick the newest binary found in DEFAULT_BUILD_DIRECTORIES, not the first
        https://bugs.webkit.org/show_bug.cgi?id=105498

        Reviewed by Dirk Pranke.

        Use the newest binary available rather than an than always picking one
        build directory over another based on iteration order.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort._static_build_path):
        Check for timestamps.
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_build_path_timestamps):
        Test that out / xcodebuild selection happens based on timestamps
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinPortTest.test_build_path_timestamps):
        Test that out / build selection happens based on timestamps

2012-12-19  Simon Fraser  <simon.fraser@apple.com>

        Lots of sticky tests failing in WK2
        https://bugs.webkit.org/show_bug.cgi?id=105464

        Reviewed by Beth Dakin.

        WebKitTestRunner had a race between snapshotting in the UI process,
        and resettting after the test in the web process. InjectedBundle::done()
        was a bad place to call page()->resetAfterTest(), because of this race;
        it could reset the scroll position before the UI snapshot had been obtained.
        
        Fix by moving the call to page()->resetAfterTest() into didReceiveMessage(),
        for the "Reset" message which will come in before the next test.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::done):

2012-12-19  Filip Pizlo  <fpizlo@apple.com>

        DFG speculation checks that take JumpList should consolidate OSRExits
        https://bugs.webkit.org/show_bug.cgi?id=105401

        Reviewed by Oliver Hunt.

        Update the profiler to understand that an OSR exit may have multiple
        candidate exit sites.

        * Scripts/display-profiler-output:

2012-12-20  Eric Seidel  <eric@webkit.org>

        EWSes do not need to dump build/test logs when things pass
        https://bugs.webkit.org/show_bug.cgi?id=105402

        Reviewed by Dirk Pranke.

        When we were first writing the commit-queue and EWS system
        and running them locally, we thought it was important to see the
        build/test output as it happened.  Now these queues have been running
        for years, and we don't use this feature anymore.  So this patch
        makes us stop tee-ing the output directly to stdout, and instead
        only print any output from commands when they fail.

        I also added some logging when we execute each command
        since we are no longer printing the command output itself.
        This should make it much easier to see errors with the EWS
        system itself, now that all the passing-build output is removed.

        This required updating a zillion unittests, since we have a bunch of
        "integration" style testing of the queue-bots.  Many of the unittests for the bots were
        already approximating this behavior by using a "logging" Executive.
        I disabled logging in those cases to avoid redundant logging in those tests.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.command_for_printing):
        (Executive.run_command):
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.command_for_printing):
        (MockExecutive.run_command):
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_auto_stringify_args):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSytemTest._default_expected_logs):
        (_test_ews):
        (_test_ewses):
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractQueue.run_webkit_patch):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (AbstractQueueTest._assert_run_webkit_patch):
        (CommitQueueTest.test_commit_queue):
        (test_rollout):
        (test_rollout_lands):
        (test_manual_reject_during_processing):
        (StyleQueueTest.test_style_queue_with_style_exception):
        (test_style_queue_with_watch_list_exception):

2012-12-20  Dominic Mazzoni  <dmazzoni@google.com>

        AX: support clickPoint in DRT for chromium
        https://bugs.webkit.org/show_bug.cgi?id=97359

        Reviewed by Chris Fleizach.

        Implement clickPointX, clickPointY, and elementAtPoint for Chromium, so that
        several more tests can pass.

        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        (WebTestRunner::AccessibilityUIElement::AccessibilityUIElement):
        (WebTestRunner::AccessibilityUIElement::clickPointXGetterCallback):
        (WebTestRunner):
        (WebTestRunner::AccessibilityUIElement::clickPointYGetterCallback):
        (WebTestRunner::AccessibilityUIElement::elementAtPointCallback):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h:
        (AccessibilityUIElement):

2012-12-20  Dan Bernstein  <mitz@apple.com>

        prepare-ChangeLog adds "Additional information of the change such as approach, rationale" where it doesn't make sense
        https://bugs.webkit.org/show_bug.cgi?id=99268

        Reviewed by Alexey Proskuryakov.

        * Scripts/prepare-ChangeLog:
        (generateNewChangeLogs): Removed the "Additional information of the change" line.

2012-12-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Skip unit test /webkit/atk/getTextInParagraphAndBodyModerate

        * Scripts/run-gtk-tests:
        (TestRunner):

2012-12-20  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [Qt] Move ImageDiff to the Tools directory root
        https://bugs.webkit.org/show_bug.cgi?id=105420

        Reviewed by Tor Arne Vestbø.

        Moved ImageDiff from outside DumpRenderTree because it is also a
        dependency when running pixel tests for WebKit2.

        * ImageDiff/ImageDiff.pro: Renamed from Tools/DumpRenderTree/qt/ImageDiff.pro.
        * ImageDiff/qt/ImageDiff.cpp: Renamed from Tools/DumpRenderTree/qt/ImageDiff.cpp.
        * Tools.pro:

2012-12-20  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Remove the --enable-unstable-features configuration option
        https://bugs.webkit.org/show_bug.cgi?id=105327

        Reviewed by Martin Robinson.

        Add a missing feature option for the CSS sticky position feature.

        * Scripts/webkitperl/FeatureList.pm:

2012-12-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Skip unit test WebKit2.ForceRepaint that times out

        * Scripts/run-gtk-tests:
        (TestRunner):

2012-12-20  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL] MiniBrowser does not play Infinite Gangnam Style
        https://bugs.webkit.org/show_bug.cgi?id=103531

        Reviewed by Kenneth Rohde Christiansen.

        For EFL we would like this feature to be built by default.

        * Scripts/webkitperl/FeatureList.pm:

2012-12-20  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] EWS bots should call qmake always
        https://bugs.webkit.org/show_bug.cgi?id=90049

        Reviewed by Simon Hausmann.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-12-20  Jochen Eisinger  <jochen@chromium.org>

        [chromium] fix stray printf in TestRunner's WebTestProxy
        https://bugs.webkit.org/show_bug.cgi?id=105515

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::shouldInsertNode):

2012-12-20  Dominik Röttsches  <dominik.rottsches@intel.com>

        [WK2] WebAudio WKTR support
        https://bugs.webkit.org/show_bug.cgi?id=95084

        Reviewed by Kenneth Rohde Christiansen.

        Implementing audio data dump support for WebKitTestRunner,
        by adding the API to the IDL, enabling IPC for transferring
        the audio data as bytebuffer and dumping it according
        to run-webkit-tests script's expectations.
        This enables audio testing on WebKit2 ports.
        Based on initial wip-patch from Philippe Normand - thanks.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: Adding setAudioData API.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp: Assign audio buffer data to a local WKDataRef after extracting it from WK2 using WKBundleDataFromUint8Array bundle API.
        (WTR::TestRunner::setAudioData):
        (WTR):
        * WebKitTestRunner/InjectedBundle/TestRunner.h: Add a whatToDump state for dumping Audio.
        (TestRunner):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp: Add audio to the message that's transferred to the WKTR process.
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h: Allow setting and audio result handle to be transferred.
        (WTR::InjectedBundle::setAudioResult):
        (InjectedBundle):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump): Dummy handling the Audio case in the switch, build fix for Mac.
        * WebKitTestRunner/TestInvocation.cpp: Audio dump support, dump audio if we haven't received a text dump from the web process.
        (WTR::TestInvocation::dumpResults):
        (WTR):
        (WTR::TestInvocation::dumpAudio):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): Storing received audio data before dumping.
        * WebKitTestRunner/TestInvocation.h:
        (TestInvocation):

2012-12-20  Alberto Garcia  <agarcia@igalia.com>

        [GTK] Count failed and timed out tests separately
        https://bugs.webkit.org/show_bug.cgi?id=105448

        Reviewed by Carlos Garcia Campos.

        Display the number of tests that fail, time out and are skipped
        separately in the buildbot page.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunGtkAPITests.commandComplete):
        (RunGtkAPITests.evaluateCommand):
        (RunGtkAPITests.getText2):
        * Scripts/run-gtk-tests:
        (TestRunner.run_tests):

2012-12-19  Ryosuke Niwa  <rniwa@webkit.org>

        PerfTest.parse_output does too much
        https://bugs.webkit.org/show_bug.cgi?id=105391

        Reviewed by Tony Chang.

        Moved the code to filter lines into PerfTest._filter_output, which has been renamed from _filter_stderr.
        Also moved the code to output test results into PerfTest._run_with_driver.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest.__init__): Added _description.
        (PerfTest.description): Added.
        (PerfTest._run_with_driver): Moved the code to output test description and test results.
        (PerfTest._filter_output): Moved and renamed from PerfTest._filter_stderr.
        (PerfTest.parse_output): Removed the code to output test results. Return test results and description
        respectively. Also removed the code that allowed some tests to omit values since all tests report each
        iteration now since r136492.
        (PerfTest.output_statistics): Removed the code to print test description, now done in _run_with_driver.
        (ChromiumStylePerfTest._run_with_driver): Added. Chromium style tests are sufficiently different from
        regular PerfTest that it doesn't make much sense to share _run_with_driver. But really, we should just
        get rid of this type of test altogether in favor of regular performance tests that uses runner.js.
        (ChromiumStylePerfTest.parse_and_log_output): Renamed from parse_output.
        (PageLoadingPerfTest._run_with_driver): Removed the explicit '' for the test description.
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (MainTest.test_parse_output): Removed the expected logs since parse_output no longer prints out results.
        Also added a call to _filter_output since parse_output doesn't filter the output text anymore.
        (MainTest.test_parse_output_with_failing_line): Added a call to _filter_output. Also added ',' after 'Time:'
        so that it's not string-concatenated with the next line.
        (MainTest.test_parse_output_with_description): Added; a test for PerfTest.description().
        (MainTest.test_parse_output_with_subtests): Removed the expected logs, and added a call to _filter_output.

2012-12-19  Alexis Menard  <alexis@webkit.org>

        Implement CSS parsing for CSS transitions unprefixed.
        https://bugs.webkit.org/show_bug.cgi?id=104804

        Reviewed by Dean Jackson.

        Add a new flag ENABLE_CSS_TRANSFORMS_ANIMATIONS_TRANSITIONS_UNPREFIXED
        to cover the work of unprefixing Transforms, Animations and 
        Transitions. It will let the possibility of each ports to turn it off 
        in their release branches until we're confident that these CSS 
        properties are ready to be unprefixed.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2012-12-19  Julien Chaffraix  <jchaffraix@webkit.org>

        2 clampTo unit tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=105253

        Reviewed by Emil A Eklund.

        Removed clampToUnsigned as it was actually testing exactly what
        clampToUnsignedLong was doing. Also made clampToIntFloat more robust
        to precision loss (fix suggested by Emil).

        * TestWebKitAPI/Tests/WTF/MathExtras.cpp:

2012-12-19  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Move ImageDiff to the Tools directory root
        https://bugs.webkit.org/show_bug.cgi?id=105305

        Reviewed by Laszlo Gombos.

        We previously moved this directory from the DRT directory to
        efl/ImageDiff. The major reason for doing so was because ImageDiff does
        not depend on DumpRenderTree but for legacy reasons was living inside the
        DRT folder, even though it is needed when running pixel tests for WK2.

        Now we are moving to Tool directory root as other ports agreed to do the same.

        * CMakeLists.txt:
        * ImageDiff/CMakeLists.txt: Added.
        * ImageDiff/PlatformEfl.cmake: Added.
        * ImageDiff/efl/ImageDiff.cpp: Renamed from Tools/efl/ImageDiff/ImageDiff.cpp.
        * efl/ImageDiff/CMakeLists.txt: Removed.

2012-12-19  Zeno Albisser  <zeno@webkit.org>

        [Qt][Mac] run-launcher cannot find Qt5WebKitWidgets.
        https://bugs.webkit.org/show_bug.cgi?id=105309

        The version number is only used as a part
        of the library name on Linux.

        Reviewed by Kenneth Rohde Christiansen.

        * Scripts/webkitdirs.pm:
        (builtDylibPathForName):

2012-12-19  Alberto Garcia  <agarcia@igalia.com>

        [GTK] Tests that time out are not considered as failures.
        https://bugs.webkit.org/show_bug.cgi?id=105318

        Reviewed by Martin Robinson.

        Fix parsing of the GTK API tests log files.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunGtkAPITests.commandComplete):

2012-12-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed, rolling out r138061.
        https://bugs.webkit.org/show_bug.cgi?id=105396

        Original patch:
        http://trac.webkit.org/changeset/138061
        https://bugs.webkit.org/show_bug.cgi?id=97359

        It is crashing on Debug bots

        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        (WebTestRunner::AccessibilityUIElement::AccessibilityUIElement):
        (WebTestRunner::AccessibilityUIElement::elementAtPointCallback):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h:
        (AccessibilityUIElement):

2012-12-18  Alice Liu  <alice.liu@apple.com>

        Test for https://bugs.webkit.org/show_bug.cgi?id=105106
        Add SPI to WebKit1 WebFrame for hit testing

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added file Tests/mac/ElementAtPointInWebFrame.mm
        * TestWebKitAPI/Tests/mac/ElementAtPointInWebFrame.mm: Added.
        (TestWebKitAPI::TEST): Loads html with two divs positioned in the 2nd and 4th quadrants of the webview.
        Then hit-tests at three points, expecting to hit the two divs and body element. 

2012-12-18  Alice Liu  <alice.liu@apple.com>

        Test for https://bugs.webkit.org/show_bug.cgi?id=105262
        Add SPI to WebKit1 WebFrame for node conversion to JSValueRef

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added file Tests/mac/JSWrapperForNodeInWebFrame.mm.mm
        * TestWebKitAPI/Tests/mac/JSWrapperForNodeInWebFrame.mm.mm: Added.
        (TestWebKitAPI::TEST): Tests for the correct JS wrapper for a DOMNode, provided a WebScriptWorld.
        Loads html with a single div element. In an isolated world, creates a property on that node.
        Also, in the standard world, creates a different property on that node.  Then tests for 4 things:
            - Existence of the isolated property in the isolated world.
            - Existence of the standard property in the standard world.
            - Non-existence of the isolated property in the standard world.
            - Non-existence of the standard property in the isolated world.

2012-12-18  Simon Fraser  <simon.fraser@apple.com>

        Disable the SimplifyMarkup API test, wich asserts in debug builds.
        Tracked by https://bugs.webkit.org/show_bug.cgi?id=105370.
        
        * TestWebKitAPI/Tests/mac/SimplifyMarkup.mm:
        (TestWebKitAPI::TEST):

2012-12-18  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Add Build Phase to Check Headers for Inappropriate Macros (Platform.h macros)
        https://bugs.webkit.org/show_bug.cgi?id=104279

        Reviewed by David Kilzer.

        Add a build phase script that checks a framework's header files for
        Platform.h and Compiler.h macros. Also add some tests for the script.

        * Scripts/check-for-inappropriate-macros-in-external-headers: Added.
        Script to be used in build phases to check for inappropriate macros in headers.

        * Scripts/test-webkitruby: Added.
        Script that can be used to run all webkitruby tests.

        * Scripts/test-webkit-scripts:
        Also run the ruby tests.

        * Scripts/webkitruby/check-for-inappropriate-macros-in-external-headers-tests/fake-data-failing-expected.txt: Added.
        * Scripts/webkitruby/check-for-inappropriate-macros-in-external-headers-tests/pass-expected.txt: Added.
        * Scripts/webkitruby/check-for-inappropriate-macros-in-external-headers-tests/resources/Fake.framework/Headers/Fail.h: Added.
        * Scripts/webkitruby/check-for-inappropriate-macros-in-external-headers-tests/resources/Fake.framework/Headers/Pass.h: Added.
        * Scripts/webkitruby/check-for-inappropriate-macros-in-external-headers-tests/run-test.rb: Added.
        Tests for the new script.

2012-12-18  Dominic Mazzoni  <dmazzoni@google.com>

        AX: support clickPoint in DRT for chromium
        https://bugs.webkit.org/show_bug.cgi?id=97359

        Reviewed by Chris Fleizach.

        Implement clickPointX, clickPointY, and elementAtPoint for Chromium, so that
        several more tests can pass.

        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        (WebTestRunner::AccessibilityUIElement::AccessibilityUIElement):
        (WebTestRunner::AccessibilityUIElement::clickPointXGetterCallback):
        (WebTestRunner):
        (WebTestRunner::AccessibilityUIElement::clickPointYGetterCallback):
        (WebTestRunner::AccessibilityUIElement::elementAtPointCallback):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h:
        (AccessibilityUIElement):

2012-12-18  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r138045.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._collect_tests): Use relative_path. We skip only when this path
        is not explicitly specified. The condition was backwards but never matched so we
        always ran the test regardless of whether it's listed in the skipped list or not.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_collect_tests_with_ignored_skipped_list): Renamed so that it actually runs.

2012-12-18  Emil A Eklund  <eae@chromium.org>

        TestWebKitAPI/Tests/WebCore/LayoutUnit fails on mac
        https://bugs.webkit.org/show_bug.cgi?id=105332
        
        Reviewed by Levi Weintraub.
        
        Create new test suite for LayoutUnit tests as the KURL tests are
        of the incompatible TEST_F type.

        * TestWebKitAPI/Tests/WebCore/LayoutUnit.cpp:
        (TestWebKitAPI):
        (TestWebKitAPI::TEST_F):

2012-12-18  Ryosuke Niwa  <rniwa@webkit.org>

        Running a skipped test with run-perf-tests could alert the user
        https://bugs.webkit.org/show_bug.cgi?id=105219

        Reviewed by Eric Seidel.

        Force run skipped performance tests explicitly specified in the command line.
        Also warn the user when the specified paths don't exist.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.relative_test_filename):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner._collect_tests):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_collect_tests_with_skipped_list_and_files):

2012-12-18  Yaron Friedman  <yfriedman@chromium.org>

        Chrome Android java output is too verbose
        https://bugs.webkit.org/show_bug.cgi?id=105247

        Reviewed by Tony Chang.

        Pass -quiet to ant to suppress extraneous output.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2012-12-18  Ryosuke Niwa  <rniwa@webkit.org>

        Consider removing --pause-before-testing option
        https://bugs.webkit.org/show_bug.cgi?id=105248

        Reviewed by Eric Seidel.

        Remove --pause-before-testing option.

        * Tools/Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverProxy.start): Removed.
        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest.__init__):
        (PerfTest.test_path): Renamed from path_or_url.
        (PerfTest.run):
        (PerfTest): Removed "driver" argument.
        (PerfTest._run_with_driver):
        (PerfTest.run_single):
        (ChromiumStylePerfTest.__init__):
        (PageLoadingPerfTest.__init__):
        (PageLoadingPerfTest.run_single):
        (PageLoadingPerfTest._run_with_driver): Renamed from run so that PerfTest.run can create a driver for us.
        (ReplayPerfTest.__init__):
        (ReplayPerfTest.prepare):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPageLoadingPerfTest.test_run):
        (TestPageLoadingPerfTest.test_run_with_memory_output):
        (TestPageLoadingPerfTest.test_run_with_bad_output):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner._run_tests_set): Removed the code to create a driver and pause before running the test.
        (PerfTestsRunner._run_single_test): Removed "driver" argument.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (run_test):
        (test_run_test_pause_before_testing): Removed.

2012-12-18  Alberto Garcia  <agarcia@igalia.com>

        [GTK] Tests that time out are not considered as failures.
        https://bugs.webkit.org/show_bug.cgi?id=105318

        Reviewed by Martin Robinson.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunGtkAPITests.commandComplete):
        Consider log lines that end with TIMEOUT as errors.

        * Scripts/run-gtk-tests:
        (TestRunner.run_tests):
        Consider timeouts as failures when returning the number of failed
        tests.

2012-12-18  Pravin D  <pravin.d@samsung.com>

        Unreviewed, adding secondary email.

        * Scripts/webkitpy/common/config/committers.py:

2012-12-18  Pravin D  <pravin.d@samsung.com>

        Unreviewed, promoting myself to committer's list.

        * Scripts/webkitpy/common/config/committers.py:

2012-12-18  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] ImageDiff does not build on WebKit2 only builds
        https://bugs.webkit.org/show_bug.cgi?id=105288

        Reviewed by Kenneth Rohde Christiansen.

        Moved ImageDiff to the efl/ folder inside Tools/ (so we don't pollute
        the folder with things which are EFL-specific.

        ImageDiff will be built by default now regardless of WebKit API flavor
        you choose.

        * CMakeLists.txt:
        * DumpRenderTree/efl/CMakeLists.txt:
        * efl/ImageDiff/CMakeLists.txt: Added.
        * efl/ImageDiff/ImageDiff.cpp: Renamed from Tools/DumpRenderTree/efl/ImageDiff.cpp.

2012-12-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][WK2] When creating new windows, use the opener's context
        https://bugs.webkit.org/show_bug.cgi?id=105283

        Reviewed by Laszlo Gombos.

        Use the context of the opener if exists.

        * MiniBrowser/efl/main.c:
        (on_key_down):
        (on_window_create):
        (window_create):
        (elm_main):

2012-12-18  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL][WK2] Gardening of TestWebKitAPI tests
        https://bugs.webkit.org/show_bug.cgi?id=105268

        Reviewed by Kenneth Rohde Christiansen.

        Some tests were marked as failing but are passing and the newly added
        LayoutUnit should have it's own binary because it conflicts with the
        fixture used by KURL and is failing on the bots because of that.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformEfl.cmake:

2012-12-18  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move webintent related methods to TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=105164

        Reviewed by Darin Fisher.

        Also deleted the unused deliveredIntentFailure and
        deliveredIntentResult methods.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebKit):
        (WebTestRunner::WebTestDelegate::setCurrentWebIntentRequest):
        (WebTestRunner::WebTestDelegate::currentWebIntentRequest):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestProxyBase):
        (WebTestRunner::WebTestProxy::registerIntentService):
        (WebTestRunner::WebTestProxy::dispatchIntent):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::sendWebIntentResponse):
        (WebTestRunner):
        (WebTestRunner::TestRunner::deliverWebIntent):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::postAccessibilityNotification):
        (WebTestRunner::WebTestProxyBase::registerIntentService):
        (WebTestRunner):
        (WebTestRunner::WebTestProxyBase::dispatchIntent):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::setCurrentWebIntentRequest):
        (WebViewHost::currentWebIntentRequest):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebKit):
        (WebViewHost):

2012-12-18  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move editing callback dumping to the WebTestProxy
        https://bugs.webkit.org/show_bug.cgi?id=105013

        Reviewed by Darin Fisher.

        To decide whether or not to dump the editing callbacks, the WebTestProxy
        needs to query the TestRunner. For this purpose, I introduce a
        WebTestRunner class that just exposes the shouldDumpEditingCallbacks
        method. In contrast to e.g. WebEventSender, the WebTestRunner is just
        an interface, and it is not owned by the WebTestInterfaces, but the
        embedder of the TestRunner library must provide it. This will change
        once all TestRunner methods are in the library.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        (DRTTestRunner::taskList):
        (DRTTestRunner::WorkQueue::taskList):
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
        (WebTestRunner):
        (WebTestInterfaces):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestRunner):
        (WebTestProxyBase):
        (WebTestRunner::WebTestProxy::shouldBeginEditing):
        (WebTestRunner::WebTestProxy::shouldEndEditing):
        (WebTestRunner::WebTestProxy::shouldInsertNode):
        (WebTestRunner::WebTestProxy::shouldInsertText):
        (WebTestRunner::WebTestProxy::shouldChangeSelectedRange):
        (WebTestRunner::WebTestProxy::shouldDeleteRange):
        (WebTestRunner::WebTestProxy::shouldApplyStyle):
        (WebTestRunner::WebTestProxy::didBeginEditing):
        (WebTestRunner::WebTestProxy::didChangeSelection):
        (WebTestRunner::WebTestProxy::didChangeContents):
        (WebTestRunner::WebTestProxy::didEndEditing):
        * DumpRenderTree/chromium/TestRunner/public/WebTestRunner.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.
        (WebTestRunner):
        (WebTestRunner::WebTestRunner::shouldDumpEditingCallbacks):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::~TestRunner):
        (WebTestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::shouldDumpEditingCallbacks):
        (WebTestRunner::TestRunner::dumpEditingCallbacks):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestRunner::WebTestInterfaces::Internal::testRunner):
        (WebTestRunner::WebTestInterfaces::Internal::setTestRunner):
        (WebTestInterfaces::Internal):
        (WebTestRunner::WebTestInterfaces::Internal::Internal):
        (WebTestRunner::WebTestInterfaces::testRunner):
        (WebTestRunner):
        (WebTestRunner::WebTestInterfaces::setTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::postAccessibilityNotification):
        (WebTestRunner):
        (WebTestRunner::WebTestProxyBase::shouldBeginEditing):
        (WebTestRunner::WebTestProxyBase::shouldEndEditing):
        (WebTestRunner::WebTestProxyBase::shouldInsertNode):
        (WebTestRunner::WebTestProxyBase::shouldInsertText):
        (WebTestRunner::WebTestProxyBase::shouldChangeSelectedRange):
        (WebTestRunner::WebTestProxyBase::shouldDeleteRange):
        (WebTestRunner::WebTestProxyBase::shouldApplyStyle):
        (WebTestRunner::WebTestProxyBase::didBeginEditing):
        (WebTestRunner::WebTestProxyBase::didChangeSelection):
        (WebTestRunner::WebTestProxyBase::didChangeContents):
        (WebTestRunner::WebTestProxyBase::didEndEditing):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        (TestShell::createNewWindow):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::shouldBeginEditing):
        (WebViewHost::shouldEndEditing):
        (WebViewHost::shouldInsertNode):
        (WebViewHost::shouldInsertText):
        (WebViewHost::shouldChangeSelectedRange):
        (WebViewHost::shouldDeleteRange):
        (WebViewHost::shouldApplyStyle):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-12-17  Jochen Eisinger  <jochen@chromium.org>

        [chromium] Fix methods in TestRunner that directly modify the settings instead of going through WebPreferences
        https://bugs.webkit.org/show_bug.cgi?id=105154

        Reviewed by Tony Chang.

        If the settings are modified directly, the embedder can't keep track of
        them and might accidentially override the changed settings.

        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
        (WebPreferences):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::setAsynchronousSpellCheckingEnabled):
        (WebTestRunner):
        (WebTestRunner::TestRunner::setMinimumTimerInterval):
        (WebTestRunner::TestRunner::setTouchDragDropEnabled):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        (WebTestRunner::WebPreferences::applyTo):

2012-12-17  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed unit test skipping.

        Filed https://bugs.webkit.org/show_bug.cgi?id=105253 to re-enable them.

        * TestWebKitAPI/Tests/WTF/MathExtras.cpp:
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2012-12-17  Dean Jackson  <dino@apple.com>

        Unreviewed. Add Silvia Pfeiffer to contributor list.

        * Scripts/webkitpy/common/config/committers.py:

2012-12-17  Dirk Pranke  <dpranke@chromium.org>

        build.webkit.org - add more google windows bots
        https://bugs.webkit.org/show_bug.cgi?id=105225

        Reviewed by Eric Seidel.

        Adds two more windows bots (google-windows-3, a builder, and
        google-windows-4, a tester) for the Chromium configs.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2012-12-17  Eric Seidel  <eric@webkit.org>

        Cleanup --profiler=perf code a little and allow up to 1000 report files (instead of 100)
        https://bugs.webkit.org/show_bug.cgi?id=105217

        Reviewed by Dirk Pranke.

        Previously --profile would fail strangely if find_unused_filename returned None
        (which would happen as soon as we had 100 report files).
        Now we'll search through 1000 filenames before giving up (and assert if we failed to find one).
        I also made some minor cleanups to the output of perf, and tried to make the
        commands more self-documenting by using long-names for args.

        * Scripts/webkitpy/common/system/profiler.py:
        (SingleFileOutputProfiler.__init__):
        (Perf.attach_to_pid):
        (Perf.profile_after_exit):

2012-12-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137198.
        http://trac.webkit.org/changeset/137198
        https://bugs.webkit.org/show_bug.cgi?id=105212

        This patch is causing API behavior compatibility problems
        (Requested by zdobersek on #webkit).

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (willSendRequestCallback):

2012-12-17  Elliott Sprehn  <esprehn@chromium.org>

        Unreviewed. Adding myself to committers list.

        * Scripts/webkitpy/common/config/committers.py:

2012-12-17  Dirk Pranke  <dpranke@chromium.org>

        nrwt: shuffle code around for cleanup in run_webkit_tests.py
        https://bugs.webkit.org/show_bug.cgi?id=105078

        Reviewed by Ojan Vafai.

        This patch reorders functions so that run_webkit_tests can be
        understood in a top-down matter better, and to make things slightly
        more sensible when I merge manager.py into it.

        Also, this adds tests for the actual main() routine, which had several
        bugs get through testing a week or two ago.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main):
        (parse_args):
        (_set_up_derived_options):
        (run):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest):
        (RunTest.test_no_http_tests):
        (PortTest.disabled_test_mac_lion):
        (MainTest):
        (MainTest.test_exception_handling):
        (MainTest.test_exception_handling.interrupting_run):
        (MainTest.test_exception_handling.successful_run):
        (MainTest.test_exception_handling.successful_run.FakeRunDetails):
        (MainTest.test_exception_handling.exception_raising_run):

2012-12-17  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: move --lint-test-files code into its own module
        https://bugs.webkit.org/show_bug.cgi?id=105077

        Reviewed by Eric Seidel.

        It really didn't need to be in run_webkit_tests.py anymore.
        This patch adds a new lint-test-expectations scripts to Tools/Scripts;
        rwt --lint-test-files is still supported for backwards compatibility
        for now.

        * Scripts/lint-test-expectations: Added.
        * Scripts/webkitpy/layout_tests/lint_test_expectations.py: Added.
        (lint):
        (main):
        * Scripts/webkitpy/layout_tests/lint_test_expectations_unittest.py: Added.
        (FakePort):
        (FakePort.__init__):
        (FakePort.test_configuration):
        (FakePort.expectations_dict):
        (FakePort.skipped_layout_tests):
        (FakePort.all_test_configurations):
        (FakePort.configuration_specifier_macros):
        (FakePort.get_option):
        (FakeFactory):
        (FakeFactory.__init__):
        (FakeFactory.get):
        (FakeFactory.all_port_names):
        (LintTest):
        (LintTest.test_all_configurations):
        (LintTest.test_lint_test_files):
        (LintTest.test_lint_test_files__errors):
        (MainTest):
        (MainTest.test_success):
        (MainTest.test_success.interrupting_lint):
        (MainTest.test_success.successful_lint):
        (MainTest.test_success.exception_raising_lint):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (StreamTestingMixin.assertNotEmpty):

2012-12-17  Adam Klein  <adamk@chromium.org>

        build-webkit: rename --template-tag to --template-element to match ENABLE #define name
        https://bugs.webkit.org/show_bug.cgi?id=105072

        Reviewed by Laszlo Gombos.

        * Scripts/webkitperl/FeatureList.pm:

2012-12-17  Julien Chaffraix  <jchaffraix@webkit.org>

        Add some unit testing for WTF::clampTo* functions
        https://bugs.webkit.org/show_bug.cgi?id=105060

        Reviewed by Emil A Eklund.

        The new tests are targeted at clamping to int / unsigned and float as those are
        the one explicitely exposed through more dedicated functions (like clampToInteger,
        clampToPositiveInteger and clampToFloat).

        * TestWebKitAPI/Tests/WTF/MathExtras.cpp:

2012-12-17  Eric Seidel  <eric@webkit.org>

        rpt --profile --chromium-android throws exception
        https://bugs.webkit.org/show_bug.cgi?id=105061

        Reviewed by Daniel Bates.

        Somehow popen(args) got turned into popen(*args) at some point,
        which caused my new stringify code to fail when args was passed by name.
        Fixed and tested.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive._stringify_args):
        (Executive):
        (Executive.popen):
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_popen_args):

2012-12-17  Mark Pilgrim  <pilgrim@chromium.org>

        Use Platform::current() instead of webKitPlatformSupport() in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=105054

        Reviewed by Jochen Eisinger.

        Part of a refactoring series; see tracking bug 82948.

        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::show):
        * DumpRenderTree/chromium/Task.cpp:
        (postTask):
        * DumpRenderTree/chromium/TestRunner/src/WebTestPlugin.cpp:

2012-12-17  Emil A Eklund  <eae@chromium.org>

        Clamp values in LayoutUnit::operator/ when SATURATED_LAYOUT_ARITHMETIC is enabled
        https://bugs.webkit.org/show_bug.cgi?id=104955

        Reviewed by Julien Chaffraix.

        Add tests for LayoutUnit.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/ForwardingHeaders: Added.
        * TestWebKitAPI/ForwardingHeaders/WebCore: Added.
        * TestWebKitAPI/ForwardingHeaders/WebCore/LayoutUnit.h: Added.
        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:
        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/LayoutUnit.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2012-12-17  Jochen Eisinger  <jochen@chromium.org>

        [chromium] removed unused preferences from testRunner.overridePreference
        https://bugs.webkit.org/show_bug.cgi?id=105169

        Reviewed by Tony Chang.

        Most notably this removes the code related to font family maps which is
        now handled via window.internals.settings

        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
        (WebPreferences):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::overridePreference):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::applyTo):

2012-12-17  James Robinson  <jamesr@chromium.org>

        [chromium] Move creation of WebLayerTreeView to WebWidgetClient
        https://bugs.webkit.org/show_bug.cgi?id=105071

        Reviewed by Adrienne Walker.

        Update WebViewHost for the new WebWidgetClient interface.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::initializeLayerTreeView):
        (WebViewHost::layerTreeView):
        (WebViewHost::~WebViewHost):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-12-17  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][WK2] window_create doesn't receive the url
        https://bugs.webkit.org/show_bug.cgi?id=105184

        Reviewed by Alexis Menard.

        * MiniBrowser/efl/main.c: Use the url supplied to window_create
        (on_window_create):

2012-12-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: MemoryInstrumentation doesn't detect reportMemoryUsage method defined in a base class.
        https://bugs.webkit.org/show_bug.cgi?id=105026

        Reviewed by Yury Semikhatsky.

        Old SFINAE test was replaced with new one based on this article:
        http://stackoverflow.com/questions/1966362/sfinae-to-check-for-inherited-member-functions

        New test which covers this problem was added.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:

2012-12-17  Anthony Scian  <ascian@rim.com>

        [Blackberry] Static code analysis warning fixes
        https://bugs.webkit.org/show_bug.cgi?id=105129

        Reviewed by Rob Buis.

        Added null checks for fopen calls, no recovery attempted; access fault prevention only.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::createFile):
        (BlackBerry::WebKit::DumpRenderTree::runTest):

2012-12-17  John Mellor  <johnme@chromium.org>

        Add Anton Vayvod and Tim Volodine as contributors in committers.py
        https://bugs.webkit.org/show_bug.cgi?id=105025

        Unreviewed. Adds two contributors to committers.py.
        They are initially contributing to the Text Autosizing feature (master bug: 84186).

        * Scripts/webkitpy/common/config/committers.py:

2012-12-17  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        Unreviewed, add myself to committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2012-12-17  Oswald Buddenhagen  <oswald.buddenhagen@digia.com>

        [Qt] remove some unnecessary CONFIG additions

        Reviewed by Simon Hausmann.

        qt is already added by spec_pre.prf, warn_on and depend_includepath by
        default_pre.prf.

        * qmake/mkspecs/features/default_post.prf:

2012-12-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed, rolling out r137892.
        http://trac.webkit.org/changeset/137892
        https://bugs.webkit.org/show_bug.cgi?id=105026

        it broke compilation on windows

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:

2012-12-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: MemoryInstrumentation doesn't detect reportMemoryUsage method defined in a base class.
        https://bugs.webkit.org/show_bug.cgi?id=105026

        Reviewed by Yury Semikhatsky.

        Old SFINAE test was replaced with new one based on this article:
        http://stackoverflow.com/questions/1966362/sfinae-to-check-for-inherited-member-functions

        New test which covers this problem was added.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:

2012-12-17  Oswald Buddenhagen  <oswald.buddenhagen@digia.com>

        [Qt] rely on automatic output directory setup

        Reviewed by Simon Hausmann.

        Now being a proper qt module (by virtue of having load(qt_build_config)
        in .qmake.conf), webkit gets the path setup goodies for free.

        This also fixes Makefile.api.Debug/Release trying to generate qrc_WebKit.cpp
        at the same time, instead of the debug and release version ending up in different
        directories as they should.

        * qmake/mkspecs/features/default_pre.prf:

2012-12-17  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Need to re-enable video track
        https://bugs.webkit.org/show_bug.cgi?id=105155

        Reviewed by George Staikos.

        Just enable Video Track for BlackBerry.

        * Scripts/webkitperl/FeatureList.pm:

2012-12-17  János Badics  <jbadics@inf.u-szeged.hu>

        Unreviewed. Added myself to committers.py

        * Scripts/webkitpy/common/config/committers.py:

2012-12-17  Jonathan Liu  <net147@gmail.com>

        Fix linking of libraries with -Wl,-whole-archive
        https://bugs.webkit.org/show_bug.cgi?id=104436

        Reviewed by Simon Hausmann.

        If there is more than one library in LIBS linked with
        -Wl,-whole-archive -l... -Wl,-no-whole-archive, qmake tries to
        merge the duplicate flags in LIBS which causes linking to fail.

        Add no_smart_library_merge to CONFIG to prevent the duplicate
        flags from being removed when using -Wl,-whole-archive.

        * qmake/mkspecs/features/functions.prf:

2012-12-16  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Adapt to new BlackBerry::Platform::TouchPoint API
        https://bugs.webkit.org/show_bug.cgi?id=105143
        RIM PR 171941

        Reviewed by Rob Buis.
        Internally reviewed by George Staikos.

        Adapt to new method names and encapsulation of TouchPoint data members.

        * DumpRenderTree/blackberry/EventSender.cpp:
        (addTouchPointCallback):
        (updateTouchPointCallback):
        (touchEndCallback):
        (releaseTouchPointCallback):
        (sendTouchEvent):

2012-12-16  Maciej Stachowiak  <mjs@apple.com>

        Add a script to compute the mean and 95% confidence interval (using two-sided t-test) of a sample set
        https://bugs.webkit.org/show_bug.cgi?id=105148

        Reviewed by Filip Pizlo.

        Usage examples:
        
        $ sampstat --help
        Usage: sampstat [options] [FILES]
          Compute the mean and 95% confidence interval of a sample set.
          Standard input or files must contain two or more decimal numbers, one per line.
        
        Options:
          -h, --help            show this help message and exit
          -u UNIT, --unit=UNIT  assume values are in units of UNIT
          -v, --verbose         print all values (with units)
        
        $ sampstat -u MB memresults.txt
        2356.90 MB +/- 101.34 MB (4.3%)
        
        $ sampstat -v -u MB memresults.txt
              2318.21 MB
              2399.56 MB
              2352.93 MB
        ----------------
        Mean: 2356.90 MB +/- 101.34 MB (4.3%)
        

        * Scripts/sampstat: Added.
        (sum): Helper function to compute the sum of a list.
        (arithmeticMean): Compute the meam of a list.
        (standardDeviation): Compute the sample standard deviation (unbiased estimator).
        (standardError): Compute the sample standard error.
        (tDist): Compute t(.025, n-1), the t-value for atwo-sided 95% confidence interval. 
        (twoSidedConfidenceInterval): Compute the two-sided confidence interval range about the mean.

2012-12-15  Nima Ghanavatian  <nghanavatian@rim.com>

        [BlackBerry] Pass key modifiers with touch and mouse events
        https://bugs.webkit.org/show_bug.cgi?id=105108

        Reviewed by Rob Buis.

        Update DRT to new api.

        Internally reviewed by Gen Mak.

        * DumpRenderTree/blackberry/EventSender.cpp:
        (mouseDownCallback):
        (mouseUpCallback):
        (mouseMoveToCallback):

2012-12-15  Zan Dobersek  <zandobersek@gmail.com>

        Stop the XvfbDriver before proceeding with its starting setup
        https://bugs.webkit.org/show_bug.cgi?id=105006

        Reviewed by Philippe Normand.

        Just as with the base Driver implementation, stop the XvfbDriver
        before proceeding with setting up lock files and a new Xvfb instance.
        This forces any driver or Xvfb instances that are currently under
        the driver's control to be closed/killed and cleaned up after.

        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        (XvfbDriver._start):

2012-12-14  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: make port_name a required parameter to the non-test ports
        https://bugs.webkit.org/show_bug.cgi?id=105057

        Reviewed by Eric Seidel.

        This is just minor code cleanup along the path to making Port
        constructors simpler and pushing more logic into the port factory.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.make_port):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (TestWebKitPort.__init__):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort):
        (TestPort.determine_full_port_name):
        (TestPort.__init__):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.make_driver):
        (XvfbDriverTest.test_stop):

2012-12-14  Dirk Pranke  <dpranke@chromium.org>

        garden-o-matic doesn't know about reftests
        https://bugs.webkit.org/show_bug.cgi?id=101976

        Reviewed by Eric Seidel.

        Attempt to make garden-o-matic properly aware of reftests again.

        This is re-landing r137407 with a change to
        rebaselineWithStatusUpdates() to actually pass the filtered
        failureInofLost to checkout.rebaseline().

        Unfortunately, the testing coverage for this whole module is almost
        non-existent, and it's not obvious that there's a good way to
        stub out checkout.rebaseline() to test that the right thing
        happens. I verified the change manually.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results_unittests.js:

2012-12-14  Ryosuke Niwa  <rniwa@webkit.org>

        "Running 1 DumpRenderTree over X shards" is not a helpful output
        https://bugs.webkit.org/show_bug.cgi?id=104858

        Reviewed by Dirk Pranke.

        The word "shard" is not typically used in test frameworks. This word is confusing for many WebKit
        contributors who typically don't have much experience on distributed computations and databases.
        So only print this message out in the debug mode.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_workers_and_shards):

2012-12-13  Eric Seidel  <eric@webkit.org>

        Add --profiler=PROFILER option to run-perf-tests to allow specifying which profiler to use on platforms with many
        https://bugs.webkit.org/show_bug.cgi?id=104891

        Reviewed by Ryosuke Niwa.

        I also implemented a very simple "Sample" Profiler using
        Mac OS X's /usr/bin/sample command line tool.

        The real reason for this abstraction is to make it easy
        to support both perf and pprof on linux which seem to
        be about equally popular among those I ask in the Chrome team.

        * Scripts/webkitpy/common/system/profiler.py:
        (ProfilerFactory.create_profiler):
        (ProfilerFactory):
        (ProfilerFactory.available_profilers_by_name):
        (ProfilerFactory.default_profiler_name):
        (Sample):
        (Sample.__init__):
        (Sample.attach_to_pid):
        (Sample.profile_after_exit):
        (IProfiler.attach_to_pid):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.__init__):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):

2012-12-13  Eric Seidel  <eric@webkit.org>

        Unreviewed, fixing typo in python unittest.

        I changed the default profiler on linux from pprof to perf in
        bug 104971.  I failed to update the unittest results at that time.

        * Scripts/webkitpy/common/system/profiler_unittest.py:
        (ProfilerFactoryTest.test_basic):

2012-12-13  Ian Vollick  <vollick@chromium.org>

        [chromium] Add a virtual test suite for enabling opt-in to composited scrolling
        https://bugs.webkit.org/show_bug.cgi?id=104911

        Reviewed by Dirk Pranke.

        Adds two virtual tests suites to run the tests in
        compositing/overflow/ and scrollbars/ with the flag
        --enable-accelerated-overflow-scroll, which I've also plumbed through
        in the usual way.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
        (WebPreferences):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
        (WebTestRunner::WebPreferences::reset):
        (WebTestRunner::WebPreferences::applyTo):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setAcceleratedCompositingForOverflowScrollEnabled):
        (TestShell):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.virtual_test_suites):

2012-12-13  Eric Seidel  <eric@webkit.org>

        Use 'perf' to profile on linux instead of google-pprof by default
        https://bugs.webkit.org/show_bug.cgi?id=104971

        Reviewed by Dirk Pranke.

        This makes Chromium Linux match Chromium Android and use the perf
        tool by default.  Once https://bugs.webkit.org/show_bug.cgi?id=104891
        lands it will be possible to use pprof again on Linux.

        This is slightly more advanced than the AndroidPerf profiler as
        instead of using a timeout on "perf record" I instead watch
        for the termination of the target process and then control-C
        the 'perf record' process.  This required me to add two new
        methods to Executive, one to have a limited-time wait() and
        the second to be able to send a control-C.  I chose to add
        these to Executive to make them easier to mock/fix-for-win32
        at a later time if needed.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.wait_limited):
        (Executive.interrupt):
        * Scripts/webkitpy/common/system/profiler.py:
        (ProfilerFactory.create_profiler):
        (Perf):
        (Perf.__init__):
        (Perf._perf_path):
        (Perf.attach_to_pid):
        (Perf._first_ten_lines_of_profile):
        (Perf.profile_after_exit):

2012-12-13  Julie Parent  <jparent@chromium.org>

        Dashboard cleanup: remove usage of global g_builders.
        https://bugs.webkit.org/show_bug.cgi?id=104941

        Reviewed by Dirk Pranke.

        The dashboards use a lot of global state, which makes hacking on them
        complicated. This change removes the use of one such global: g_builders.
        In most cases, we can just use currentBuilderGroup().builders instead,
        which is now currentBuilders().
        Surprisingly, the most changes were required to the unit tests, since
        they were even bigger offenders of bad hygiene, relying on global state
        set by other tests, randomly clobbering global variables in ways the
        real code doesn't, etc.

        * TestResultServer/static-dashboards/builders.js:
        (BuilderGroup.prototype.setup):
        * TestResultServer/static-dashboards/dashboard_base.js:
        (.switch.return):
        (htmlForTestTypeSwitcher):
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (generatePage):
        (getAllTestsTrie):
        (processTestRunsForAllBuilders):
        (showPopupForBuild):
        (generatePageForExpectationsUpdate):
        (loadExpectationsLayoutTests):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (resetGlobals):
        (stubResultsByBuilder):
        (test):
        * TestResultServer/static-dashboards/loader.js:
        (.):
        * TestResultServer/static-dashboards/loader_unittests.js:

2012-12-13  Eric Seidel  <eric@webkit.org>

        Callers should not have to stringify args before calling Executive run_command/popen
        https://bugs.webkit.org/show_bug.cgi?id=104975

        Reviewed by Dirk Pranke.

        One could argue that we should match the python call syntax here,
        but I think it's a more friendly API if we automagically handle
        stringification of args in run_command, etc.
        This removes map(unicode, args) from several callsites.

        When I first tried to land this change, I didn't realize that
        Executive._command_for_printing depended on this behavior
        having been applied to args in run_command.  The fix is to
        call _stringify_args in both run_command and popen.
        This is slightly redundant, but given how short args have to be
        (due to shell limits), I don't think the double-encode check
        matters in practice.

        This is slightly complicated by the fact that apache_http_server.py
        is the one caller in our codebase which uses shell=True.
        shell=True is a well-documented trail-of-tears:
        http://stackoverflow.com/questions/3172470/actual-meaning-of-shell-true-in-subprocess
        but to support this legacy (windows-only) code (which I can't easily test)
        I've added an if-hack to avoid stringifying the the popen(shell=True) case.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.run_command):
        (Executive._stringify_args):
        (Executive.popen):
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_auto_stringify_args):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (attach_to_pid):

2012-12-13  Adrienne Walker  <enne@chromium.org>

        Unreviewed, rolling out r137645, r137646, and r137667.
        http://trac.webkit.org/changeset/137645
        http://trac.webkit.org/changeset/137646
        http://trac.webkit.org/changeset/137667
        https://bugs.webkit.org/show_bug.cgi?id=104911

        Breaks some overflow layout tests

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.virtual_test_suites):

2012-12-13  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, rolling out r137661.
        http://trac.webkit.org/changeset/137661
        https://bugs.webkit.org/show_bug.cgi?id=104891

        broke unit tests, run-webkit-tests

        * Scripts/webkitpy/common/system/executive.py:
        (Executive._run_command_with_teed_output):
        (Executive.run_command):
        (Executive.popen):
        * Scripts/webkitpy/common/system/profiler.py:
        (ProfilerFactory.create_profiler):
        (GooglePProf.profile_after_exit):
        (IProfiler.attach_to_pid):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.__init__):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):

2012-12-13  Dirk Pranke  <dpranke@chromium.org>

        nrwt: move rundetails, summarize_results into test_run_results
        https://bugs.webkit.org/show_bug.cgi?id=104963

        Reviewed by Eric Seidel.

        More cleanup; this the plain-old-data functions out of manager.py
        and into test_run_results next to the other aggregate data structures.

        Also this cleans up a bunch of test code and reduces duplication.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_look_for_new_crash_logs):
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (TestRunResults.__init__):
        (TestRunResults.add):
        (RunDetails):
        (RunDetails.__init__):
        (_interpret_test_failures):
        (summarize_results):
        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py: Added.
        (get_result):
        (run_results):
        (summarized_results):
        (InterpretTestFailuresTest):
        (InterpretTestFailuresTest.setUp):
        (InterpretTestFailuresTest.test_interpret_test_failures):
        (SummarizedResultsTest):
        (SummarizedResultsTest.setUp):
        (SummarizedResultsTest.test_no_svn_revision):
        (SummarizedResultsTest.test_svn_revision):
        (SummarizedResultsTest.test_summarized_results_wontfix):
        * Scripts/webkitpy/layout_tests/views/buildbot_results_unittest.py:
        (BuildBotPrinterTests.get_printer):
        (BuildBotPrinterTests.test_print_unexpected_results):
        (BuildBotPrinterTests.test_print_results):

2012-12-13  Eric Seidel  <eric@webkit.org>

        Make --profile output easier to understand for pprof on linux
        https://bugs.webkit.org/show_bug.cgi?id=104957

        Reviewed by Dirk Pranke.

        pprof is kinda mysterious, so we print some information
        on how to use it, and how to learn how to read the sample dump.
        This is similar to what we've done for perf output for Chromium Android.

        * Scripts/webkitpy/common/system/profiler.py:
        (GooglePProf._pprof_path):
        (GooglePProf.profile_after_exit):

2012-12-13  Dirk Pranke  <dpranke@chromium.org>

        Revert r137407 - it didn't actually work right.
        https://bugs.webkit.org/show_bug.cgi?id=101976

        Unreviewed, build fix.

        Turns out that rebaselining was completely broken with this change :(
        We're passing in a list of test names rather than the list of
        failureInfo objects.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results_unittests.js:

2012-12-13  Antoine Labour  <piman@chromium.org>

        [chromium] Small fixes for WebPluginContainer::setWebLayer
        https://bugs.webkit.org/show_bug.cgi?id=104953

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/TestRunner/src/WebTestPlugin.cpp: Clean up
        dangling pointers, force correct invalidation of the layer.

2012-12-13  Eric Seidel  <eric@webkit.org>

        Add --profiler=PROFILER option to run-perf-tests to allow specifying which profiler to use on platforms with many
        https://bugs.webkit.org/show_bug.cgi?id=104891

        Reviewed by Dirk Pranke.

        I also implemented a very simple "Sample" Profiler using
        Mac OS X's /usr/bin/sample command line tool.

        I also moved the map(unicode, args) call into Executive.popen
        so that all callers don't have to do it themselves.

        The real reason for this abstraction is to make it easy
        to support both perf and pprof on linux which seem to
        be about equally popular among those I ask in the Chrome team.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.popen):
        * Scripts/webkitpy/common/system/profiler.py:
        (ProfilerFactory.create_profiler):
        (ProfilerFactory):
        (ProfilerFactory.available_profilers_by_name):
        (ProfilerFactory.default_profiler_name):
        (Sample):
        (Sample.__init__):
        (Sample.attach_to_pid):
        (Sample.profile_after_exit):
        (IProfiler.attach_to_pid):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.__init__):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):

2012-12-13  Dirk Pranke  <dpranke@chromium.org>

        support -wk2 port names properly in webkitpy.layout_tests.port
        https://bugs.webkit.org/show_bug.cgi?id=104761

        Reviewed by Eric Seidel.

        Our support for WK2 port names was inconsistent at best; this patch
        modifies the code so that <port_name>-wk2 is supported for all ports that
        have WK2 implementations and is equivalent to specifying <port_name>
        and -2/--webkit-test-runner. In addition, this modifies
        builders.all_port_names() to include the wk2 variants.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.determine_full_port_name):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.determine_full_port_name):
        (Port.__init__):
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverTest.make_port):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.default_baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort.default_baseline_search_path):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineExpectations.test_rebaseline_expectations):

2012-12-13  Ian Vollick  <vollick@chromium.org>

        [chromium] Add a virtual test suite for enabling opt-in to composited scrolling
        https://bugs.webkit.org/show_bug.cgi?id=104911

        Reviewed by Adrienne Walker.

        Adds two virtual tests suites to run the tests in
        compositing/overflow/ and scrollbars/ with the flag
        --enable-accelerated-compositing-for-overflow-scroll

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.virtual_test_suites):

2012-12-13  Dirk Pranke  <dpranke@chromium.org>

        delete extraneous self.fail in mastercfg_unittest.py
        https://bugs.webkit.org/show_bug.cgi?id=104940

        Reviewed by Eric Seidel.

        This was accidentally introduced in r137404.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:

2012-12-13  Dirk Pranke  <dpranke@chromium.org>

        Fix a mis-named variable after r137621.
        https://bugs.webkit.org/show_bug.cgi?id=104871

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/views/buildbot_results.py:
        (BuildBotPrinter.print_results):
        * Scripts/webkitpy/layout_tests/views/buildbot_results_unittest.py:

2012-12-13  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: rename ResultSummary
        https://bugs.webkit.org/show_bug.cgi?id=104871

        Reviewed by Eric Seidel.

        This patch changes the names of ResultSummary and related modules,
        classes, and variables as a part of the larger clean up in bug 103824.

        This change is basically a bunch of search and replaces:
        - result_summary.py -> test_run_results.py
        - class ResultSummary -> class TestRunResults
        - "result_summary" or "rs" as a generic variable name -> "run_results",
          when it doesn't matter (or we don't know) if this refers to the
          initial pass over the tests or the retry pass.
        - "result_summary" as a variable containing the results of the initial,
          complete test run -> "initial_results"
        - "retry_summary" as a variable containing the results of retried
          results -> "retry_results"
        - ResultSummary.results (the property) -> TestRunResults.results_by_name
        - ResultSummary.failures (the property) -> TestRunResults.failures_by_name
        - RunDetails.result_summary -> RunDetails.initial_results
        - RunDetails.retry_summary -> RunDetails.retry_results

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.__init__):
        (LayoutTestRunner.run_tests):
        (LayoutTestRunner._mark_interrupted_tests_as_skipped):
        (LayoutTestRunner._interrupt_if_at_failure_limits):
        (LayoutTestRunner._interrupt_if_at_failure_limits.interrupt_if_at_failure_limit):
        (LayoutTestRunner._update_summary_with_result):
        (LayoutTestRunner._handle_finished_test):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (FakePrinter.print_expected):
        (LayoutTestRunnerTests.test_interrupt_if_at_failure_limits):
        (LayoutTestRunnerTests.test_update_summary_with_result):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (RunDetails.__init__):
        (summarize_results):
        (Manager.run):
        (Manager._look_for_new_crash_logs):
        (Manager._tests_to_retry):
        (Manager._upload_json_files):
        (Manager._stats_trie):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_look_for_new_crash_logs):
        (SummarizeResultsTest):
        (SummarizeResultsTest.get_run_results):
        (SummarizeResultsTest.summarized_results):
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator.__init__):
        (JSONLayoutResultsGenerator._get_modifier_char):
        (JSONLayoutResultsGenerator._insert_failure_summaries):
        (JSONLayoutResultsGenerator._get_failure_summary_entry):
        * Scripts/webkitpy/layout_tests/models/test_run_results.py: Renamed from Tools/Scripts/webkitpy/layout_tests/models/result_summary.py.
        (TestRunResults):
        (TestRunResults.__init__):
        (TestRunResults.add):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (get_test_results):
        (MainTest.test_basic):
        * Scripts/webkitpy/layout_tests/views/buildbot_results.py:
        (BuildBotPrinter.print_results):
        (BuildBotPrinter.print_run_results):
        (BuildBotPrinter._print_run_results_entry):
        * Scripts/webkitpy/layout_tests/views/buildbot_results_unittest.py:
        (BuildBotPrinterTests.get_run_results):
        (BuildBotPrinterTests.test_print_unexpected_results.get_unexpected_results):
        (BuildBotPrinterTests):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_expected):
        (Printer._print_expected_results_of_type):
        (Printer.print_results):
        (Printer._print_timing_statistics):
        (Printer._print_worker_statistics):
        (Printer._print_aggregate_test_statistics):
        (Printer._print_individual_test_times):
        (Printer._print_directory_timings):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:

2012-12-13  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] The WebKit2 bots are building and executing WebKit1 tests
        https://bugs.webkit.org/show_bug.cgi?id=104690

        Reviewed by Csaba Osztrogonác.

        Pass --no-webkit1 option to the EFL WK2 bots when building. This
        will disable WK1 API and thus, the WK1 API tests.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (CompileWebKit2Only):
        (BuildAndTestFactory):
        (BuildAndTestFactory.__init__):
        (BuildAndTestWebKit2OnlyFactory):
        Now bots using BuildAndTestWebKit2OnlyFactory (for instance only EFL) will
        get --no-webkit1 as a parameter on the build-webkit script.
        * Scripts/build-webkit:
        Added support for -no-webkit1 for the Qt and EFL port.

2012-12-13  Eric Seidel  <eric@webkit.org>

        build-webkit --chromium-android forces Make even when update-webkit used --ninja
        https://bugs.webkit.org/show_bug.cgi?id=104839

        Reviewed by Tony Chang.

        This was recommended by Peter as part of:
        https://bugs.webkit.org/show_bug.cgi?id=104434#c4
        Fixing this makes build-webkit --chromium-android work for the common (ninja) case.

        * Scripts/webkitdirs.pm:
        (buildChromium):

2012-12-13  Julie Parent  <jparent@chromium.org>

        Loader_unittests should reset state between runs.
        https://bugs.webkit.org/show_bug.cgi?id=104862

        Reviewed by Dirk Pranke.

        The loader_unittests were not resetting state between runs, leaving
        a lot of data behind in global objects that the dashboard and tests
        rely on.  A handful were resetting just a few objects.  Use the common
        resetGlobals() method instead.

        * TestResultServer/static-dashboards/loader_unittests.js:

2012-12-13  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Fix painting on Mac with retina display
        https://bugs.webkit.org/show_bug.cgi?id=104574

        Reviewed by Kenneth Rohde Christiansen.

        Remove setting the devicePixelRatio experimental property
        since the value is now automatically picked up from Qt.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-12-13  Jussi Kukkonen  <jussi.kukkonen@intel.com>

        [EFL][GTK] Don't call deprecated g_type_init when glib => 2.35
        https://bugs.webkit.org/show_bug.cgi?id=103209

        Reviewed by Kenneth Rohde Christiansen.

        g_type_init() is deprecated from 2.35.0 onwards. Don't call it
        in that case to avoid warnings and/or build failure.

        * DumpRenderTree/gtk/ImageDiff.cpp:
        (main):

2012-12-13  Claudio Saavedra  <csaavedra@igalia.com>

        [Tools] Add exception for gtk_style_context_get()
        https://bugs.webkit.org/show_bug.cgi?id=104896

        Reviewed by Martin Robinson.

        Add new exception for gtk_style_context_get().

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_null): Add exception for gtk_style_context_get().
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_null_false_zero): Add a unit
        test for the new exception.

2012-12-13  Joaquim Rocha  <jrocha@igalia.com>

        REGRESSION (r137432): The /webkit2/WebKitCookieManager/accept-policy unit test is failing
        https://bugs.webkit.org/show_bug.cgi?id=104790

        Reviewed by Carlos Garcia Campos.

        Unskip the GTK accept policy test.

        * Scripts/run-gtk-tests:
        (TestRunner):

2012-12-13  Xingnan Wang  <xingnan.wang@intel.com>

        Unreviewed. Adding myself to committers list.

        * Scripts/webkitpy/common/config/committers.py:

2012-12-12  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Fix typo in NRWT.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.is_reference_html_file):

2012-12-12  Roger Fong  <roger_fong@apple.com>

        Fix detection of ref test files in old and new run webkit tests.
        https://bugs.webkit.org/show_bug.cgi?id=104850.

        Reviewed by Timothy Horton.

        * Scripts/old-run-webkit-tests:
        (isUsedInReftest): 
        Add notref and ref prefix and suffix cases to isUsedinReftest.
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port):
        (Port.is_reference_html_file): 
        Typo in NRWT.

2012-12-12  Dirk Pranke  <dpranke@chromium.org>

        rework ChromiumAndroidDriver.start() et. al to avoid funky layering
        https://bugs.webkit.org/show_bug.cgi?id=104856

        Reviewed by Eric Seidel.

        r137523 / bug 10357 introduced some back-and-forth hopping during
        driver.start() in the chromium android port. This patch cleans it
        up a bit.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._start_once):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.start):
        (Driver._start):

2012-12-12  Eric Seidel  <eric@webkit.org>

        Add support for run-perf-tests --chromium-android --profile
        https://bugs.webkit.org/show_bug.cgi?id=103587

        Reviewed by Dirk Pranke.

        This makes it possible to profile PerformanceTests on an Android device
        using run-perf-tests --chromium-android --profile.
        CPU profiling on Android is sadly non-trivial, but this goes a long
        ways towards making it more accessible to non-Android developers.

        Although this script requires your device to be flashed with a
        userdebug build (an annoyingly non-trivial endeavor for external contributors)
        it endeavors to detect and explain the common errors encountered
        while trying to setup a device for perf-based profiling.

        * Scripts/webkitpy/common/system/profiler.py:
        (GooglePProf.profile_after_exit): Discovered that pprof will just hang if passed a missing file.
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (AndroidPerf):
        (AndroidPerf.__init__):
        (AndroidPerf.check_configuration):
        (AndroidPerf.print_setup_instructions):
        (_file_exists_on_device):
        (_run_adb_command):
        (attach_to_pid):
        (_perf_version_string):
        (_find_perfhost_binary):
        (_perfhost_path):
        (_first_ten_lines_of_profile):
        (profile_after_exit):
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver.__init__.methods):
        (ChromiumAndroidDriver._find_or_create_symfs):
        (ChromiumAndroidDriver._start_once):
        (ChromiumAndroidDriver):
        (ChromiumAndroidDriver._run_post_start_tasks):
        (ChromiumAndroidDriver._pid_from_android_ps_output):
        (ChromiumAndroidDriver._pid_on_target):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidDriverTest.test_pid_from_android_ps_output):
        (AndroidPerfTest):
        (AndroidPerfTest.test_perf_output_regexp):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver._setup_environ_for_driver):
        (Driver):
        (Driver._start):
        (Driver._run_post_start_tasks):
        (Driver._pid_on_target):

2012-12-12  Dirk Pranke  <dpranke@chromium.org>

        nrwt: remove deprecated ORWT compatibility command line flags
        https://bugs.webkit.org/show_bug.cgi?id=104301

        Reviewed by Eric Seidel.

        The command line flags for --noshow-results, --[no-]launch-safari,
        and --use-remote-links-to-tests were for compatibility with
        old-run-webkit-tests, but the compatibility is not needed any more
        since NRWT is basically default and the scripts that passed the
        old flags have been updated.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        (parse_args):

2012-12-12  John Griggs  <jgriggs@rim.com>

        2012-12-12  John Griggs  <jgriggs@rim.com>

        [BlackBerry] Update Media Controls
        https://bugs.webkit.org/show_bug.cgi?id=104443
        https://przilla.ott.qnx.com/bugzilla/show_bug.cgi?id=204748

        Update Media Controls for BlackBerry platform to allow audio, embedded video and fullscreen video controls to be positioned and styled differently.

        Reviewed by Rob Buis.

        BlackBerry-specific update to Media Controls - No new tests required.

        * Scripts/webkitperl/FeatureList.pm:

2012-12-12  Justin Novosad  <junov@google.com>

        Adding myself to SkiaGraphics watchlist

        Unreviewed

        * Scripts/webkitpy/common/config/watchlist:

2012-12-12  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add authentication support to DRT and fix exposed issues in the libsoup backend
        https://bugs.webkit.org/show_bug.cgi?id=104285

        Reviewed by Gustavo Noronha Silva.

        Add support to DumpRenderTree for running authentication tests. Since the DRT
        expects an authentication callback, we add one to DRTSupport to avoid #ifdefs
        in platform-independent code for GTK+.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Reset the authentication password and username.
        (authenticationCallback): Added.
        (createWebView): Attach the authentiation callback during startup.
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        (soupURIToKURL): soup_uri_to_string does not preserve passwords embedded
        in the URL so we add a somewhat messy method of re-adding them when they exist.
        It would be nice to use soupURIToKURL here, but it seems we cannot use KURL without
        pulling in lots of WebCore code so we use string search and replace.
        (TestRunner::queueLoad): Use the new helper.

2012-12-12  Dirk Pranke  <dpranke@chromium.org>

        garden-o-matic should prefer efl/ over efl-wk1/ and efl-wk2/ when rebaselining
        https://bugs.webkit.org/show_bug.cgi?id=102389

        Reviewed by Tony Chang.

        The code wasn't aware of both the efl-wk1 and efl-wk2 variants,
        because all_port_names() by itself doesn't tell you about the
        variants. Work around this for now, and filed bug 104761 to
        address the underlying problem.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        (BaselineOptimizerTest.test_efl):

2012-12-12  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Possibility to turn off accessibility feature for WebKit-EFL.
        https://bugs.webkit.org/show_bug.cgi?id=103036

        Reviewed by Laszlo Gombos.

        Guard dependencies for accessibility (ATK), so that they can be turned off.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * WebKitTestRunner/PlatformEfl.cmake:

2012-12-12  Simon Fraser  <simon.fraser@apple.com>

        Add some entries in the watchlist, and register me for them.

        * Scripts/webkitpy/common/config/watchlist:

2012-12-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: remove fake root MemoryObjectInfo.
        https://bugs.webkit.org/show_bug.cgi?id=104796

        Reviewed by Yury Semikhatsky.

        It was not a good idea to introduce a fake root MemoryObjectInfo.
        It makes a problem when we visit an object without its own MemoryObjectType.

        Example: RenderBox has a global pointer to a hash map.
        HashMap doesn't have its own object type because it is a generic container.
        It will inherit object type from the fake root memory object info.
        The same could happen for another container in another class with other MemoryObjectType.

        This fact forces me to create custom process method for root objects
        because they need to have their own MemoryObjectInfo with customisable memory object type.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:

        Drive by fix: InstrumentedPointer* was replaced with Wrapper* because actually it is using
        for instrumented and not instrumented object classes.

2012-12-12  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Remove the last of unnecessary configuration options in configure.ac
        https://bugs.webkit.org/show_bug.cgi?id=104793

        Reviewed by Martin Robinson.

        Removing the filters and indexed database features from the list of features
        being configurable through the configure script. This is not the case anymore
        as the corresponding configuration options are being removed.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject):

2012-12-12  Mario Sanchez Prada  <mario@webkit.org>

        [GTK][WK2] New API to detect display/execution of insecure content
        https://bugs.webkit.org/show_bug.cgi?id=104578

        Reviewed by Martin Robinson.

        Add coding style exception for 'readability/enum_casing' in GTK.

        The GTK+ API use upper case, underscore separated, words in
        certain types of enums (e.g. signals, properties).

        * Scripts/webkitpy/style/checker.py: Added exception, both for
        WebKitGTK+ and WebKit2GTK+.

2012-12-12  Jochen Eisinger  <jochen@chromium.org>

        [chromium] Fix build on chromium-win

        Unreviewed build-fix.

        MSVS indeed doesn't have snprintf, adding wtf/StringExtras.h include
        to work around that.

        * DumpRenderTree/chromium/TestRunner/src/WebTestPlugin.cpp:

2012-12-12  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix build on Mac

        Reviewed by Csaba Osztrogonác.

        On Mac OS X we have sqlite as a system library available.

        * qmake/mkspecs/features/features.prf:

2012-12-12  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed GTK gardening.

        Skipping another unit test that regressed in r137432.

        * Scripts/run-gtk-tests:
        (TestRunner):

2012-12-12  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix linkage against SQLite
        https://bugs.webkit.org/show_bug.cgi?id=104781

        Reviewed by Csaba Osztrogonác.

        Detect SQLite either through pkg-config, from the SQLITE3SRCDIR
        environment variable or from qtbase via a qt5.git build. Bail out early
        with an error message if neither option applies.

        This removes the usage of $$QT.core.sources and the dependency on Qt's
        system-sqlite configure setting. We should always favour a system
        library over a copy in Qt.

        * qmake/mkspecs/features/features.prf:

2012-12-12  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Change the data channel descriptor pattern to a handler pattern
        https://bugs.webkit.org/show_bug.cgi?id=104543

        Reviewed by Kent Tamura.

        Adding mocks to be able to test this refactoring.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/MockWebRTCDataChannelHandler.cpp: Added.
        (DataChannelReadyStateTask):
        (DataChannelReadyStateTask::DataChannelReadyStateTask):
        (MockWebRTCDataChannelHandler::MockWebRTCDataChannelHandler):
        (MockWebRTCDataChannelHandler::setClient):
        (MockWebRTCDataChannelHandler::bufferedAmount):
        (MockWebRTCDataChannelHandler::sendStringData):
        (MockWebRTCDataChannelHandler::sendRawData):
        (MockWebRTCDataChannelHandler::close):
        * DumpRenderTree/chromium/MockWebRTCDataChannelHandler.h: Added.
        (MockWebRTCDataChannelHandler):
        (MockWebRTCDataChannelHandler::taskList):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (RTCPeerConnectionReadyStateTask::RTCPeerConnectionReadyStateTask):
        (RemoteDataChannelTask::RemoteDataChannelTask):
        (MockWebRTCPeerConnectionHandler::createDataChannel):
        (MockWebRTCPeerConnectionHandler::stop):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):

2012-12-12  Jochen Eisinger  <jochen@chromium.org>

        [chromium] WebTestPlugin must not depend on WTF::String
        https://bugs.webkit.org/show_bug.cgi?id=104783

        Reviewed by Kent Tamura.

        In a component build, we can't access the WTF that is part of the
        WebKit component. Accessing WTF instead will pull in a separate copy
        into the TestRunner library. Instead of WTF::String::number use
        snprintf() to print numbers.

        * DumpRenderTree/chromium/TestRunner/src/WebTestPlugin.cpp:

2012-12-12  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Do not automatically enable force_static_libs_as_shared when using debug_and_release
        https://bugs.webkit.org/show_bug.cgi?id=104562

        Reviewed by Tor Arne Vestbø.

        force_static_libs_as_shared creates issues on Mac if QtWebKit is built as a framework.
        QtWebProcess, for example, will link to the framework's release library and will rely
        on DYLD_IMAGE_SUFFIX to switch to the debug build. Since QtWebProcess will also links
        directly to the debug build of WebCore, and that QtWebKit release will link in the
        release build of WebCore, both the debug and release version will be loaded.

        To fix this properly we should make sure that applications always link to the release
        build of dependent libraries by bypassing resolveFinalLibraryName.
        Disable it for now as force_static_libs_as_shared is mainly for development while
        debug_and_release is mainly for production builds.

        * qmake/mkspecs/features/default_post.prf:

2012-12-12  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed GTK gardening of the unit tests.

        Skip two unit tests that regressed during the hackfest.

        * Scripts/run-gtk-tests:
        (TestRunner):

2012-12-11  Ryosuke Niwa  <rniwa@webkit.org>

        Add Koji Ishii to the list of contributors.

        * Scripts/webkitpy/common/config/committers.py:

2012-12-11  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Make isActionSupported cross-platform.
        https://bugs.webkit.org/show_bug.cgi?id=104681

        Reviewed by Chris Fleizach.

        Replace isActionSupported, which takes a platform-specific
        argument, with three cross-platform methods.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (isPressActionSupportedCallback):
        (isIncrementActionSupportedCallback):
        (isDecrementActionSupportedCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * DumpRenderTree/blackberry/AccessibilityUIElementBlackBerry.cpp:
        (AccessibilityUIElement::isPressActionSupported):
        (AccessibilityUIElement::isIncrementActionSupported):
        (AccessibilityUIElement::isDecrementActionSupported):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        (WebTestRunner::AccessibilityUIElement::AccessibilityUIElement):
        (WebTestRunner::AccessibilityUIElement::isPressActionSupportedCallback):
        (WebTestRunner):
        (WebTestRunner::AccessibilityUIElement::isIncrementActionSupportedCallback):
        (WebTestRunner::AccessibilityUIElement::isDecrementActionSupportedCallback):
        (WebTestRunner::AccessibilityUIElement::incrementCallback):
        (WebTestRunner::AccessibilityUIElement::decrementCallback):
        (WebTestRunner::AccessibilityUIElement::pressCallback):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h:
        (AccessibilityUIElement):
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isPressActionSupported):
        (AccessibilityUIElement::isIncrementActionSupported):
        (AccessibilityUIElement::isDecrementActionSupported):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isPressActionSupported):
        (AccessibilityUIElement::isIncrementActionSupported):
        (AccessibilityUIElement::isDecrementActionSupported):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::isPressActionSupported):
        (AccessibilityUIElement::isIncrementActionSupported):
        (AccessibilityUIElement::isDecrementActionSupported):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::isPressActionSupported):
        (WTR::AccessibilityUIElement::isIncrementActionSupported):
        (WTR::AccessibilityUIElement::isDecrementActionSupported):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::isPressActionSupported):
        (WTR):
        (WTR::AccessibilityUIElement::isIncrementActionSupported):
        (WTR::AccessibilityUIElement::isDecrementActionSupported):

2012-12-11  Dirk Pranke  <dpranke@chromium.org>

        nrwt: remove result_summary.total_tests_by_expectation
        https://bugs.webkit.org/show_bug.cgi?id=104756

        Reviewed by Eric Seidel.

        This field wasn't being used by anything.

        * Scripts/webkitpy/layout_tests/models/result_summary.py:
        (ResultSummary.__init__):

2012-12-11  Dirk Pranke  <dpranke@chromium.org>

        garden-o-matic doesn't know about reftests
        https://bugs.webkit.org/show_bug.cgi?id=101976

        Reviewed by Ojan Vafai.

        This is a first attempt at fixing this, sort of a "stop-the-bleeding"
        fix. We will now look at the list of tests we're asked to rebaseline,
        and log which ones are reftests into the status area, and rebaseline
        the rest.

        Longer-term, we should display feedback in the results area based on
        which tests we're looking at. If the test list contains no reftests,
        we should behave as today; if the list is all reftest, we should
        probably disable the button, and if the list is a mix, we should
        probably display an alert next to the button or something. It would
        also be nice to annotate which tests were reftests, maybe with a
        "(reftest)" next to the test name or something.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results_unittests.js:

2012-12-11  Dirk Pranke  <dpranke@chromium.org>

        REGRESSION(r133380): new tests without expected file reported as failing tests on the bots
        https://bugs.webkit.org/show_bug.cgi?id=101469

        Reviewed by Ryosuke Niwa.

        Fix parsing of NRWT's output to identify missing results separately
        from other regressions.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests._parseNewRunWebKitTestsOutput):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (MasterCfgTest.test_nrwt_leaks_parsing):
        (test_nrwt_missing_results):

2012-12-11  Dirk Pranke  <dpranke@chromium.org>

        buildbot: change run-webkit-tests --no-launch-safari to --no-show-results
        https://bugs.webkit.org/show_bug.cgi?id=104299

        Reviewed by Ryosuke Niwa.

        Since --no-show-results is the more generically-named flag that NRWT uses.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests):

2012-12-11  Dirk Pranke  <dpranke@chromium.org>

        remove --use-remote-links-to-tests from buildbot configs (except apple win)
        https://bugs.webkit.org/show_bug.cgi?id=104291

        Reviewed by Csaba Osztrogonác.

        This flag is ignored by NRWT and was just implemented for compatibility.
        ORWT still uses it, though.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests):
        (RunWebKitTests.start):

2012-12-11  Anders Carlsson  <andersca@apple.com>

        ASSERT running platform/mac/plugins/convert-point.html on the WK2 bots
        https://bugs.webkit.org/show_bug.cgi?id=104735

        Reviewed by Jon Honeycutt.

        Do the testing from within NPP_New instead of NPN_SetWindow. Plug-ins aren't supposed to do any real work inside NPP_SetWindow,
        and doing so will more easily trigger the assertion failure. Ideally we should get rid of the initial sync painting pass, but this
        gets the test passing again!

        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/ConvertPoint.cpp:
        (ConvertPoint::NPP_New):

2012-12-11  Julie Parent  <jparent@chromium.org>

        Dashboard unit tests should not make xhrs.
        https://bugs.webkit.org/show_bug.cgi?id=104598

        Reviewed by Dirk Pranke.

        The unit test were requesting 25 files that they did not use.
        Stub out loader.request to avoid making the xhrs.
        Result: order of magnitude speed improvement in test run time (from ~1600ms to 160ms on my machine).
        
        * TestResultServer/static-dashboards/run-embedded-unittests.html:
        * TestResultServer/static-dashboards/run-unittests.html:

2012-12-11  Filip Pizlo  <fpizlo@apple.com>

        Profiler should show bytecode dumps as they would have been visible to the JITs, including the profiling data that the JITs would see
        https://bugs.webkit.org/show_bug.cgi?id=104647

        Reviewed by Oliver Hunt.

        Added a "profiling" (or "p") command to show the profiling data that the JITs saw
        for each JIT compilation of a code block.
        
        Also added instruction counts in the "full" display and made the "full" display the
        default thing you see.

        * Scripts/display-profiler-output:

2012-12-11  Eric Seidel  <eric@webkit.org>

        Unreviewed, rolling out r137371.
        http://trac.webkit.org/changeset/137371
        https://bugs.webkit.org/show_bug.cgi?id=104434

        Various scripts are not ready for out/ as the build directory,
        this can't work as written.

        * Scripts/update-webkit:
        * Scripts/webkitdirs.pm:
        (buildChromium):

2012-12-11  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed GTK build functionality fix.

        Turns out the CSP feature was not enabled, that's why all the tests were failing.

        * Scripts/webkitperl/FeatureList.pm:

2012-12-11  Eric Seidel  <eric@webkit.org>

        Make Ninja the default build system for build-webkit --chromium
        https://bugs.webkit.org/show_bug.cgi?id=104434

        Reviewed by Daniel Bates.

        As far as I can tell, most Chromium developers are now using Ninja
        as their default build system instead of the native Xcode/Visual Studio/Make.
        This change makes Ninja the default for developers as well as all Chromium webkit bots.

        Developers can pass --no-ninja to get the platform-native buildsystem instead of Ninja.
        It's possible we may wish to make this a per-platform default, and have
        Ninja only be the default for Mac/Linux.

        There was a thread on webkit-dev discussing this change:
        http://lists.webkit.org/pipermail/webkit-dev/2012-December/023113.html

        * Scripts/update-webkit:

2012-12-11  Dirk Pranke  <dpranke@chromium.org>

        nrwt: record the order and run times of all of the tests in a single file
        https://bugs.webkit.org/show_bug.cgi?id=104184

        Reviewed by Ryosuke Niwa.

        Replace the N tests_run*.txt files that we output into
        layout-test-results with a single packed JSON trie that contains
        the test ordering and run statistics. This can eventually be uploaded
        to the TestResultsServer to replace the times.json file we currently
        upload as well, and will let us replay the results of a previous
        run fairly deterministically.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (Worker.__init__):
        (Worker.start):
        (Worker._run_test):
        (Worker.stop):
        (Worker._clean_up_after_test):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._upload_json_files):
        (Manager._copy_results_html_file):
        (Manager):
        (Manager._stats_trie):
        (Manager._stats_trie._worker_number):
        * Scripts/webkitpy/layout_tests/models/test_results.py:
        (TestResult.__init__):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_missing_and_unexpected_results):
        (MainTest.test_retrying_and_flaky_tests):
        (EndToEndTest.test_end_to_end):
        (EndToEndTest.test_reftest_with_two_notrefs):
        (RebaselineTest.test_reset_results):
        (RebaselineTest.test_missing_results):
        (RebaselineTest.test_new_baseline):

2012-12-11  Dirk Pranke  <dpranke@chromium.org>

        check-webkit-style complaining about TestExpectations lines a patch didn't modify
        https://bugs.webkit.org/show_bug.cgi?id=104687

        Reviewed by Ojan Vafai.

        Way back in bug 60466 / r86165, we changed the style checker
        for TestExpectations to ensure that the entire file linted, not
        just the lines modified by a patch, in order to ensure that a
        new line didn't cause errors elsewhere in the file (e.g., by
        introducing duplicate lines). At the time, errors in the
        expectations files were fatal and we didn't have a separate step
        on the bots that would lint the files to ensure things were still
        okay, so this was probably the right thing to do, but it could
        cause some patches to fail the style check even though the patches
        themselves were fine.

        However, now errors aren't always fatal, and we have a separate build
        step to lint the files. So, we should probably not punish the
        patches and the style checker should filter out "unrelated" errors.

        In theory we should be comparing the output pre- and post-patch
        to filter out pre-existing errors, but I don't think the style
        checker has that ability.

        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.__init__):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.assert_lines_lint):

2012-12-11  Dirk Pranke  <dpranke@chromium.org>

        nrwt isn't rejecting unrecognized expectations
        https://bugs.webkit.org/show_bug.cgi?id=104701

        Reviewed by Ojan Vafai.

        NRWT is silently ignoring unrecognized expectations like "Text"
        and "Audio" (largely because I haven't fully removed support for
        the old syntax and keywords and restructured the code to do the
        proper checking). Temporarily change the tokenizer to reject
        unrecognized expectations until I can make those changes.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser._tokenize_line):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (ExpectationSyntaxTests.test_unknown_expectation):
        (TestExpectationSerializationTests.disabled_test_string_whitespace_stripping):

2012-12-11  Martin Robinson  <mrobinson@igalia.com>

        Fix a typo in my previous commit that is causing test failures.

        Reviewed by Gustavo Noronha Silva.

        There was an extra bit of statement appended after the end of a conditional. Somehow
        this compiled and caused test failures.

        * DumpRenderTree/gtk/EventSender.cpp:
        (continuousMouseScrollByCallback):

2012-12-11  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Spurious stderr output from the event sender
        https://bugs.webkit.org/show_bug.cgi?id=104678

        Reviewed by Gustavo Noronha Silva.

        Eliminate some spurious stderr output from the EventSender by using an early return
        instead of an assertion that prints a warning to the console.

        * DumpRenderTree/gtk/EventSender.cpp:
        (continuousMouseScrollByCallback): We don't support continuous scroll events that
        move by page, but we should just fail silently instead of printing an error.

2012-12-11  Joone Hur  <joone.hur@intel.com>

        [GTK] Add GraphicsLayerActor
        https://bugs.webkit.org/show_bug.cgi?id=91940

        Reviewed by Gustavo Noronha Silva.

        Add GraphicsLayerActor to the list of classes that contain GObjects
        in the style checker script so that it does not complain about GObject
        coding style.

        * Scripts/webkitpy/style/checker.py:

2012-12-11  Oswald Buddenhagen  <oswald.buddenhagen@digia.com>

        [Qt] remove hack which avoids unused .obj directories all over the place

        Reviewed by Simon Hausmann.

        The feature is subject to upstreaming in Qt itself in
        https://codereview.qt-project.org/#change,42011

        * qmake/mkspecs/features/default_post.prf:

2012-12-11  Oswald Buddenhagen  <oswald.buddenhagen@digia.com>

        [Qt] move SQLITE3SRCDIR assignment to only use site

        Reviewed by Simon Hausmann.

        Target.pri includes WebCore.pri the almost first thing, so that is
        covered as well.

        * qmake/mkspecs/features/default_pre.prf:

2012-12-11  Oswald Buddenhagen  <oswald.buddenhagen@digia.com>

        [Qt] delete dead include paths

        Reviewed by Simon Hausmann.

        followup to https://bugs.webkit.org/show_bug.cgi?id=93446

        * DumpRenderTree/qt/DumpRenderTree.pro:

2012-12-11  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Implement some missing FrameLoaderClient message in DRT
        https://bugs.webkit.org/show_bug.cgi?id=104444

        Reviewed by Gustavo Noronha Silva.

        Install a FrameLoadEvent callback that prints the necessary output for some
        missing FrameLoader events.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (frameLoadEventCallback): Added.
        (createWebView): Install the FrameLoader event callback.

2012-12-11  Oswald Buddenhagen  <oswald.buddenhagen@digia.com>

        [Qt] change setup of QMAKE_MOC

        Reviewed by Simon Hausmann.

        don't load(moc) explicitly - turns out that this breaks
        debug_and_release builds (the feature does not like being loaded before
        default_post has been loaded).
        so instead just do a minimal call to find the moc executable.

        as it's in fact only two files which need it, so de-centralize this call
        for the sake of saving some cpu cycles spent in qmake.

        * WebKitTestRunner/InjectedBundle/DerivedSources.pri:
        * qmake/mkspecs/features/default_pre.prf:

2012-12-11  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix the linking of debug builds on Mac with force_static_libs_as_shared
        https://bugs.webkit.org/show_bug.cgi?id=104559

        Reviewed by Tor Arne Vestbø.

        "contains(libraries, $$TARGET): return(true)" fails for intermediate libraries since
        at this point TARGET may contain the "_debug" suffix.

        Fix it by moving the TARGET adjustment later in the file.

        * qmake/mkspecs/features/default_post.prf:

2012-12-11  Martin Robinson  <mrobinson@igalia.com>

        [Coverity] [GTK] Remove some redundant null checks in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=104570

        Reviewed by Daniel Bates.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (descriptionSuitableForTestResult): Remove a redundant null check.

2012-12-11  Alberto Garcia  <agarcia@igalia.com>

        Remove unused GErrors
        https://bugs.webkit.org/show_bug.cgi?id=104657

        Reviewed by Martin Robinson.

        Replace unused GErrors with null pointers.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts):
        * DumpRenderTree/gtk/EditingCallbacks.cpp:
        (dumpRange):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::inititializeFontConfigSetting):

2012-12-11  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Bump the jhbuild libsoup version to fix an authentication issue
        https://bugs.webkit.org/show_bug.cgi?id=104448

        Reviewed by Gustavo Noronha Silva.

        Bump the libsoup version to one from the git repository. This requires updating
        GLib as well which in turn requires adjusting the CFLAGS we pass when compiling
        the scanobj step of the gtkdoc generation.

        * gtk/generate-gtkdoc:
        * gtk/jhbuild.modules:

2012-12-11  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed functionality fix for the GTK port.

        Enable the MicroData feature support for the GTK port in the FeatureList module.
        This feature listing now again affects which features are enabled and which disabled
        on the development builds of the GTK port.

        * Scripts/webkitperl/FeatureList.pm:

2012-12-11  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] MiniBrowser is not built
        https://bugs.webkit.org/show_bug.cgi?id=104629

        Reviewed by Gyuyoung Kim.

        As we are finding an elementary package in Tools/MiniBrowser/efl/CMakeList.txt since r137203,
        we need to check if the package is found in the same place not in the Tools/CMakeList.txt.

        * CMakeLists.txt:
        * MiniBrowser/efl/CMakeLists.txt:

2012-12-11  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK][jhbuild] Switch to GStreamer 1.0 build
        https://bugs.webkit.org/show_bug.cgi?id=91727

        Reviewed by Philippe Normand.

        Switch build-webkit --gtk to GStreamer 1.0 support and build the
        necessary GStreamer git modules from JHBuild.

        * gtk/jhbuild.modules: Added GStreamer 1.0.3 build support.

2012-12-11  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Feature enabling/disabling should be possible through build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=99271

        Reviewed by Gustavo Noronha Silva.

        Refactor the code in webkitdirs.pm that builds an autotools project to generate
        autogen.sh arguments, make arguments and installation prefix from the passed-in
        parameters rather than generating all of that in build-webkit. The autogen.sh
        arguments now contain only enable/disable flags for options that are actually
        configurable in configure.ac, the flag value actually reflecting whether the feature
        is enabled or disabled in the feature list.

        Other features are overridable through modifying the GNUmakefile.features.am file.
        All these features are now stored in the build directory and upon change trigger
        a rerun of the autogen.sh script, pretty much like the autogen.sh arguments do.

        The override-feature-defines script is called by autogen.sh, before GNUmakefile.in is
        generated when calling autoreconf. Its task is to copy the GNUmakefile.features.am.in
        into GNUmakefile.features.am and modify it if there's a text file in the build directory
        that contains all the feature defines the build-webkit script has written. If the build
        is not done through build-webkit (and there's no file in build directory listing all the
        feature defines) the script does not advance further from copying.

        This approach is taken to overcome the rigidness of the automake system as it's impossible
        to effectively generate and use GNUmakefile.features.am or even GNUmakefile.features file
        after the autoreconf command execution in autogen.sh.

        * Scripts/build-jsc:
        (buildMyProject):
        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProjectIfNecessary):
        (mustReRunAutogen):
        (buildAutotoolsProject):
        (buildGtkProject):
        * Scripts/webkitperl/FeatureList.pm: Update the features that are currently enabled in
        Source/WebCore/GNUmakefile.features.am.in but aren't in the feature list.
        * Scripts/webkitpy/style/checker.py: Source/WebCore/GNUmakefile.features.am.in is recognized
        as a text file and tabulation errors are reported. Skip the file to suppress them.
        * gtk/override-feature-defines: Added.
        (copy_feature_defines_makefile):
        (adjust_feature_defines_makefile):
        (adjust_feature_defines_makefile.override_feature_define):
        (override_feature_defines):

2012-12-10  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: make sure each edge is reported only once
        https://bugs.webkit.org/show_bug.cgi?id=104630

        Reviewed by Pavel Feldman.

        Test that outgoing edges are reported only once if we come to the same
        object twice: first by an address of a base class and then by a real address
        of the object.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:

2012-12-10  Dana Jansens  <danakj@chromium.org>

        [chromium] Remove WebCompositorOutputSurface implementations from DRT
        https://bugs.webkit.org/show_bug.cgi?id=104046

        Reviewed by Darin Fisher.

        The classes are now provided through WebCompositorSupport.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createOutputSurface):
        * DumpRenderTree/chromium/WebViewHostOutputSurface.cpp: Removed.
        * DumpRenderTree/chromium/WebViewHostOutputSurface.h: Removed.
        * DumpRenderTree/chromium/WebViewHostSoftwareOutputDevice.cpp: Removed.
        * DumpRenderTree/chromium/WebViewHostSoftwareOutputDevice.h: Removed.

2012-12-10  Dirk Pranke  <dpranke@chromium.org>

        change --no-launch-safari to --no-show-results in scripts
        https://bugs.webkit.org/show_bug.cgi?id=104298

        Reviewed by Eric Seidel.

        Since Safari only exists on the Apple ports, NRWT calls the
        command line flag --[no-]show-results instead. This updates
        the scripts to use the new flag (but not the buildbot config yet).

        * Scripts/generate-coverage-data:
        * Scripts/webkit-tools-completion.sh:
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:

2012-12-10  Dirk Pranke  <dpranke@chromium.org>

        nrwt: fix mapping of AUDIO onto FAIL when printing unexpected results
        https://bugs.webkit.org/show_bug.cgi?id=104597

        Reviewed by Ojan Vafai.

        This was broken in the recent printer refactoring.

        * Scripts/webkitpy/layout_tests/views/buildbot_results.py:
        (BuildBotPrinter.print_unexpected_results.add_result.is_expected):
        * Scripts/webkitpy/layout_tests/views/buildbot_results_unittest.py:
        (BuildBotPrinterTests.get_result):
        (BuildBotPrinterTests.test_print_unexpected_results):
        (BuildBotPrinterTests.test_print_unexpected_results.get_unexpected_results):
        (BuildBotPrinterTests):

2012-12-10  Dirk Pranke  <dpranke@chromium.org>

        old-run-webkit-tests: add --show-results properly
        https://bugs.webkit.org/show_bug.cgi?id=104608

        Reviewed by Eric Seidel.

        Rework r137219 / bug 104601 to use the correct perl idiom.

        * Scripts/old-run-webkit-tests:

2012-12-10  Aaron Colwell  <acolwell@chromium.org>

        Unreviewed. Adding Aaron Colwell to the contributor list.

        * Scripts/webkitpy/common/config/committers.py:

2012-12-10  Anders Carlsson  <andersca@apple.com>

        Remove WebKit2 tests on Windows
        https://bugs.webkit.org/show_bug.cgi?id=104607

        Reviewed by Tim Horton.

        Stop building WebKit2 tests and remove associated files.

        * TestWebKitAPI/win/InjectedBundleControllerWin.cpp: Removed.
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp: Removed.
        * TestWebKitAPI/win/PlatformWebViewWin.cpp: Removed.
        * TestWebKitAPI/win/TestWebKitAPI.sln: Removed.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIGenerated.vcproj: Removed.
        * TestWebKitAPI/win/TestWebKitAPIGeneratedCommon.vsprops: Removed.
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj: Removed.
        * TestWebKitAPI/win/WindowMessageObserver.h: Removed.
        * TestWebKitAPI/win/copy-resources.cmd: Removed.

2012-12-10  Dirk Pranke  <dpranke@chromium.org>

        old-run-webkit-tests: support --no-show-results for compatibility w/ NRWT
        https://bugs.webkit.org/show_bug.cgi?id=104601

        Reviewed by Eric Siedel.

        This flag is being added so we can move all of the calling scripts
        over to using --no-show-results instead of --no-launch-safari.

        * Scripts/old-run-webkit-tests:

2012-12-10  Dirk Pranke  <dpranke@chromium.org>

        nrwt: use the default logic for skipping platform-specific tests for chromium
        https://bugs.webkit.org/show_bug.cgi?id=104403

        Reviewed by Stephen White.

        I thought I had fixed this a while ago, but the chromium port was
        using custom logic to figure out which platform/* tests to run (or
        skip) and as a result we were getting some odd behavior (like running
        tests in chromium-linux on chromium-mac, but only when there was
        an expectation listed for the test).

        Ports are supposed to only run the tests found under their
        baseline_search_path() by default.

        Not writing a test for this; theoretically there shouldn't been a
        test checking that the behavior for Chromium was *different* than
        the other ports before.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort._missing_symbol_to_skipped_tests):

2012-12-10  Dirk Pranke  <dpranke@chromium.org>

        fix regression in test-webkitpy after r137189
        https://bugs.webkit.org/show_bug.cgi?id=104589

        Reviewed by Eric Seidel.

        Need to specify full port names.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_build_check):

2012-12-10  Laszlo Gombos  <l.gombos@samsung.com>

        [EFL] Change the minimum required EFL version to 1.6
        https://bugs.webkit.org/show_bug.cgi?id=104431

        Reviewed by Kenneth Rohde Christiansen.

        Change the minimum required EFL version to 1.6 from 1.7.
        The elementary EFL package is only required to build MiniBrowser,
        so I moved the required only to the Minibrowser CMake file.

        * MiniBrowser/efl/CMakeLists.txt: In addition removed
        ENABLE_GLIB_SUPPORT as it is obsolete and it was always set to be on.

2012-12-10  Dean Jackson  <dino@apple.com>

        Unreviewed. Adding Antoine to the contributor list so his name autocompletes in bugzilla.

        * Scripts/webkitpy/common/config/committers.py:

2012-12-10  Zan Dobersek  <zandobersek@gmail.com>

        REGRESSION (r118735): svg/dom/complex-svgView-specification.html, svg/dom/SVGViewSpec.html, svg/dom/viewspec-parser.html failing on GTK Linux 64-bit Release
        https://bugs.webkit.org/show_bug.cgi?id=87734

        Reviewed by Martin Robinson.

        When willSendRequest should return null in testing, cancel the SoupMessage
        instead of setting the request's URI to about:blank.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (willSendRequestCallback):

2012-12-10  Jochen Eisinger  <jochen@chromium.org>

        [chromium] Move the test implementation of WebKit::WebPlugin to the TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=104537

        Reviewed by Tony Chang.

        In order to hide implementation details from the public TestRunner API,
        I moved the plugin to WebTestPluginImpl and added a static create
        method to WebTestPlugin. Also, I renamed the plugin from TestWebPlugin
        to WebTestPlugin to be more in line with other classes in the
        TestRunner API.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebTestPlugin.h: Added.
        (WebTestRunner):
        (WebTestPlugin):
        * DumpRenderTree/chromium/TestRunner/src/WebTestPlugin.cpp: Renamed from Tools/DumpRenderTree/chromium/TestWebPlugin.cpp.
        (WebTestRunner::WebTestPlugin::create):
        (WebTestRunner):
        (WebTestRunner::WebTestPlugin::WebTestPlugin):
        (WebTestRunner::WebTestPlugin::~WebTestPlugin):
        (WebTestRunner::WebTestPlugin::mimeType):
        * DumpRenderTree/chromium/TestWebPlugin.h: Removed.
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createPlugin):

2012-12-10  Dirk Pranke  <dpranke@chromium.org>

        run_webkit_tests throws exception when DRT is not present
        https://bugs.webkit.org/show_bug.cgi?id=104565

        Reviewed by Jochen Eisinger.

        Don't actually try to print the bot results if there aren't
        any because we exited before running any tests.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_build_check):

2012-12-10  Benjamin Poulain  <benjamin@webkit.org>

        Add convenience methods to use ListHashSet for a LRU cache
        https://bugs.webkit.org/show_bug.cgi?id=104499

        Reviewed by Sam Weinig.

        Test the new methods added to ListHashSet.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/ListHashSet.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2012-12-10  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch print-expectations doesn't work right for platforms w/ shared expectations
        https://bugs.webkit.org/show_bug.cgi?id=104405

        Reviewed by Eric Seidel.

        If multiple ports shared a TestExpectations file, webkit-patch
        print-expectations would use the expectation for the first port
        using that file and print the result for all ports, rather than
        re-parse and print each port separately (e.g., we might print
        the chromium-linux expectation for a file for both chromium-linux
        and chromium-mac). Discovered while testing/debugging the fix
        for bug 104403.

        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort._skipped_tests_for_unsupported_features):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (lint):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintExpectations._model):
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (PrintExpectationsTest.test_platform):

2012-12-10  Dirk Pranke  <dpranke@chromium.org>

        nrwt: fix total number of tests computed in the result summary
        https://bugs.webkit.org/show_bug.cgi?id=104061

        Reviewed by Jochen Eisinger.

        Good thing I left this open, because I actually broke it again
        the same way in a merge. Fix the computation of the one_line_summary
        again, and add tests for it (also clean up some redundant tests).

        Also, add constants into the test port code so that the knowledge
        of how many tests should fail and how is next to the list of tests,
        rather than a totally different place.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestList.__getitem__):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (get_test_results):
        (MainTest.setUp):
        (MainTest.test_basic):
        (MainTest.test_run_singly_actually_runs_tests):
        (MainTest.test_test_list_with_prefix):
        (MainTest.test_missing_and_unexpected_results_with_custom_exit_code.CustomExitCodePort):
        (MainTest.test_tolerance.ImageDiffTestPort):
        (EndToEndTest.parse_full_results):

2012-12-10  Mike West  <mkwst@chromium.org>

        Log to console when script is blocked by sandbox attributes.
        https://bugs.webkit.org/show_bug.cgi?id=104365

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest):
            Ignoring the new console message in perftests, as it broke parsing
            for the Parser/html-parser.html microbenchmark.

2012-12-10  Filip Pizlo  <fpizlo@apple.com>

        JSC profiling and debug dump code should use inferred names when possible
        https://bugs.webkit.org/show_bug.cgi?id=104519

        Reviewed by Oliver Hunt.

        The format I'm using for referring to a code block is now name#hash. For example,
        v8-crypto has something called bnpSquareTo#B5QFbU. The profiler allows you to use
        either the hash, the inferred name, or the combined hash and full name when referring
        to blocks.

        * Scripts/display-profiler-output:

2012-12-09  Filip Pizlo  <fpizlo@apple.com>

        Profiler should say things about OSR exits
        https://bugs.webkit.org/show_bug.cgi?id=104497

        Reviewed by Oliver Hunt.

        Adds support for displaying OSR exit information for full summary (just displays the
        counts and the number of recompilations), bytecode display (says which bytecodes
        exited), and DFG display (annotates disassembly with taken OSR exits and their
        counts).

        * Scripts/display-profiler-output:

2012-12-10  Alexis Menard  <alexis@webkit.org>

        [CSS3 Backgrounds and Borders] Remove CSS3_BACKGROUND feature flag.
        https://bugs.webkit.org/show_bug.cgi?id=104539

        Reviewed by Antonio Gomes.

        As discussed on webkit-dev it is not needed to keep this feature flag 
        as support for <position> type is a small feature that is already 
        implemented by three other UAs. It was useful while landing this 
        feature as partial bits were landed one after one.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2012-12-10  Martin Robinson  <mrobinson@igalia.com>

        Build fix.

        Add a patchfile missing from my previous commit.

        * gtk/patches/harfbuzz-icu-detection-fix.patch: Added.

2012-12-10  Martin Robinson  <mrobinson@igalia.com>

        REGRESSION(137127): Causes assertion failures on the debug bots
        https://bugs.webkit.org/show_bug.cgi?id=104549

        Reviewed by Alejandro G. Castro.

        After handling the new TextOutput message we should return the method
        handling messages received.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): Fix a missing early return.

2012-12-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [Soup] utilize multipart/x-mixed-replace support recently added to libsoup
        https://bugs.webkit.org/show_bug.cgi?id=94515

        Reviewed by Martin Robinson.

        This change requires a very recent libsoup, so update our jhbuild
        requirements.

        * gtk/jhbuild.modules: depend on soup version that adds the multipart/x-mixed-replace
        support
        * efl/jhbuild.modules: ditto

2012-12-10  Zoltan Nyul  <zoltan.nyul@intel.com>

        Implement testRunner.setViewModeMediaFeature() in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=103886

        Reviewed by Kenneth Rohde Christiansen.

        Implement testRunner.setViewModeMediaFeature() in WebKitTestRunner.
        This API is required by layout tests.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setViewModeMediaFeature):
        (WTR):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2012-12-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Bring Harfbuzz-ng support to Gtk
        https://bugs.webkit.org/show_bug.cgi?id=92098

        Reviewed by Gustavo Noronha Silva.

        Add HarfBuzz dependency.

        * GNUmakefile.am: Add FreeType/HarfBuzz CFLAGS to the WebCore Internals library.
        * gtk/jhbuild.modules: Add HarfBuzz to the JHbuild and remove Pango, since it
        should no longer affect layout test results.

2012-12-10  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Use QLibraryInfo::LibraryExecutablesPath unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=104541

        Reviewed by Jocelyn Turcotte.

        We now depend on a Qt 5 version that is guaranteed to have this API, so we
        can remove the configure checks for it.

        * qmake/config.tests/libexecdir/libexecdir.cpp: Removed.
        * qmake/config.tests/libexecdir/libexecdir.pro: Removed.
        * qmake/mkspecs/features/features.prf:

2012-12-10  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        REGRESSION(r135863): GtkLauncher --help no longer displays all help options
        https://bugs.webkit.org/show_bug.cgi?id=104382

        Reviewed by Philippe Normand.

        Remove gst_init() because it steals the GOptionContext.
        gst_init_get_option_group() already does the initialization job.

        * GtkLauncher/main.c:
        (main):

2012-12-10  Zan Dobersek  <zandobersek@gmail.com>

        [GTK][WTR] Implement AccessibilityUIElement::titleUIElement
        https://bugs.webkit.org/show_bug.cgi?id=102953

        Reviewed by Martin Robinson.

        Implement AccessibilityUIElement::titleUIElement in the ATK backend
        in the same manner it is implemented in DumpRenderTree. Both implementations
        are updated to unref the relation set before the final function return
        rather than at the end of each loop through the relations held in the said
        relation set.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::titleUIElement):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::titleUIElement):

2012-12-10  Martin Robinson  <mrobinson@igalia.com>

        Fix the WebKit2 debug build

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): Fix a typo of WKStringGetTypeID().

2012-12-10  Martin Robinson  <mrobinson@igalia.com>

        [WTR] Move text output accumulation to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=104214

        Reviewed by Darin Adler.

        Instead of accumulating text output in the InjectedBundle and then sending it to the UIProcess 
        once a test is finished, immediately send any text output to the UIProcess. This will allow
        WebKitTestRunner to output text from the UIProcess as well.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp: Remove the handling of the text output
        StringBuilder. Add a method to send output to the UIProcess.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp: Change code that appends to the StringBuilder
        to use the new outputText method.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp: Ditto.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp: Ditto.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation): Intialize the StringBuilder.
        (WTR::TestInvocation::invoke): Clear the StringBuilder when a new tests starts.
        (WTR::TestInvocation::dumpResults): m_textOutput is a StringBuilder now so the
        method of printing the text is slightly different.
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): Handle the new TextOutput
        message by appending the results to the StringBuilder.
        * WebKitTestRunner/TestInvocation.h:
        (TestInvocation): Switch the type of m_textOutput.

2012-12-10  Mihnea Ovidenie  <mihnea@adobe.com>

        Unreviewed. Adding Mihai Maerean to the list of contributors, working on CSSRegions.

        * Scripts/webkitpy/common/config/committers.py:

2012-12-10  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] accessibility/language-attribute.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=98369

        Reviewed by Chris Fleizach.

        The test is failing for two reasons: Not exposing the language
        for accessible objects and AccessibilityUIElement::language() not
        being implemented.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::language): Implemented.

2012-12-10  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] accessibility/editable-webarea-context-menu-point.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=98364

        Reviewed by Chris Fleizach.

        The test is failing because the clickPoint values remain unchanged. The
        values remain unchanged because ATK lacks a means to keep track of this
        information.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::clickPointX): Added comment that ATK doesn't have clickPoint details
        (AccessibilityUIElement::clickPointY): Added comment that ATK doesn't have clickPoint details

2012-12-09  Alejandro Piñeiro  <apinheiro@igalia.com>

        [GTK] lack of implemention of AccessibilityUIElementGtk::isSelectable and AccessibilityUIElementGtk::isMultiSelectable
        https://bugs.webkit.org/show_bug.cgi?id=104481

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isSelectable): Implement this by checking
        the current state of the AtkObject.
        (AccessibilityUIElement::isMultiSelectable): Implement this by
        checking the current state of the AtkObject.

2012-12-09  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] accessibility/placeholder.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=98373

        Reviewed by Martin Robinson.

        The test was failing because the placeholder text was not supported and
        AccessibilityUIElement::stringAttributeValue() was not implemented.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (coreAttributeToAtkAttribute): New convenience method to convert WebCore attribute
        names into AtkObject attribute names
        (AccessibilityUIElement::stringAttributeValue): implemented

2012-12-09  Dan Winship  <danw@gnome.org>

        [GTK] Bump libxml2 requirement in jhbuild.modules
        https://bugs.webkit.org/show_bug.cgi?id=104477

        Reviewed by Martin Robinson.

        Fedora 18's Apache depends on symbols in libxml2 2.9.0, so the
        tests won't run if we only have libxml2 2.8.0 installed in the
        jhbuild root.

        * gtk/jhbuild.modules:

2012-12-09  Zan Dobersek  <zandobersek@gmail.com>

        Remove testRunner.disableImageLoading()
        https://bugs.webkit.org/show_bug.cgi?id=98083

        Reviewed by Gustavo Noronha Silva.

        Remove the disableImageLoading methods and callback.
        No tests use the method anymore and all ports except Wx
        now support this behavior through overriding the
        WebKitDisplayImagesKey preference.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        (TestRunner::overridePreference): Add support for overriding the
        WebKitDisplayImagesKey preference which is now the preferred way
        of disabling image loading.
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/wx/TestRunnerWx.cpp:

2012-12-09  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] accessibility/label-for-control-hittest.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=98368

        Reviewed by Martin Robinson.

        The test was failing because AccessibilityUIElement::elementAtPoint was
        not implemented.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::elementAtPoint): implemented

2012-12-09  Jon Lee  <jonlee@apple.com>

        [WK2] Move button image to injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=104107
        <rdar://problem/12813842>

        Reviewed by Simon Fraser.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Update the bundle page UI client.

2012-12-08  Halton Huo  <halton.huo@intel.com>

        [CMake] Add CMake style checker
        https://bugs.webkit.org/show_bug.cgi?id=104240

        Reviewed by Eric Seidel.

        The CMake style checker is followed by existing style checkers like cpp, python.
        Unit test is added as well.

        * Scripts/webkitpy/style/checker.py: Use CMakeChecker CMAKE type files(.cmake or CMakeLists.txt)
        (FileType):
        (CheckerDispatcher._file_type):
        (CheckerDispatcher._create_checker):
        * Scripts/webkitpy/style/checkers/cmake.py: Added.
        (CMakeChecker):
        (CMakeChecker.__init__): 
        (CMakeChecker.check):
        (CMakeChecker._process_line):
        (CMakeChecker._check_trailing_whitespace):
        (CMakeChecker._check_no_space_cmds):
        (CMakeChecker._check_one_space_cmds):
        (CMakeChecker._check_non_lowercase_cmd):
        (CMakeChecker._check_indent):
        * Scripts/webkitpy/style/checkers/cmake_unittest.py: Added.
        (CMakeCheckerTest):
        (CMakeCheckerTest.test_init):
        (CMakeCheckerTest.test_init._mock_handle_style_error):
        (CMakeCheckerTest.test_check):
        (CMakeCheckerTest.test_check._mock_handle_style_error):

2012-12-08  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL] Enable WebGL by default.
        https://bugs.webkit.org/show_bug.cgi?id=102991.

        Reviewed by Kenneth Rohde Christiansen.

        Enable WebGL by default.

        * Scripts/webkitperl/FeatureList.pm:

2012-12-07  Scott Violet  <sky@chromium.org>

        [chromium] Remove linux theme related files and switch to default
        https://bugs.webkit.org/show_bug.cgi?id=103897

        Reviewed by Dimitri Glazkov.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest): linux->default

2012-12-07  Mike Lattanzio  <mlattanzio@rim.com>

        [BlackBerry] Update BlackBerry Port to use new Graphics::createBuffer BufferType enum values.
        https://bugs.webkit.org/show_bug.cgi?id=104121

        Reviewed by Rob Buis.

        Update createBuffer call to reflect new BufferType enum.
        Internal PR 254649
        Internal Review: Jakob Petsovits

        DRT is always backed for maximum compatibility.

        * DumpRenderTree/blackberry/PixelDumpSupportBlackBerry.cpp:
        (createBitmapContextFromWebView):

2012-12-07  Jochen Eisinger  <jochen@chromium.org>

        Add 'CHROMIUM_DEVEL_SANDBOX' to the environment variables to copy for layout test drivers
        https://bugs.webkit.org/show_bug.cgi?id=104355

        Reviewed by Dirk Pranke.

        This enables chromium's content_shell driver to run with the full SUID
        sandbox.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.to.setup_environ_for_server):

2012-12-07  KyungTae Kim  <ktf.kim@samsung.com>

        [EFL] Fix tools for WebKit2-only builds
        https://bugs.webkit.org/show_bug.cgi?id=103904

        Reviewed by Laszlo Gombos.

        The libewebkit2.so should be used for library path for EFL WebKit2.

        * Scripts/webkitdirs.pm:
        (builtDylibPathForName):

2012-12-07  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] DRT - Update implementation of TestRunner.setCustomPolicyDelegate()
        https://bugs.webkit.org/show_bug.cgi?id=104243

        RIM PR 259337

        Reviewed by Rob Buis.

        1. Implement calculation of navigation originating in
        didDecidePolicyForNavigationAction().
        2. Implement policy delegate for resource response.
        3. Enable customPolicyDelegate if waitForPolicyDelegate() is called.
        4. Minor optional updates in dump() and dumpFrameLoadCallbacks().

        The patch fixed the following tests:
        - http/tests/download
        - fast/forms/mailto/formenctype-attribute-button-html.html
        - fast/forms/mailto/formenctype-attribute-input-html.html
        - fast/encoding/mailto-always-utf-8.html

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::DumpRenderTree):
        (BlackBerry::WebKit::DumpRenderTree::resetToConsistentStateBeforeTesting):
        (BlackBerry::WebKit::DumpRenderTree::dump):
        (BlackBerry::WebKit::DumpRenderTree::didFinishLoadForFrame):
        (BlackBerry::WebKit::DumpRenderTree::didDecidePolicyForNavigationAction):
        (BlackBerry::WebKit::DumpRenderTree::didDecidePolicyForResponse):
        (BlackBerry::WebKit::DumpRenderTree::setCustomPolicyDelegate):
        * DumpRenderTree/blackberry/DumpRenderTreeBlackBerry.h:
        (DumpRenderTree):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        (TestRunner::setCustomPolicyDelegate):
        (TestRunner::waitForPolicyDelegate):
        (TestRunner::overridePreference):

2012-12-07  Gwang Yoon Hwang  <ryumiel@company100.net>

        [Qt] Adjust library name in layout_tests/port/qt.py after Qt5-r40
        https://bugs.webkit.org/show_bug.cgi?id=104348

        Reviewed by Csaba Osztrogonác.

        After Qt-5.0.0-r40, the library was renamed from QtWebKitWidgets to
        Qt5WebKitWidgets. run-webkit-tests were still looking for QtWebKitWidgets

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._path_to_webcore_library):

2012-12-07  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed fix, unbreak run-launcher after library renaming.

        * Scripts/webkitdirs.pm:
        (builtDylibPathForName):

2012-12-06  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed fix after r136896, unbreak --debug-rwt to make bots result verbose again.
        https://bugs.webkit.org/show_bug.cgi?id=104296

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main):

2012-12-06  Rick Byers  <rbyers@chromium.org>

        CSS cursor property should support webkit-image-set
        https://bugs.webkit.org/show_bug.cgi?id=99493

        Reviewed by Beth Dakin.

        Add ENABLE_MOUSE_CURSOR_SCALE - disabled by default

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2012-12-06  Vivek Galatage  <vivek.vg@samsung.com>

        Unreviewed. Fixing the email address order to work correctly with bugzilla.

        * Scripts/webkitpy/common/config/committers.py:

2012-12-06  Jochen Eisinger  <jochen@chromium.org>

        [chromium] when forwarding events through the WebPluginContainer, create a UserGestureIndicator if processing a user gesture
        https://bugs.webkit.org/show_bug.cgi?id=104306

        Reviewed by Dimitri Glazkov.

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (TestWebPlugin::TestWebPlugin):
        (TestWebPlugin::handleInputEvent): add support for printing the user gesture status
        * DumpRenderTree/chromium/TestWebPlugin.h:
        (TestWebPlugin):

2012-12-06  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests --lint-test-files seems to be broken
        https://bugs.webkit.org/show_bug.cgi?id=104296

        Unreviewed, build fix.

        My recent refactoring caused me to not initialize the printer
        before calling lint(); this patch restructures the code to make
        the lint routine self-contained and do all the work necessary.
        This will also make it easier to move this code out into a standalone
        file.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (lint):
        (main):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (LintTest.test_all_configurations):
        (LintTest.test_lint_test_files):
        (LintTest.test_lint_test_files__errors):

2012-12-05  Filip Pizlo  <fpizlo@apple.com>

        DFG profiler should be helpful about gem installation
        https://bugs.webkit.org/show_bug.cgi?id=104217

        Reviewed by Oliver Hunt.
        
        'json' and 'highline' are not installed by default on the ruby distributions with
        which I am familiar, and the default error messages don't make me happy. This makes
        display-profiler-output print a helpful message if those gems are not found.

        * Scripts/display-profiler-output:

2012-12-05  Filip Pizlo  <fpizlo@apple.com>

        Profiler should print a helpful message if you pass the wrong arguments
        https://bugs.webkit.org/show_bug.cgi?id=104222

        Reviewed by Oliver Hunt.

        * Scripts/display-profiler-output:

2012-12-06  Ojan Vafai  <ojan@chromium.org>

        Allow for CCing a secondary email address from watchlists
        https://bugs.webkit.org/show_bug.cgi?id=104286

        Reviewed by Dirk Pranke.

        Change my watchlist CC address so I can filter these separately from
        when people explicitly CC me and update the watchlist parser to allow that.

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/watchlist:
        * Scripts/webkitpy/common/watchlist/watchlistparser.py:
        (WatchListParser._validate):
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py:
        (WatchListParserTest.test_cc_rule_with_invalid_email):
        (WatchListParserTest.test_cc_rule_with_secondary_email):

2012-12-06  Max Vujovic  <mvujovic@adobe.com>

        Unreviewed. Add myself to committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2012-12-06  Yael Aharon  <yael.aharon@intel.com>

        [EFL] [WK2] fast/dom/vertical-scrollbar-in-rtl.html makes fast/regions tests flaky
        https://bugs.webkit.org/show_bug.cgi?id=104139

        Reviewed by Kenneth Rohde Christiansen.

        Resize the window back to 800x600 between tests.
        This should be a no-op if the test did not resize the window.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2012-12-06  Tommy Widenflycht  <tommyw@google.com>

        Speech Recognition API: Change the error code to a string on SpeechRecognitionError
        https://bugs.webkit.org/show_bug.cgi?id=104254

        Reviewed by Adam Barth.

        Changes the mock error function to take a string instead of an int.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::setMockSpeechRecognitionError):
        * DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp:
        (WebTestRunner::ErrorTask::ErrorTask):
        (MockWebSpeechRecognizer::setError):
        * DumpRenderTree/chromium/MockWebSpeechRecognizer.h:
        (MockWebSpeechRecognizer):

2012-12-06  Andras Becsi  <andras.becsi@digia.com>

        [Qt][Mac] Fix libxslt and libxml2 config tests
        https://bugs.webkit.org/show_bug.cgi?id=104164

        Reviewed by Simon Hausmann.

        We should not use pkg-config on Mac instead use direct include
        paths and add needed libraries to the linker options to detect
        libxslt and libxml2 provided by the system.
        Previously we would always fall back to qtxmlpatterns.

        * qmake/config.tests/libxml2/libxml2.pro:
        * qmake/config.tests/libxslt/libxslt.pro:

2012-12-06  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Fix the build if the path contains "+" character
        https://bugs.webkit.org/show_bug.cgi?id=104120

        Reviewed by Tor Arne Vestbø.

        The second parameter of qmake's replace() is regular expression, so
        we have to escape special characters in paths passed to replace().

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/functions.prf:

2012-12-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136825.
        http://trac.webkit.org/changeset/136825
        https://bugs.webkit.org/show_bug.cgi?id=104251

        It made 100+ test fail on Qt-WK2 pixel bot, and 1800+ test
        flakey on Qt-WK2 non-pixel bot (Requested by Ossy on #webkit).

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2012-12-06  Yael Aharon  <yael.aharon@intel.com>

        [EFL] [WK2] fast/dom/vertical-scrollbar-in-rtl.html makes fast/regions tests flaky
        https://bugs.webkit.org/show_bug.cgi?id=104139

        Reviewed by Kenneth Rohde Christiansen.

        Resize the window back to 800x600 between tests.
        This should be a no-op if the test did not resize the window.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2012-12-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136784 and r136802.
        http://trac.webkit.org/changeset/136784
        http://trac.webkit.org/changeset/136802
        https://bugs.webkit.org/show_bug.cgi?id=104231

        breaks chromium canary (Requested by morrita on #webkit).

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest):

2012-12-05  Ryosuke Niwa  <rniwa@webkit.org>

        Add myself to watch changes in PerformanceTests/*.

        * Scripts/webkitpy/common/config/watchlist:

2012-12-05  Shinya Kawanaka  <shinyak@chromium.org>

        [Chromium] DRT on Windows crashes when a testcase has a progress element in indeterminate state
        https://bugs.webkit.org/show_bug.cgi?id=102459

        Reviewed by Dimitri Glazkov.

        Since WebThemeControlDRTWin::markState does not consider indeterminate state, DRT caused a crash.

        * DumpRenderTree/chromium/WebThemeControlDRTWin.cpp:
        (WebThemeControlDRTWin::markState):

2012-12-05  Filip Pizlo  <fpizlo@apple.com>

        DFG profiler should be able to display where a code block was inlined into, and what it inlined
        https://bugs.webkit.org/show_bug.cgi?id=104216

        Reviewed by Oliver Hunt.

        Added an "inlines" command that shows the inline stacks that a code block participated
        in. Also cleaned up some of the ways we print compilation units.

        * Scripts/display-profiler-output:

2012-12-05  Halton Huo  <halton.huo@intel.com>

        [CMake] Unify coding style for CMake files
        https://bugs.webkit.org/show_bug.cgi?id=103605

        Reviewed by Laszlo Gombos.

        Update cmake files(.cmake, CMakeLists.txt) with following style rules:
        1. Indentation
        1.1 Use spaces, not tabs.
        1.2 Four spaces as indent.
        2. Spacing
        2.1 Place one space between control statements and their parentheses.
            For eg, if (), else (), elseif (), endif (), foreach (),
            endforeach (), while (), endwhile (), break ().
        2.2 Do not place spaces between function and macro statements and
            their parentheses. For eg, macro(), endmacro(), function(),
            endfunction().
        2.3 Do not place spaces between a command or function or macro and its
            parentheses, or between a parenthesis and its content. For eg,
            message("testing") not message( "testing") or message ("testing" )
        2.4 No space at line ending.
        3. Lowercase when call commands macros and functions. For eg,
           add_executable() not ADD_EXECUTABLE(), set() not SET().

        * CMakeLists.txt:
        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        * DumpRenderTree/efl/CMakeLists.txt:
        * EWebLauncher/CMakeLists.txt:
        * EWebLauncher/ControlTheme/CMakeLists.txt:
        * MiniBrowser/efl/CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformEfl.cmake:
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/PlatformEfl.cmake:
        * WinCELauncher/CMakeLists.txt:
        * clang/ReportMemoryUsagePlugin/CMakeLists.txt:

2012-12-05  Scott Violet  <sky@chromium.org>

        [chromium] Remove linux theme related files and switch to default
        https://bugs.webkit.org/show_bug.cgi?id=103897

        Reviewed by Tony Chang.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest): linux->default

2012-12-05  Dirk Pranke  <dpranke@chromium.org>

        nrwt: run_webkit_tests_integrationtest.py depends on being able to share a port w/ between master and worker
        https://bugs.webkit.org/show_bug.cgi?id=78168

        Reviewed by Ojan Vafai.

        This patch adds a single ordered list to ResultSummary that contains
        the results of every test run in order of result received, and
        modifies the TestResults class to contain the list of references used
        for each test as well as the pid of the driver; this allows us to stop
        having to override the test drivers to record the tests, and makes the
        integration tests that test rdering, retries, restarts, etc. black-box
        tests.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._run_rebaseline):
        (SingleTestRunner._compare_output):
        (SingleTestRunner._run_reftest):
        (SingleTestRunner._compare_output_with_reference):
        * Scripts/webkitpy/layout_tests/models/result_summary.py:
        (ResultSummary.__init__):
        (ResultSummary.add):
        * Scripts/webkitpy/layout_tests/models/test_results.py:
        (TestResult.__init__):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverOutput.__init__):
        (Driver.run_test):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestDriver):
        (TestDriver.__init__):
        (TestDriver.run_test):
        (TestDriver.stop):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (get_tests_run):
        (get_test_batches):
        (get_test_results):
        (MainTest.test_batch_size):
        (MainTest.test_dryrun):
        (MainTest.test_natural_order):
        (MainTest.test_natural_order_test_specified_multiple_times):
        (MainTest.test_random_order):
        (MainTest.test_random_order_test_specified_multiple_times):
        (MainTest.test_no_order):
        (MainTest.test_no_order_test_specified_multiple_times):
        (MainTest.test_no_order_with_directory_entries_in_natural_order):
        (MainTest.test_repeat_each):
        (MainTest.test_ignore_flag):
        (MainTest.test_skipped_flag):
        (MainTest.test_iterations):
        (MainTest.test_run_chunk):
        (MainTest.test_run_part):
        (MainTest.test_run_singly):
        (MainTest.test_skip_failing_tests):
        (MainTest.test_single_file):
        (MainTest.test_single_file_with_prefix):
        (MainTest.test_single_skipped_file):
        (MainTest.test_test_list):
        (MainTest.test_test_list_with_prefix):
        (MainTest.test_exit_after_n_failures):
        (MainTest.test_exit_after_n_crashes):
        (MainTest.test_run_order__inline):
        (MainTest.test_reftest_run):
        (MainTest.test_reftest_run_reftests_if_pixel_tests_are_disabled):
        (MainTest.test_reftest_skip_reftests_if_no_ref_tests):
        (MainTest.test_reftest_expected_html_should_be_ignored):
        (MainTest.test_reftest_driver_should_run_expected_html):
        (MainTest.test_reftest_driver_should_run_expected_mismatch_html):
        (MainTest.test_no_http_tests):
        (MainTest.test_platform_tests_are_found):

2012-12-05  Dana Jansens  <danakj@chromium.org>

        [chromium] Make WebCompositorOutputSurface an empty class when USE_CC_OUTPUT_SURFACE is defined.
        https://bugs.webkit.org/show_bug.cgi?id=103967

        Reviewed by James Robinson.

        Use the WebCompositorSupport methods to create an OutputSurface. If they
        fail, then fall back to the WebViewHost methods.

        Once the chromium side lands, the WebCompositorSupport methods will stop
        failing, and will replace the WebViewHost ones.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createOutputSurface):

2012-12-05  Dirk Pranke  <dpranke@chromium.org>

        nrwt: split all of the buildbot-specific output into its own file
        https://bugs.webkit.org/show_bug.cgi?id=104165

        Reviewed by Ojan Vafai.

        Now that we have the RunDetails object we can move all of the
        buildbot-specific knowledge out of the core test-running code
        and into the outermost run_webkit_tests layer.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):
        (main):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (passing_run):
        (logging_run):
        (run_and_capture):
        (MainTest.test_all):
        (MainTest.test_max_locked_shards):
        (MainTest.test_child_processes_2):
        (MainTest.test_child_processes_min):
        (MainTest.test_full_results_html):
        (MainTest.test_hung_thread):
        (MainTest.test_keyboard_interrupt):
        (MainTest.test_no_tests_found):
        (MainTest.test_no_tests_found_2):
        (MainTest.test_repeat_each_iterations_num_tests):
        (MainTest.test_run_singly_actually_runs_tests):
        (MainTest.test_test_list):
        (MainTest.test_unexpected_failures):
        (MainTest.test_missing_and_unexpected_results):
        (MainTest.test_pixel_test_directories):
        (MainTest.test_missing_and_unexpected_results_with_custom_exit_code):
        (MainTest.test_crash_with_stderr):
        (MainTest.test_no_image_failure_with_image_diff):
        (MainTest.test_crash_log):
        (MainTest.test_web_process_crash_log):
        (MainTest.test_exit_after_n_failures_upload):
        (MainTest.test_results_directory_absolute):
        (MainTest.test_results_directory_default):
        (MainTest.test_results_directory_relative):
        (MainTest.test_retrying_and_flaky_tests):
        (MainTest.test_reftest_should_not_use_naming_convention_if_not_listed_in_reftestlist):
        (MainTest.test_output_diffs):
        (MainTest.test_unsupported_platform):
        (MainTest.test_verbose_in_child_processes):
        (EndToEndTest.test_end_to_end):
        (EndToEndTest.test_reftest_with_two_notrefs):
        (RebaselineTest.test_reset_results):
        (RebaselineTest.test_missing_results):
        (RebaselineTest.test_new_baseline):
        * Scripts/webkitpy/layout_tests/views/buildbot_results.py: Added.
        (BuildBotPrinter):
        (BuildBotPrinter.__init__):
        (BuildBotPrinter.print_results):
        (BuildBotPrinter._print):
        (BuildBotPrinter.print_result_summary):
        (BuildBotPrinter._print_result_summary_entry):
        (BuildBotPrinter.print_unexpected_results):
        (BuildBotPrinter.print_unexpected_results.add_to_dict_of_lists):
        (BuildBotPrinter.print_unexpected_results.add_result):
        * Scripts/webkitpy/layout_tests/views/buildbot_results_unittest.py: Added.
        (BuildBotPrinterTests):
        (BuildBotPrinterTests.assertEmpty):
        (BuildBotPrinterTests.assertNotEmpty):
        (BuildBotPrinterTests.get_printer):
        (BuildBotPrinterTests.get_result):
        (BuildBotPrinterTests.get_result_summary):
        (BuildBotPrinterTests.test_print_unexpected_results):
        (BuildBotPrinterTests.test_print_unexpected_results.get_unexpected_results):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer):
        (Printer.__init__):
        (Printer.print_results):
        (Printer._print_statistics_for_test_timings):
        (Printer._print_baseline):
        (Printer._print_debug):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.get_printer):
        (Testprinter.get_result):
        (Testprinter.test_configure_and_cleanup):
        (Testprinter.test_print_config):
        (Testprinter.test_print_one_line_summary):
        (Testprinter.test_test_status_line):
        (Testprinter.test_details):

2012-12-05  Dirk Pranke  <dpranke@chromium.org>

        nrwt: collect all of the information about a run into a new RunDetails class
        https://bugs.webkit.org/show_bug.cgi?id=104158

        Reviewed by Ojan Vafai.

        This patch collects the information from both test passes (the
        main one and the retries) as well as the summarized results and
        the exit code into a RunDetails class, so that the integration
        tests can more easily tell what happened.

        Also, change the way the --lint-test-files works slightly so that
        we don't need to create a printer object (and hence we need to
        rework the tests that are testing logging).

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (RunDetails):
        (RunDetails.__init__):
        (Manager.run):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):
        (main):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (passing_run):
        (run_and_capture):
        (LintTest.test_lint_test_files):
        (LintTest.test_lint_test_files__errors):
        (MainTest.test_verbose_in_child_processes):

2012-12-05  Dirk Pranke  <dpranke@chromium.org>

        nrwt: remove --no-record-results
        https://bugs.webkit.org/show_bug.cgi?id=104072

        Reviewed by Ojan Vafai.

        The command line flag was only being used in the unit tests and
        wasn't really needed once we started using a mock filesystem.

        Also, reformat a bunch of long lines ...

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (parse_args):
        (passing_run):
        (logging_run):
        (MainTest.test_repeat_each_iterations_num_tests):
        (MainTest.test_test_list):
        (MainTest.test_missing_and_unexpected_results):
        (MainTest.test_pixel_test_directories):
        (MainTest.test_missing_and_unexpected_results_with_custom_exit_code):
        (MainTest.test_crash_with_stderr):
        (MainTest.test_no_image_failure_with_image_diff):
        (MainTest.test_crash_log):
        (MainTest.test_web_process_crash_log):
        (MainTest.test_exit_after_n_failures_upload):
        (MainTest.test_results_directory_absolute):
        (MainTest.test_results_directory_relative):
        (MainTest.test_reftest_should_not_use_naming_convention_if_not_listed_in_reftestlist):
        (MainTest.test_additional_expectations):
        (MainTest.test_output_diffs):
        (EndToEndTest.test_end_to_end):
        (EndToEndTest.test_reftest_with_two_notrefs):
        (RebaselineTest.test_reset_results):
        (RebaselineTest.test_missing_results):
        (RebaselineTest.test_new_baseline):

2012-12-05  Dirk Pranke  <dpranke@chromium.org>

        nrwt: only summarize the results one way
        https://bugs.webkit.org/show_bug.cgi?id=104064

        Reviewed by Ojan Vafai.

        Change manager.summarize_results so that we always (and only)
        include both expected and unexpected results. Previously we
        would summarize the results twice, once with expected results
        and once without. This made the code much more confusing than
        it needed to be.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (summarize_results):
        (Manager.run):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ResultSummaryTest.summarized_results):
        (ResultSummaryTest.test_no_svn_revision):
        (ResultSummaryTest.test_svn_revision):
        (ResultSummaryTest.test_summarized_results_wontfix):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_results):
        (Printer._print_unexpected_results):
        (Printer._print_unexpected_results.add_result):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_print_unexpected_results.get_unexpected_results):
        (Testprinter):

2012-12-05  Filip Pizlo  <fpizlo@apple.com>

        DFG profiler should display more information
        https://bugs.webkit.org/show_bug.cgi?id=104163

        Reviewed by Gavin Barraclough.

        Added the following:
        
        - Distinguish between source counts and bytecode counts.
        
        - Add a "full" summary view that shows both kinds of counts, plus inline counts.
        
        - Add a "source" command to see the source.
        
        - Add a "bytecode" command to see the bytecode and counts.

        * Scripts/display-profiler-output:

2012-12-05  Yong Li  <yoli@rim.com>

        [BlackBerry] Build with libjpegturbo
        https://bugs.webkit.org/show_bug.cgi?id=104152

        Reviewed by Rob Buis.

        RIM PR# 196975.
        Make sure the right include path for libjpeg is included.

        * Scripts/webkitdirs.pm:
        (blackberryCMakeArguments):

2012-12-05  Joseph Pecoraro  <pecoraro@apple.com>

        Remove stale check in check-for-webkit-framework-include-consistency
        https://bugs.webkit.org/show_bug.cgi?id=103775

        Reviewed by David Kilzer.

        The underlying issue was fixed in r81173.

        * Scripts/check-for-webkit-framework-include-consistency:

2012-12-05  Dirk Pranke  <dpranke@chromium.org>

        nrwt: simplify the finding of tests to retry
        https://bugs.webkit.org/show_bug.cgi?id=104067

        Reviewed by Ryosuke Niwa.

        I think this makes the code a little clearer; note that
        we were no longer using the include_missing flag.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):
        (Manager._failed_test_names):

2012-12-05  Dirk Pranke  <dpranke@chromium.org>

        nrwt: remove two unused parameters from a function
        https://bugs.webkit.org/show_bug.cgi?id=104059

        Reviewed by Ryosuke Niwa.

        Also remove an old, stale FIXME.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (interpret_test_failures):
        (summarize_results):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ResultSummaryTest.test_interpret_test_failures):

2012-12-05  Dirk Pranke  <dpranke@chromium.org>

        nrwt: return result_summaries from LayoutTestRunner.run_tests()
        https://bugs.webkit.org/show_bug.cgi?id=104051

        Reviewed by Ojan Vafai.

        This patch completes the refactoring that makes the result summary      
        an object returned from the layout test runner, rather than having      
        it passed in and modified. This makes the split of duties between       
        the manager and runner clearer and makes the data flow more             
        functionally.                                                           

        Also clean up some minor lint issues.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.__init__):
        (LayoutTestRunner.run_tests):
        (LayoutTestRunner._mark_interrupted_tests_as_skipped):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (FakePrinter.print_expected):
        (LockCheckingRunner.__init__):
        (LayoutTestRunnerTests._runner):
        (LayoutTestRunnerTests._run_tests):
        (LayoutTestRunnerTests.test_interrupt_if_at_failure_limits):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__):
        (Manager.run):
        (Manager._run_tests):

2012-12-05  Dirk Pranke  <dpranke@chromium.org>

        nrwt: move creation of the resultsummary objects into Manager._run_tests()
        https://bugs.webkit.org/show_bug.cgi?id=104048

        Reviewed by Ojan Vafai.

        This is a preparatory step to making the resultsummary just get
        returned from the layout_test_runner; this does most of manager-side
        changes.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._prepare_lists):
        (Manager.run):
        (Manager._run_tests):

2012-12-05  Leo Yang  <leoyang@rim.com>

        [BlackBerry] Enable CSS_IMAGE_RESOLUTION
        https://bugs.webkit.org/show_bug.cgi?id=104132

        Reviewed by Yong Li.

        * Scripts/webkitperl/FeatureList.pm:

2012-12-05  Filip Pizlo  <fpizlo@apple.com>

        JSC profiler should not count executions of op_call_put_result because doing so changes DFG codegen
        https://bugs.webkit.org/show_bug.cgi?id=104102

        Reviewed by Oliver Hunt.

        Modify the profiler to not output counts for op_call_put_result, since there
        won't be any. Also fix a few weird bugs, like providing better error reporting
        when you type something incorrectly and not reporting counts for slow paths
        in the old JIT since those counts are actually not what you think they are
        (we don't actually count slow path executions separately).

        * Scripts/display-profiler-output:

2012-12-05  Andras Becsi  <andras.becsi@digia.com>

        Fix compilation for Qt5.0.0 stable branch.
        https://bugs.webkit.org/show_bug.cgi?id=103870

        Reviewed by Simon Hausmann.

        Fix the use of renamed QWindow functions.
        Patch by Andras Becsi <andras.becsi@digia.com>

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::onTitleChanged):
        * MiniBrowser/qt/raw/View.cpp:
        (View::View):

2012-12-05  Jussi Kukkonen  <jussi.kukkonen@intel.com>

        [WK2] InjectedBundle should check Intent url for null
        https://bugs.webkit.org/show_bug.cgi?id=104117

        Reviewed by Kenneth Rohde Christiansen.

        WKIntentServiceInfoCopyHref() can return null, we need to check
        for that in InjectedBundlePage::registerIntentServiceForFrame()
        to avoid crashing.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::registerIntentServiceForFrame):

2012-12-04  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        Change email address of Jonathan Dong
        https://bugs.webkit.org/show_bug.cgi?id=103976

        Unreviewed, change my email address from jonathan.dong@torchmobile.com.cn
        to jonathan.dong.webkit@gmail.com in committers list.

        * Scripts/webkitpy/common/config/committers.py:

2012-12-04  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] DRT - Tests under "dumpAsText" directory should be dumped as text
        https://bugs.webkit.org/show_bug.cgi?id=103986

        Reviewed by Rob Buis.

        Also move declaration of webSettingTransaction to before any WebSettings
        ::setXXX() calls so that it works as expected (commit only once in the
        function scope).

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (shouldDumpAsText):
        (BlackBerry::WebKit::DumpRenderTree::resetToConsistentStateBeforeTesting):

2012-12-04  Filip Pizlo  <fpizlo@apple.com>

        display-profiler-output should be able to show source code
        https://bugs.webkit.org/show_bug.cgi?id=104073

        Reviewed by Oliver Hunt.

        Display source code in the summary, using a one-line shortening.

        * Scripts/display-profiler-output:

2012-12-04  Filip Pizlo  <fpizlo@apple.com>

        display-profiler-output should not use reflective infocation to resolve command names

        Rubber stamped by Mark Hahnenberg.

        Reflection is amazing, but here it was just kind of a bit much.

        * Scripts/display-profiler-output:

2012-12-02  Filip Pizlo  <fpizlo@apple.com>

        JSC should be able to report profiling data associated with the IR dumps and disassembly
        https://bugs.webkit.org/show_bug.cgi?id=102999

        Reviewed by Gavin Barraclough.

        Added a tool that allows you to grok the output from JSC's new profiler. Currently,
        this still gets confused a bit about the execution counts of a method running
        standalone versus a method running inlined, but other than that, it's pretty cool.
        See the attached "sampling profiling session" attached to the bug to see it in
        action.
        
        Also had to feed EFL's build system.

        * DumpRenderTree/efl/CMakeLists.txt:
        * Scripts/display-profiler-output: Added.

2012-12-04  Dirk Pranke  <dpranke@chromium.org>

        nrwt: fix total number of tests computed in the result summary
        https://bugs.webkit.org/show_bug.cgi?id=104061

        Unreviewed, build fix.

        One of the recent changes to the resultsummary refactoring caused
        us to not include the number of skipped tests in the total number
        of tests, throwing off the totals printed in print_one_line_summary().

        Unfortunately, given the current state of the code it is difficult
        to construct an accurate unit test for this. I have verified the
        fix by hand, and will write a test once the remaining refactoring
        patches land, at which point it will be trivial to test it.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._prepare_lists):

2012-12-04  Dirk Pranke  <dpranke@chromium.org>

        nrwt is not returning the exit status properly
        https://bugs.webkit.org/show_bug.cgi?id=103830

        Unreviewed, build fix.

        The fix in r136474 wasn't quite right either, and would return
        the correct exceptional status, but not the correct failing status.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2012-12-04  Dirk Pranke  <dpranke@chromium.org>

        nrwt: make paths and test_names passed arguments in Manager._prepare_lists et al
        https://bugs.webkit.org/show_bug.cgi?id=104047

        Reviewed by Eric Seidel.

        The code becomes cleaner if we are just passing values around rather
        than hanging them off the manager object, helps move _prepare_lists()
        to a pure function, and is needed to eventually make the
        result_summary object something returned from runner.run_tests()
        (note that two more patches are needed for that to happen).

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__):
        (Manager._http_tests):
        (Manager._prepare_lists):
        (Manager.needs_servers):
        (Manager._set_up_run):
        (Manager.run):
        (Manager._run_tests):
        (Manager._upload_json_files):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_needs_servers.get_manager):
        (ManagerTest.test_needs_servers):
        (ManagerTest.integration_test_needs_servers.get_manager):
        (ManagerTest.integration_test_needs_servers):
        (ManagerTest.test_look_for_new_crash_logs.get_manager):
        (ManagerTest):
        (ManagerTest.test_look_for_new_crash_logs):
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator.__init__):
        (JSONLayoutResultsGenerator._get_modifier_char):

2012-12-04  Adam Barth  <abarth@webkit.org>

        commit-queue can get stuck with a local commit
        https://bugs.webkit.org/show_bug.cgi?id=104032

        Reviewed by Dirk Pranke.

        Previously the commit-queue would only clean down to HEAD. If the
        commit-queue gets interrupted in the middle of a commit (e.g., after
        the local commit but before the dcommit), then it can end up with a
        patch locally committed. That patch will then prevent the commit-queue
        from functioning.

        This patch teaches the commit-queue to clean down to the merge base,
        which will remove any local commits.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.working_directory_is_clean):
        (Git.clean_working_directory):
        * Scripts/webkitpy/tool/commands/roll_unittest.py:
        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit._commit_warning):
        (Commit.run):

2012-12-04  Dirk Pranke  <dpranke@chromium.org>

        nrwt: store only the total number of tests in the result summary
        https://bugs.webkit.org/show_bug.cgi?id=103963

        Reviewed by Ryosuke Niwa.

        The result summary only needs the total number of tests that will
        be run (including repetitions) in order to provide the correct stats;
        it doesn't actually need to know how many unique tests there are, or
        or how many repetitions there are.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (LayoutTestRunnerTests._result_summary):
        (LayoutTestRunnerTests.test_update_summary_with_result):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._prepare_lists):
        (Manager.run):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_look_for_new_crash_logs):
        (ResultSummaryTest.get_result_summary):
        * Scripts/webkitpy/layout_tests/models/result_summary.py:
        (ResultSummary.__init__):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.get_result_summary):

2012-12-04  Dirk Pranke  <dpranke@chromium.org>

        nrwt: do less work when ctrl-c'ed
        https://bugs.webkit.org/show_bug.cgi?id=103961

        Reviewed by Ryosuke Niwa.

        Do less work when we are ctrl-c'ed, because the statistics aren't
        that useful anyway. While we're at it, modify summarize_results
        to be aware that we don't always retry results (instead of pretending
        that the retry produced the same results the initial run did).

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (summarize_results):
        (Manager.run):

2012-12-04  Dirk Pranke  <dpranke@chromium.org>

        nrwt: result summaries should not require a list of tests to skip
        https://bugs.webkit.org/show_bug.cgi?id=103951

        Reviewed by Ryosuke Niwa.

        We shouldn't really be passing a list of tests to skip to the
        ResultSummary objects; they should be handled like any other
        test result as much as possible.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (LayoutTestRunnerTests._result_summary):
        (LayoutTestRunnerTests.test_update_summary_with_result):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._prepare_lists):
        (Manager.run):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_look_for_new_crash_logs):
        (ResultSummaryTest.get_result_summary):
        * Scripts/webkitpy/layout_tests/models/result_summary.py:
        (ResultSummary.__init__):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.get_result_summary):

2012-12-04  Dirk Pranke  <dpranke@chromium.org>

        nrwt: derive per-thread, per-worker stats from result summaries
        https://bugs.webkit.org/show_bug.cgi?id=103943

        Reviewed by Ojan Vafai.

        This patch changes the manager and printing code to pull more           
        information from the ResultSummary object rather than tracking          
        additional statistics on the side. This allows us to consolidate        
        a bunch of logic and remove a bunch of free-floating lists and dicts of 
        of values. We add the shard_name and worker_name to each TestResult,    
        and then modify print_timing_statistics() and upload_json_files()       
        to just need the result summaries.                                      

        Note that this patch also changes the timing statistics slightly
        so that the individual test times are the times to run just the
        tests themselves (TestResult.test_run_time) and do not include the
        times taken to run the ref tests, compute diffs, etc. The aggregated
        per-worker and per-shard statistics still use the total time to
        process each test (TestResult.total_run_time).

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.__init__):
        (LayoutTestRunner.run_tests):
        (LayoutTestRunner._handle_finished_test_list):
        (LayoutTestRunner._handle_finished_test):
        (Worker.handle):
        (Worker._run_test):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (summarize_results):
        (Manager.run):
        (Manager._upload_json_files):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ResultSummaryTest.summarized_results):
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator.__init__):
        (JSONLayoutResultsGenerator._get_test_timing):
        * Scripts/webkitpy/layout_tests/models/test_results.py:
        (TestResult.__init__):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_results):
        (Printer._print_timing_statistics):
        (Printer):
        (Printer._print_worker_statistics):
        (Printer._print_aggregate_test_statistics):
        (Printer._print_individual_test_times):
        (Printer._print_directory_timings):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_print_unexpected_results.get_unexpected_results):
        (Testprinter):

2012-12-04  Adam Barth  <abarth@webkit.org>

        Remove obsolete code from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=104029

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        (CommitQueueTask.run):
        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit.options):
        * Scripts/webkitpy/tool/steps/options.py:
        (Options):

2012-12-04  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move WebPreferences and methods for modifying them to the TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=103841

        Reviewed by Darin Fisher.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebPreferences.h: Renamed from Tools/DumpRenderTree/chromium/WebPreferences.h.
        (WebKit):
        (WebTestRunner):
        (WebPreferences):
        (WebTestRunner::WebPreferences::WebPreferences):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestRunner):
        (WebTestDelegate):
        (WebTestRunner::WebTestDelegate::localFileToDataURL):
        (WebTestRunner::WebTestDelegate::rewriteLayoutTestsURL):
        (WebTestRunner::WebTestDelegate::preferences):
        (WebTestRunner::WebTestDelegate::applyPreferences):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner::TestRunner::setUserStyleSheetEnabled):
        (WebTestRunner):
        (WebTestRunner::TestRunner::setUserStyleSheetLocation):
        (WebTestRunner::TestRunner::setAuthorAndUserStylesEnabled):
        (WebTestRunner::TestRunner::setPopupBlockingEnabled):
        (WebTestRunner::TestRunner::setJavaScriptCanAccessClipboard):
        (WebTestRunner::TestRunner::setXSSAuditorEnabled):
        (WebTestRunner::TestRunner::setAllowUniversalAccessFromFileURLs):
        (WebTestRunner::TestRunner::setAllowFileAccessFromFileURLs):
        (WebTestRunner::TestRunner::overridePreference):
        (WebTestRunner::TestRunner::setPluginsEnabled):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp: Renamed from Tools/DumpRenderTree/chromium/WebPreferences.cpp.
        (WebTestRunner::WebPreferences::reset):
        (WebTestRunner):
        (WebTestRunner::WebPreferences::applyTo):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::preferences):
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::localFileToDataURL):
        (WebViewHost::rewriteLayoutTestsURL):
        (WebViewHost::preferences):
        (WebViewHost::applyPreferences):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-12-04  Zan Dobersek  <zandobersek@gmail.com>

        Many webkitpy unit tests can be run standalone, are executable
        https://bugs.webkit.org/show_bug.cgi?id=103900

        Reviewed by Eric Seidel.

        There's no need anymore to run unit tests in standalone mode as they
        are now handled by test-webkitpy in a formidable fashion. This makes
        it possible for this patch to remove the following unnecessary bits:
        - remove shebang lines from unit test files,
        - remove calls to unittest.main(),
        - make unit test files non-executable.

        * Scripts/webkitpy/common/checkout/diff_parser_unittest.py:
        (DiffParserTest.test_git_mnemonicprefix):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (GitTestWithMock.test_push_local_commits_to_server_without_username_and_with_password):
        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest.test_should_build):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_chromium_xvfb_port):
        * Scripts/webkitpy/common/find_files_unittest.py:
        (TestWinNormalize.test_win):
        * Scripts/webkitpy/common/lru_cache_unittest.py:
        (LRUCacheTest.test_set_again):
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (test_results_zip_url):
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        (test_keyring_without_git_repo_nor_keychain):
        * Scripts/webkitpy/common/net/omahaproxy_unittest.py:
        (OmahaProxyTest.test_get_revisions):
        * Scripts/webkitpy/common/net/unittestresults_unittest.py:
        * Scripts/webkitpy/common/newstringio_unittest.py:
        (NewStringIOTest.test_with):
        * Scripts/webkitpy/common/read_checksum_from_png_unittest.py:
        (ReadChecksumFromPngTest.test_read_checksum):
        * Scripts/webkitpy/common/system/file_lock_integrationtest.py:
        * Scripts/webkitpy/common/system/filesystem_mock_unittest.py:
        (MockFileSystemTest.test_normpath):
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (RealFileSystemTest.test_sep):
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo.test_total_bytes_memory):
        * Scripts/webkitpy/common/system/zipfileset_unittest.py:
        (ZipFileSetTest.test_namelist):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer_unittest.py:
        (TestResultWriterTest.test_reftest_diff_image):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        (JSONGeneratorTest.test_test_timings_trie):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (TestExpectationSerializationTests.test_string_whitespace_stripping):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (KeyCompareTest.test_test_key):
        * Scripts/webkitpy/layout_tests/port/builders_unittest.py:
        (BuildersTest.test_path_from_name):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidTwoPortsTest.test_options_with_two_ports):
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        (ChromiumLinuxPortTest.test_path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/chromium_port_testcase.py:
        (ChromiumPortLoggingTest.test_check_sys_deps):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortLoggingTest.test_check_sys_deps):
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        (ConfigTest.test_default_configuration__scripterror):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverTest.test_start_actually_starts):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.test_get_from_builder_name):
        * Scripts/webkitpy/layout_tests/port/http_lock_unittest.py:
        * Scripts/webkitpy/layout_tests/port/image_diff_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/reftests/extract_reference_link_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (PortTest.disabled_test_mac_lion):
        * Scripts/webkitpy/layout_tests/servers/http_server_integrationtest.py:
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (VerboseTest.test_log_args):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (test_details):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPerfTestFactory.test_inspector_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_parse_args):
        * Scripts/webkitpy/style/checker_unittest.py:
        * Scripts/webkitpy/style/checkers/changelog_unittest.py:
        (ChangeLogCheckerTest.test_no_error):
        * Scripts/webkitpy/style/checkers/common_unittest.py:
        (TabCheckerTest.test_tab):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppCheckerTest.test_ne):
        * Scripts/webkitpy/style/checkers/jsonchecker_unittest.py:
        * Scripts/webkitpy/style/checkers/png_unittest.py:
        (PNGCheckerTest.test_check):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        * Scripts/webkitpy/style/checkers/text_unittest.py:
        (TextCheckerTest.test_init):
        * Scripts/webkitpy/style/checkers/watchlist_unittest.py:
        * Scripts/webkitpy/style/checkers/xcodeproj_unittest.py:
        (XcodeProjectFileCheckerTest.test_detect_development_region):
        * Scripts/webkitpy/style/checkers/xml_unittest.py:
        (XMLCheckerTest.test_no_error):
        * Scripts/webkitpy/style/patchreader_unittest.py:
        * Scripts/webkitpy/test/finder_unittest.py:
        (FinderTest.test_paths):
        * Scripts/webkitpy/test/runner_unittest.py:
        (RunnerTest.test_run):
        * Scripts/webkitpy/test/skip_unittest.py:
        (SkipTest.test_skip_if_true):
        * Scripts/webkitpy/thirdparty/__init___unittest.py:
        (ThirdpartyTest.test_imports):
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests_unittest.py:
        (TestTranslation.test_include_rewriting):
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        (QueueEngineTest.tearDown):
        * Scripts/webkitpy/tool/grammar_unittest.py:
        (GrammarTest.test_join_with_separators):
        * Scripts/webkitpy/tool/mocktool_unittest.py:
        (MockOptionsTest.test_kwarg__set):
        * Scripts/webkitpy/tool/multicommandtool_unittest.py:
        (test_command_help):

2012-12-04  Zan Dobersek  <zandobersek@gmail.com>

        Many webkitpy module files are executable, have shebang line
        https://bugs.webkit.org/show_bug.cgi?id=103985

        Reviewed by Dirk Pranke.

        Remove the executable bit from webkitpy module files that are
        unnecessarily executable. Remove the shebang line from webkitpy
        module files, they are of no use. Only non-third-party files are
        changed.

        * Scripts/webkitpy/bindings/main.py:
        * Scripts/webkitpy/common/config/watchlist:
        * Scripts/webkitpy/common/find_files.py:
        * Scripts/webkitpy/common/lru_cache.py:
        * Scripts/webkitpy/common/multiprocessing_bootstrap.py:
        * Scripts/webkitpy/common/net/file_uploader.py:
        * Scripts/webkitpy/common/newstringio.py:
        * Scripts/webkitpy/common/read_checksum_from_png.py:
        * Scripts/webkitpy/common/system/autoinstall.py:
        * Scripts/webkitpy/common/system/file_lock.py:
        * Scripts/webkitpy/common/system/file_lock_mock.py:
        * Scripts/webkitpy/common/version_check.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        * Scripts/webkitpy/layout_tests/models/test_input.py:
        * Scripts/webkitpy/layout_tests/port/__init__.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/http_lock.py:
        * Scripts/webkitpy/layout_tests/port/image_diff.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        * Scripts/webkitpy/layout_tests/views/printing.py:
        * Scripts/webkitpy/performance_tests/perftest.py:
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        * Scripts/webkitpy/style/checkers/changelog.py:
        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/xcodeproj.py:
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py:
        (main): There's no need to run this module in standalone because
        it's wrapped by the Tools/Scripts/update-webgl-conformance-tests script.
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/comments.py:
        * Scripts/webkitpy/tool/main.py:

2012-12-04  Ryosuke Niwa  <rniwa@webkit.org>

        Add a Chromium Android Release (Perf) to the list of perf. bots.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2012-12-04  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Insert the jhbuild wrapper command at the beginning of the command list
        https://bugs.webkit.org/show_bug.cgi?id=103991

        Reviewed by Martin Robinson.

        Insert the Tools/gtk/run-with-jhbuild wrapper at the beginning of the
        command that's being formed in multiprocessing bootstrap. The wrapper is
        an executable Python script while the command being wrapped perhaps isn't
        and therefore requires the Python interpreter to be listed at the beginning
        of the command sublist that is then executed by the wrapper.

        Specifically, the webkitpy/layout_tests/run_webkit_tests.py module file
        is about to lose the executable bit and the Python-signaling shebang line.
        The Jhbuild wrapper simply executes the command that's passed, but that errs
        in this case unless the Python executable is executed and the module file
        is passed to it as an argument.

        * Scripts/webkitpy/common/multiprocessing_bootstrap.py:
        (run):

2012-12-04  Peter Beverloo  <peter@chromium.org>

        Add the Chromium Android Release (Perf) bot
        https://bugs.webkit.org/show_bug.cgi?id=103891

        Reviewed by Eric Seidel.

        Add configuration for the bot itself. It will be triggered by the Chromium
        Android Release builder. When running for Android, the DownloadAndPerfTest
        factory will also add the OutputAndroidDeviceStatus step.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (DownloadAndPerfTestFactory.__init__):

2012-12-04  Peter Beverloo  <peter@chromium.org>

        [Chromium] The ChromiumAndroidDriver constructor should not rely on adb being available
        https://bugs.webkit.org/show_bug.cgi?id=103758

        Reviewed by Eric Seidel.

        Lazily initialize the adb command parameters rather than initializing it in the
        constructor now that there is an assert if adb is not available on the system and
        we're not in a Chromium Android checkout.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._push_file_if_needed):
        (ChromiumAndroidDriver._run_adb_command):
        (ChromiumAndroidDriver.cmd_line):
        (ChromiumAndroidDriver._start_once):
        (ChromiumAndroidDriver._read_prompt):
        (ChromiumAndroidDriver):
        (ChromiumAndroidDriver._adb_command):

2012-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        Dromaeo should report individual test result
        https://bugs.webkit.org/show_bug.cgi?id=99800

        Reviewed by Eric Seidel.

        Ignore subtest results spit out by Dromaeo tests.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest): Added a line to ignore.
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (MainTest.test_parse_output_with_subtests): Added.

2012-12-03  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed, functionality fix after r136437.

        Calling sys.exit actually raises a SystemExit exception that
        is then handled in the second block and causes the script to
        return an 'exceptional' exit code rather than the code presenting
        the number of failed tests.

        This is just a temporary fix to get the faultless bots green while
        they are unnecessarily red at the moment. The problem and a proper
        fix will be properly addressed.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2012-12-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136460.
        http://trac.webkit.org/changeset/136460
        https://bugs.webkit.org/show_bug.cgi?id=103958

        This patch caused compile error when building DumpRenderTree
        (Requested by tasak on #webkit).

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest):

2012-12-03  Scott Violet  <sky@chromium.org>

        [chromium] Remove linux theme related files and switch to default
        https://bugs.webkit.org/show_bug.cgi?id=103897

        Reviewed by Darin Fisher.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest): linux->default

2012-12-03  Roger Fong  <roger_fong@apple.com>

        Disable WebKit2 API tests on Apple Windows port.
        https://bugs.webkit.org/show_bug.cgi?id=103929.

        Reviewed by Timothy Horton.

        * Scripts/run-api-tests:
        (runTestsBySuite):

2012-12-03  Dirk Pranke  <dpranke@chromium.org>

        webkitpy's run_webkit_tests should initialize the printer earlier on
        https://bugs.webkit.org/show_bug.cgi?id=103661

        Reviewed by Eric Seidel.

        Initialize the printer before computing the derived options
        from the command line arguments, so that we can safely log from
        port methods.

        Also clean up a few miscellaneous lint warnings.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.path_to_adb):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.default_child_processes):
        (MacPort.sample_process):
        (MacPort.start_helper):
        (MacPort.stop_helper):
        (MacPort.nm_command):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_default_child_processes):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):
        (_set_up_derived_options):

2012-12-03  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: autoinstaller is failing on windows
        https://bugs.webkit.org/show_bug.cgi?id=103699

        Reviewed by Tony Chang.

        Attempt to fix the python autoinstaller to work for pylint on win32
        again ... it turns out one of the dependent packages contains
        a write-protected test file and windows will choke when it tries to move
        it into place. Fortunately we can just delete the file prior to
        installing it in the final location, but we have to jump through
        a couple of hoops to do so.

        Also, make sure that we're flattening nested module names like
        "logilab/common" into either safe basenames (logilab_common) or
        host-specific subdirs (logilab\common) as needed.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._url_downloaded_path):
        (AutoInstaller._install):
        (AutoInstaller.install):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_pylint):

2012-12-03  Dirk Pranke  <dpranke@chromium.org>

        nrwt: clean up exception propagation / handling for interrupts and early exits
        https://bugs.webkit.org/show_bug.cgi?id=103830

        Reviewed by Ojan Vafai.

        The code for propagating early exits out of the test run was
        convoluted and hard to follow. By adjusting the WorkerException to
        derive from BaseException rather than Exception (which is a fair
        way of representing an error that was really unexpected/unrecoverable
        anyway) and pushing the TestRunInterruptedException into the
        ResultSummary (which is also fair since it was more of a result
        than an exception) this allows us to consolidate and clean up
        a bunch of the try/catch logic and pass fewer state flags around.

        There are no real functional changes to this patch; there's an
        API change in that we stop exporting TestRunInterruptedException
        and WorkerException out of the Manager, and the existence of the
        MessagePool is now completely hidden.

        * Scripts/webkitpy/common/message_pool.py:
        (WorkerException):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (summarize_results):
        (Manager.run):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ResultSummaryTest.summarized_results):
        * Scripts/webkitpy/layout_tests/models/result_summary.py:
        (ResultSummary.__init__):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):
        (main):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_exception_raised.of):
        (MainTest.test_exception_raised):
        (MainTest.test_run_force):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_print_unexpected_results.get_unexpected_results):
        (Testprinter):

2012-12-03  Julien BRIANCEAU   <jbrianceau@nds.com>

        Add Qt/SH4 build slave to build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=103384

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2012-12-03  Alexis Menard  <alexis@webkit.org>

        Enable CSS3 background-position offset by default
        https://bugs.webkit.org/show_bug.cgi?id=103917

        Reviewed by Benjamin Poulain.

        Even though each port may enable or not the feature we still need
        to pass it at configure time otherwise it will be disabled.

        * Scripts/webkitperl/FeatureList.pm:

2012-12-03  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        Unreviewed. Adding myself to committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2012-12-03  Laszlo Gombos  <l.gombos@samsung.com>

        [CMake] Enable building WebKit2-only build for the EFL port
        https://bugs.webkit.org/show_bug.cgi?id=103820

        Reviewed by Gyuyoung Kim.

        Set ENABLE_WEBKIT2 to OFF if build-webkit was run with --no-webkit2.
        Never set ENABLE_WEBKIT in build-webkit. This will simplyfy invoking
        cmake directly. Initialize $cmakeArgs to avoid potential
        warnings when running the script.

        * Scripts/build-webkit:

2012-12-03  Tommy Widenflycht  <tommyw@google.com>

        Speech Recognition API: Update SpeechRecognitionEvent to match the specification
        https://bugs.webkit.org/show_bug.cgi?id=103407

        Reviewed by Kentaro Hara.

        Changing the mock to use the new results delivery API.

        * DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp:

2012-12-03  Alexis Menard  <alexis@webkit.org>

        [Qt] Enable CSS3 background-position offsets by default.
        https://bugs.webkit.org/show_bug.cgi?id=103877

        Reviewed by Tor Arne Vestbø.

        Enable by default CSS3 background-position offsets.

        * qmake/mkspecs/features/features.pri:

2012-12-03  KyungTae Kim  <ktf.kim@samsung.com>

        [EFL][WK2] Use float variable for zoom levels for MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=103863

        Reviewed by Gyuyoung Kim.

        Use float instead of int for zoomLevels variables for a clearer expression

        * MiniBrowser/efl/main.c:
        (on_key_down):

2012-12-02  KyungTae Kim  <ktf.kim@samsung.com>

        [EFL][WK2] Add support for a zoom level setting to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=99285

        Reviewed by Gyuyoung Kim.

         Add support for a zoom level setting to MiniBrowser.
         Shortcuts for setting operations are same as common browsers:
         Ctrl + '+' to zoom in, Ctrl + '-' to zoom out and Ctrl + '0' to zoom to default.

        * MiniBrowser/efl/main.c:
        (on_key_down):

2012-12-02  KyungTae Kim  <ktf.kim@samsung.com>

        [EFL][WK2] ECORE_GETOPT_VALUE_BOOL need to be used for Eina_Bool
        https://bugs.webkit.org/show_bug.cgi?id=103835

        Reviewed by Kentaro Hara.

        Because legacy_behavior_enabled is Eina_Bool, ECORE_GETOPT_VALUE_BOOL need to be used

        * MiniBrowser/efl/main.c:
        (elm_main):

2012-12-02  Mike West  <mkwst@chromium.org>

        Garden-o-matic shouldn't die when blank JSON results are received.
        https://bugs.webkit.org/show_bug.cgi?id=103838

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
            If the JSONP string doesn't contain '(' or ')', return an empty object.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:
            Check that this behavior stays in place.

2012-12-02  Eric Seidel  <eric@webkit.org>

        run-perf-tests --profile should use iprofiler instead of instruments on Mac
        https://bugs.webkit.org/show_bug.cgi?id=103765

        Unreviewed.  Updating the unittests after my previous change.

        * Scripts/webkitpy/common/system/profiler_unittest.py:
        (ProfilerFactoryTest.test_basic):

2012-12-02  Julie Parent  <jparent@chromium.org>

        Remove dead code in flakiness dashboard for obsolete buildDir option
        https://bugs.webkit.org/show_bug.cgi?id=103792

        Reviewed by Dirk Pranke.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (initBuilders):

2012-12-02  Dirk Pranke  <dpranke@chromium.org>

        nrwt: clean up logic for retrying failed tests a bit
        https://bugs.webkit.org/show_bug.cgi?id=103829

        Reviewed by Ojan Vafai.

        The code for determining when to retry test failures and
        show the results.html file was awkward and could stand some
        cleaning up. This patch should have no functional changes.

        The routine called _get_failures() returned a dict of test names
        to failure types, but we only ever used the names, so I've converted
        it to return a list (and renamed it); also, the show_results_html()
        file was calling that routine to figure out if anything failed, when
        the information was already in the result_summary (as either
        unexpected_results or total_failures), so we were doing unnecessary work.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__):
        (Manager.run):
        (Manager._run_tests):
        (Manager._failed_test_names):
        (Manager._copy_results_html_file):

2012-12-02  Dirk Pranke  <dpranke@chromium.org>

        nrwt: remove unused methods in manager.py
        https://bugs.webkit.org/show_bug.cgi?id=103828

        Reviewed by Eric Seidel.

        These two methods weren't being called by anything and were no
        longer needed.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._get_failures):
        (Manager._upload_json_files):

2012-12-02  Laszlo Gombos  <l.gombos@samsung.com>

        Correct the spelling of the cmakeargs argument
        https://bugs.webkit.org/show_bug.cgi?id=103814

        Reviewed by Darin Adler.

        The script expects cmakeargs (plural), so lets get the
        documentation of the script report the same.

        * Scripts/build-webkit:

2012-12-02  Mike West  <mkwst@chromium.org>

        [gtk] Enable the CSP_NEXT runtime flag.
        https://bugs.webkit.org/show_bug.cgi?id=103810

        Reviewed by Adam Barth.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
            Turn on the CSP_NEXT runtime flag when running tests under GTK.

2012-12-02  Eric Seidel  <eric@webkit.org>

        run-perf-tests --profile should use iprofiler instead of instruments on Mac
        https://bugs.webkit.org/show_bug.cgi?id=103765

        Reviewed by Ryosuke Niwa.

        Stephanie pointed out that iprofiler is the newer command-line interface
        to replace /usr/bin/instruments in Instruments 4 (which according to the
        interblags is supported on everything since 10.6.6), so I've moved --profile
        to use iprofiler on Mac.

        I also made the IProfiler class wait for iprofiler to complete so that
        iprofiler won't continue running after run-perf-tests is complete (and
        spam over the top of your shell output).

        There are a couple of "got-chas" to this approach:
        1.  iprofiler will ask for your password the first time you run it, which may
            cause your first test to fail.  /usr/bin/instruments doesn't seem to do that.
        2.  iprofiler has nice (but kinda awkward for our purposes) support for separate
            directory and basename arguments, making IProfiler a somewhat awkward
            baseclass of SingleFileOutputProfiler

        I suspect we'll iterate from here.  It does seem slightly faster than
        /usr/bin/instruments was.

        * Scripts/webkitpy/common/system/profiler.py:
        (ProfilerFactory.create_profiler):
        (IProfiler):
        (IProfiler.__init__):
        (IProfiler.attach_to_pid):

2012-12-02  Yongjun Zhang  <yongjun_zhang@apple.com>

        Need a method to close all idle localstorage databases immediately.
        https://bugs.webkit.org/show_bug.cgi?id=103469

        Reviewed by David Kilzer.

        Add an JS method to TestRunner, to enable testing closing idle local storage databases in
        DumpRenderTree layout tests.

        * DumpRenderTree/TestRunner.cpp:
        (closeIdleLocalStorageDatabasesCallback):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        (TestRunner::closeIdleLocalStorageDatabases):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::closeIdleLocalStorageDatabases):
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        (TestRunner::closeIdleLocalStorageDatabases):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::closeIdleLocalStorageDatabases):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::closeIdleLocalStorageDatabases):
        * DumpRenderTree/wx/TestRunnerWx.cpp:
        (TestRunner::closeIdleLocalStorageDatabases):

2012-12-02  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2] MiniBrowser should have a legacy mode
        https://bugs.webkit.org/show_bug.cgi?id=103679

        Reviewed by Kenneth Rohde Christiansen.

        Add an option to start MiniBrowser in legacy mode.

        * MiniBrowser/efl/main.c:
        (window_create):
        (elm_main):

2012-12-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136236.
        http://trac.webkit.org/changeset/136236
        https://bugs.webkit.org/show_bug.cgi?id=103833

        [chromium] Flakey crashes in SpeechRecognitionEvent::emma
        during GC. (Requested by mkwst on #webkit).

        * DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp:

2012-12-01  Zan Dobersek  <zandobersek@gmail.com>

        [XvfbDriver] XvfbDriverTest.test_next_free_display is flaky on builders using XvfbDriver
        https://bugs.webkit.org/show_bug.cgi?id=103806

        Reviewed by Dirk Pranke.

        There are occasional mishaps on builders where XvfbDriver doesn't properly
        clean up the Xvfb instance it was managing so the related guard lock files
        are still existing when the webkitpy unit tests are run. This can cause failures
        in XvfbDriverTest.test_next_free_display as the test tries to acquire displays
        with a specific number but is unable to due to the stale locks.

        The solution to this is to use MockFileLock when inside unit test. This is achievable
        by creating a file lock through the SystemHost instance connected to the Port object,
        the latter available to the Driver.

        * Scripts/webkitpy/common/system/file_lock_mock.py:
        (MockFileLock.acquire_lock): Return True to signal lock acquiring succeeded.
        (MockFileLock.release_lock): Return True to signal lock releasing succeeded.
        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        (XvfbDriver._next_free_display): Create the file lock through a mockable way.
        * Scripts/webkitpy/layout_tests/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.test_next_free_display): Enable back the unit test.

2012-12-01  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] A11y tests in WK2 report badly-formatted AX roles
        https://bugs.webkit.org/show_bug.cgi?id=102947

        Reviewed by Xan Lopez.

        As in DRT, convert the ATK accessibility roles to corresponding AXRoles.
        These are expected in both tests and their baselines.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::roleToString):
        (WTR):
        (WTR::AccessibilityUIElement::role):

2012-11-30  Mike West  <mkwst@chromium.org>

        CSP 1.1: Make the CSP_NEXT flag runtime enabled.
        https://bugs.webkit.org/show_bug.cgi?id=103652

        Reviewed by Adam Barth.

        Ensures that the new SecurityPolicy runtime flag is enabled for Chromium's tests.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2012-11-30  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Removed temporary debugging change from DRT (r136300).

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):

2012-11-30  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Temporary change to DRT for debugging purposes.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):

2012-11-29  Tommy Widenflycht  <tommyw@google.com>

        Speech Recognition API: Update SpeechRecognitionEvent to match the specification
        https://bugs.webkit.org/show_bug.cgi?id=103407

        Reviewed by Adam Barth.

        Changing the mock to use the new results delivery API.

        * DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp:

2012-11-30  Simon Hausmann  <simon.hausmann@digia.com>, Pierre Rossi  <pierre.rossi@digia.com>

        [Qt] Separate Qt WebKit into Qt WebKit and Qt WebKit Widgets
        https://bugs.webkit.org/show_bug.cgi?id=99314

        Reviewed by Tor Arne Vestbø.

        This big change separates QtWebKit into QtWebKit and QtWebKitWidgets as
        shared libraries.

        It's a big refactoring that mostly involves moving WebCore dependent
        code into QtWebKit and accessing it through exported QWebFrameAdapter
        and QWebPageAdapter classes.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dump): Adapt to internal API changes.
        * MiniBrowser/qt/MiniBrowser.pro:
        * Scripts/webkitpy/style/checker.py: Adapt Qt exceptions to new paths.
        * Scripts/webkitpy/style/checker_unittest.py:
        (GlobalVariablesTest.test_path_rules_specifier):
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/webkit_modules.prf:
        * qmake/mkspecs/modules/webkitwidgets.prf: Removed.

2012-11-30  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed trivial fix.

        Add empty.cpp back, it was removed accidentally by r129092.

        * qmake/config.tests/gccdepends/empty.cpp: Added.

2012-11-30  Tor Arne Vestbø  <tor.arne.vestbo@digia.com>

        [Qt] Add support for prepare_docs and generate_docs

        Follow-up to changes in Qt in how documentation is built.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:

2012-11-30  Zan Dobersek  <zandobersek@gmail.com>

        Finally remove webkitpy.common.system.deprecated_logging
        https://bugs.webkit.org/show_bug.cgi?id=103624

        Reviewed by Adam Barth.

        Remove the deprecated logging module and its unit tests now that such logging is not
        used anymore in webkitpy.

        The tee and OutputTee classes are moved into a new module, webkitpy.common.system.outputtee.
        The tee class is renamed to Tee to conform with the usual guidelines.

        Only unit test for the Tee class is currently provided as the OutputTee is not currently
        using the webkitpy Filesystem abstraction that would make its functionality testable.

        * Scripts/webkitpy/common/system/executive.py: tee (now Tee) is now in a new module.
        (Executive.run_and_throw_if_fail):
        * Scripts/webkitpy/common/system/outputtee.py: Renamed from Tools/Scripts/webkitpy/common/system/deprecated_logging.py.
        (Tee):
        (Tee.__init__):
        (Tee.write):
        (OutputTee):
        (OutputTee.__init__):
        (OutputTee.add_log):
        (OutputTee.remove_log):
        (OutputTee._open_log_file):
        (OutputTee._tee_outputs_to_files):
        * Scripts/webkitpy/common/system/outputtee_unittest.py: Renamed from Tools/Scripts/webkitpy/common/system/deprecated_logging_unittest.py.
        (SimpleTeeTest):
        (SimpleTeeTest.test_simple_tee):
        * Scripts/webkitpy/tool/bot/queueengine.py: OutputTee is now in a new module.
        * Scripts/webkitpy/webkitpy.pyproj: Remove the deprecated_logging module and related unit test file.

2012-11-30  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] Add support for PlatformWebView::simulateRightClick() in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=103634

        Reviewed by Gyuyoung Kim.

        Add support for PlatformWebView::simulateRightClick() and enable
        WebKit2 API test HitTestResultNodeHandle.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::PlatformWebView::simulateRightClick):
        (TestWebKitAPI):

2012-11-30  Mihai Maerean  <mmaerean@adobe.com>

        [CSSRegions] when WebKit uses V8, there should be a single variable to store if the CSS Regions feature is enabled
        https://bugs.webkit.org/show_bug.cgi?id=101192

        Reviewed by Hajime Morita.

        Removed the CSS Regions flag in Settings and switched to using the new flag I have added in RuntimeEnabledFeatures.

        Tests: No new tests because there is no functional change.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):

2012-11-29  Rafael Weinstein  <rafaelw@chromium.org>

        [HTMLTemplateElement] Add feature flag
        https://bugs.webkit.org/show_bug.cgi?id=103694

        Reviewed by Adam Barth.

        This flag will guard the implementation of the HTMLTemplateElement.
        http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html

        * Scripts/webkitperl/FeatureList.pm:

2012-11-29  Dirk Pranke  <dpranke@chromium.org>

        Ignore errors when removing directories on win32 during autoinstall
        https://bugs.webkit.org/show_bug.cgi?id=103699

        Unreviewed, build fix.

        I think this will work on win32; if not, I'll have to actually
        reproduce this :). The problem is that the logilab files
        appear to contain a write-protected file, and deleting those
        is problematic on windows.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._install):
        (AutoInstaller.install):

2012-11-29  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: autoinstaller is failing on windows
        https://bugs.webkit.org/show_bug.cgi?id=103699

        Unreviewed, build fix.

        We're attempting to create directories with forward slashes in them;
        this is a no-no on windows.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._create_scratch_directory_inner):

2012-11-29  Dirk Pranke  <dpranke@chromium.org>

        Fix python unit tests after r136158 (android port tests failing)
        https://bugs.webkit.org/show_bug.cgi?id=103581

        Unreviewed, build fix.

        The unit tests apparently weren't ran for this patch; we failed
        to update the mock executive calls out to adb to determine various
        aspects of the environment, and were failing to create drivers.

        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (MockRunCommand.mock_run_command_fn):

2012-11-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136175 and r136177.
        http://trac.webkit.org/changeset/136175
        http://trac.webkit.org/changeset/136177
        https://bugs.webkit.org/show_bug.cgi?id=103683

        Changes did not correct Windows build. (Requested by bfulgham
        on #webkit).

        * TestWebKitAPI/Tests/WebCore/win/BitmapImage.cpp:

2012-11-29  Brent Fulgham  <bfulgham@webkit.org>

        [Windows, WinCairo] Unreviewed build correction. Correct debug
        build case on build machine.

        * TestWebKitAPI/Tests/WebCore/win/BitmapImage.cpp:

2012-11-29  Brent Fulgham  <bfulgham@webkit.org>

        [Windows, WinCairo] Unreviewed build correction. Hide the
        unexported 'notSolidColor' symbol when testing against
        the BitmapImage class to avoid having to deal with a
        debug-only symbol in the Windows export definition file.

        * TestWebKitAPI/Tests/WebCore/win/BitmapImage.cpp: 

2012-11-29  Peter Beverloo  <peter@chromium.org>

        run-perf-tests --chromium-android should not require adb in my path
        https://bugs.webkit.org/show_bug.cgi?id=103581

        Reviewed by Eric Seidel.

        Remove the need to have "adb" available in the path for Layout and Performance
        tests. We'll determine the versions of the "adb" version in path (if any) and
        the one provided in the Chromium Android checkout. Unless the "adb" available
        in the path is newer, the provided version will be used.

        Some other minor nits addressed:
        - The path_to_forwarder/path_to_md5sum should not be in the "private overrides"
          section, as they're not overriding anything and are used by the driver.
        - Make _restart_adb_as_root slightly more robust by waiting for the device
          to come back online regardless of the output.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        (ChromiumAndroidPort.check_build):
        (ChromiumAndroidPort.path_to_adb):
        (ChromiumAndroidPort):
        (ChromiumAndroidPort.path_to_forwarder):
        (ChromiumAndroidPort.path_to_md5sum):
        (ChromiumAndroidPort._path_to_helper):
        (ChromiumAndroidPort._determine_adb_version):
        (ChromiumAndroidPort._get_devices):
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._setup_md5sum_and_push_data_if_needed):
        (ChromiumAndroidDriver._push_executable):
        (ChromiumAndroidDriver._restart_adb_as_root):

2012-11-29  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] Embed the HTTP authentication dialog into the WebView
        https://bugs.webkit.org/show_bug.cgi?id=103277

        Reviewed by Carlos Garcia Campos.

        Skip the new WebKit2GtkAuthenticationDialog files so that they are not processed
        during gtkdoc generation.

        * gtk/generate-gtkdoc:
        (get_webkit2_options):

2012-11-29  Eric Seidel  <eric@webkit.org>

        run-perf-tests --chromium-android fails due to Skia INFO logging
        https://bugs.webkit.org/show_bug.cgi?id=103585

        Reviewed by Adam Barth.

        Ignore all INFO logging from Chromium code.
        Also added some basic testing of the ignored-stderr lines code.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (MainTest.test_ignored_stderr_lines):

2012-11-29  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] Add support for PlatformWebView::simulateMouseMove() in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=103252

        Reviewed by Kenneth Rohde Christiansen.

        Add support for PlatformWebView::simulateMouseMove() and enable
        WebKit2 API test MouseMoveAfterCrash.

        * TestWebKitAPI/PlatformEfl.cmake: Enable MouseMoveAfterCrash API
        test.
        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::onWebProcessCrashed): Handle 'webprocess,crashed' signal
        to prevent loading an error page since the test case is reloading actual
        page after web process has terminated and recovered.
        (TestWebKitAPI):
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        (TestWebKitAPI::PlatformWebView::simulateMouseMove): Implemented.

2012-11-29  Andras Becsi  <andras.becsi@digia.com>

        [Qt] Fix installation of QtWebProcess binary
        https://bugs.webkit.org/show_bug.cgi?id=101735

        Reviewed by Simon Hausmann.

        Add config test to detect the availability of support
        for "program executables" in Qt (libexec).

        This test can be removed after the Qt5 release.

        * Tools.pro:
        * qmake/mkspecs/features/features.prf:
        * qmake/config.tests/libexecdir/libexecdir.cpp:
        * qmake/config.tests/libexecdir/libexecdir.pro:

2012-11-29  Eric Seidel  <eric@webkit.org>

        run-perf-tests does not work when the layout test directory does not exist
        https://bugs.webkit.org/show_bug.cgi?id=103572

        Reviewed by Ryosuke Niwa.

        Make sure that Profiler() calls maybe_make_directory for the output_dir
        before ever using it.  It's a little awkward to create the directory
        from the constructor, but its simplest that way as the various subclasses
        all use the directory at different times.

        Since this required having a filesystem in Profiler (and I didn't want
        to grab inside Workspace to get one), I just made Profiler expect a
        SystemHost instead of a separate filesystem, executive and workspace.

        * Scripts/webkitpy/common/system/profiler.py:
        (ProfilerFactory.create_profiler):
        (Profiler.__init__):
        (SingleFileOutputProfiler.__init__):
        (GooglePProf.__init__):
        (GooglePProf.profile_after_exit):
        (Instruments.__init__):
        (Instruments.attach_to_pid):
        * Scripts/webkitpy/common/system/profiler_unittest.py:
        (ProfilerFactoryTest.test_basic):

2012-11-28  Vivek Galatage  <vivek.vg@samsung.com>

        Adding secondary email id
        https://bugs.webkit.org/show_bug.cgi?id=103594

        Unreviewed. Adding secondary email.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-28  Kent Tamura  <tkent@chromium.org>

        garden-o-matic: Use indeterminate <progress> in the status area
        https://bugs.webkit.org/show_bug.cgi?id=103494

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        Wrap the "Processing..." message with an indeterminate progress bar.
        We keep the message as a fallback content.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:
        Follow the above change.

2012-11-28  Nima Ghanavatian  <nghanavatian@rim.com>

        Adding Nima Ghanavatian to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=103533

        Reviewed by Rob Buis.

        Adding myself to committers.py as a Committer.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-28  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Crash when requesting favicon.
        https://bugs.webkit.org/show_bug.cgi?id=102689

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebCore/win: Added.
        * TestWebKitAPI/Tests/WebCore/win/BitmapImage.cpp: Added.
        (TestWebKitAPI::BitmapImageTest::BitmapImageTest): Allocate frame in constructor.
        (TestWebKitAPI::BitmapImageTest::frameCount): Override frameCount() method.
        (TestWebKitAPI::TEST): Added new test.
        * TestWebKitAPI/config.h: Make sure defines are correct for WinCairo.
       * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added new test.

2012-11-28  Eric Seidel  <eric@webkit.org>

        run-perf-tests should have a --profile option for easy profiling
        https://bugs.webkit.org/show_bug.cgi?id=99517

        Reviewed by Adam Barth.

        This is a very basic implementation which works on Mac and Linux
        and makes it trivial for anyone to profile a PerformanceTest.

        Currently it's not "hard" to profile a PerformanceTest
        but lowering the barriers to entry here allows all of us to focus
        less on the tools and more on the code.

        This also paves the way for adding easy mobile-profiling (e.g. chromium-android)
        which is actually "hard", and this option will make much easier.

        * Scripts/webkitpy/common/system/profiler.py: Added.
        (ProfilerFactory):
        (ProfilerFactory.create_profiler):
        (Profiler):
        (Profiler.__init__):
        (Profiler.adjusted_environment):
        (Profiler.attach_to_pid):
        (Profiler.did_stop):
        (SingleFileOutputProfiler):
        (SingleFileOutputProfiler.__init__):
        (GooglePProf):
        (GooglePProf.__init__):
        (GooglePProf.adjusted_environment):
        (GooglePProf.did_stop):
        (Instruments):
        (Instruments.__init__):
        (Instruments.attach_to_pid):
        * Scripts/webkitpy/common/system/profiler_unittest.py: Added.
        (ProfilerFactoryTest):
        (ProfilerFactoryTest.test_basic):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.__init__):
        (Driver._start):
        (Driver.stop):
        (Driver.cmd_line):
        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest.parse_output):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (MainTest.test_parse_output):
        (MainTest.test_parse_output_with_failing_line):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner.run):

2012-11-28  Zan Dobersek  <zandobersek@gmail.com>

        Remove deprecated logging usage from QueueEngine
        https://bugs.webkit.org/show_bug.cgi?id=103532

        Reviewed by Dirk Pranke.

        Replace usage of deprecated logging in webkitpy.tool.bot.queueengine with
        logging through the Logger object. The unit test is modified to reflect
        these changes.

        After these changes the deprecated logging (i.e. logging to stderr) is not
        used anymore through webkitpy and can be removed.

        * Scripts/webkitpy/tool/bot/queueengine.py:
        (QueueEngine.exit_after_handled_error):
        (QueueEngine.run):
        (QueueEngine._stopping):
        (QueueEngine._sleep):
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        (QueueEngineTest._run_engine):

2012-11-28  Nate Chapin  <japhet@chromium.org>

        Move empty loading to DocumentLoader, simplify FrameLoader::init()
        https://bugs.webkit.org/show_bug.cgi?id=101512

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::updateForCommittedLoad): This function doesn't play nicely with empty urls and incorrectly
            interprets them as a non-empty load. This change is required for
             http/tests/navigation/new-window-redirect-history.html to continue to pass in chromium.
        * TestWebKitAPI/Tests/WebKit2/AboutBlankLoad.cpp: This test relies on a callback that no longer
             is sent for about:blank loads.  Hook into didFinishLoadForFrame() instead.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):

2012-11-28  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        [chromium] Allow plugins to opt-in to receive synthetic mouse events out of touch events.
        https://bugs.webkit.org/show_bug.cgi?id=103092

        Reviewed by Tony Chang.

        Update the test web-plugin to be able to opt-in to receive synthesized mouse events created
        from touch events.

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (parseTouchEventRequestType):
        (TestWebPlugin::TestWebPlugin):
        (TestWebPlugin::initialize):
        * DumpRenderTree/chromium/TestWebPlugin.h:
        (TestWebPlugin):

2012-11-28  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] Add support for PlatformWebView::simulateSpacebarKeyPress() in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=103123

        Reviewed by Laszlo Gombos.

        Add support for PlatformWebView::simulateSpacebarKeyPress().
        This functionality is needed by WebKit2 API test MouseMoveAfterCrash
        which is going to be unskipped in bug #103252.

        * TestWebKitAPI/efl/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::sleep):
        * TestWebKitAPI/efl/PlatformWebView.cpp: Use usleep() instead of
        sleep().
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress):
        (TestWebKitAPI):

2012-11-28  Yael Aharon  <yael.aharon@intel.com>

        Minor cleanup in TestInvocation
        https://bugs.webkit.org/show_bug.cgi?id=103512

        Reviewed by Kenneth Rohde Christiansen.

        Remove a function declaration that is not defined and not used.
        Fix spelling error in m_webProcessIsUnresponsive.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/TestInvocation.h:
        (TestInvocation):
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2012-11-28  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Unreviewed. Use my personal email as bugzilla email.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-28  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Unreviewed. Adding myself to committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-26  Andrey Adaikin  <aandrey@chromium.org>

        Unreviewed. Adding myself to committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-28  Tommy Widenflycht  <tommyw@google.com>

        Add basic implementation for MediaStreamAudioDestinationNode
        https://bugs.webkit.org/show_bug.cgi?id=101815

        Reviewed by Chris Rogers.

        Adds a bit of code that exercises the WebKit API.

        * DumpRenderTree/chromium/MockWebMediaStreamCenter.cpp:
        (MockWebMediaStreamSourceConsumer):
        (MockWebMediaStreamSourceConsumer::~MockWebMediaStreamSourceConsumer):
        (MockWebMediaStreamCenter::didCreateMediaStream):

2012-11-28  Matt Falkenhagen  <falken@chromium.org>

        Unreviewed. Adding myself to committers list.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-27  Li Yin  <li.yin@intel.com>

        Unreviewed. Adding myself to committers list.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-27  Christophe Dumez  <christophe.dumez@intel.com>

        Unreviewed. Adding myself to committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-27  Vivek Galatage  <vivek.vg@samsung.com>

        Unreviewd. Adding myself to committers list.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-27  Tony Chang  <tony@chromium.org>

        Bring back partytime!
        https://bugs.webkit.org/show_bug.cgi?id=103466

        Reviewed by Adam Barth.

        "code 404, message Unknown function images/partytime_gif" since we didn't
        allow .gif or .png files to be served.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler):

2012-11-27  Adam Barth  <abarth@webkit.org>

        run-perf-tests fails on Android because of stderr output
        https://bugs.webkit.org/show_bug.cgi?id=103462

        Reviewed by Ryosuke Niwa.

        The chromium-android port produces some stderr output that causes
        run-perf-tests to get sad and not record the results of the performance
        test. This patch teaches run-perf-test to ignore this output much in
        the same way that it currently ignores some stdout messages.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest.run):
        (PerfTest._should_ignore_line):
        (PerfTest):
        (PerfTest._should_ignore_line_in_stderr):
        (PerfTest._filter_stderr):
        (PerfTest._should_ignore_line_in_parser_test_result):

2012-11-27  Tony Chang  <tony@chromium.org>

        Fix garden-o-matic for non-chromium ports
        https://bugs.webkit.org/show_bug.cgi?id=103458

        Reviewed by Adam Barth.

        I was getting a 403 error when trying to select any non-chromium port.

        * Scripts/webkitpy/tool/servers/reflectionhandler.py:
        (ReflectionHandler._handle_request): Use the path without query params.

2012-11-27  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2] 3D pixel tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=102833

        Reviewed by Kenneth Rohde Christiansen.

        Generate a snapshot of the view in the UI process instead of the web process.
        We have to use Texture Mapper in order to correctly paint 3D transforms etc.

        * WebKitTestRunner/TestInvocation.h:
        (TestInvocation):
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::writeFunction):
        (WTR::paintRepaintRectOverlay):
        (WTR):
        (WTR::TestInvocation::forceRepaintDoneCallback):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::windowSnapshotImage):

2012-11-27  Adam Barth  <abarth@webkit.org>

        Make it possible to run performance tests on Chromium Android
        https://bugs.webkit.org/show_bug.cgi?id=103268

        Reviewed by Ryosuke Niwa.

        Based on a patch by Peter Beverloo.

        This patch (almost) makes it possible to run WebKit performance tests
        on the Chromium port for Android. There are a few things I had to do
        in order to make this happen:

        1) The worker number when creating a driver for a port is zero-based
           for layout tests and elsewhere. Android uses this to determine
           which device it has to run on, so make it zero based for performance
           tests as well.

        2) Tests aren't available on the Android device, so we start an HTTP
           server that serves the tests to the device or emulator.

        The one shortcoming of this patch is that chromium-android produces
        some stderr output that confuses run-perf-tests. I'll address that
        issue in a subsequent CL. This patch also depends on
        https://codereview.chromium.org/11416182 in order to work.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.start_http_server):
        (ChromiumAndroidDriver._command_from_driver_input):
        * Scripts/webkitpy/performance_tests/perftest.py:
        (ReplayPerfTest.prepare):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__):
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner._start_servers):
        (PerfTestsRunner):
        (PerfTestsRunner._stop_servers):
        (PerfTestsRunner.run):
        (PerfTestsRunner._run_tests_set):

2012-11-27  Zan Dobersek  <zandobersek@gmail.com>

        Remove use of deprecated logging from webkitpy.common and webkitpy.layout_tests
        https://bugs.webkit.org/show_bug.cgi?id=103408

        Reviewed by Dirk Pranke.

        Remove the use of the deprecated log and error methods by replacing them with
        logging through Python's logging.Logger objects.

        This patch covers such changes in webkitpy.common and webkitpy.layout_tests and also
        updates any affected unit test.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLogEntry._parse_entry):
        * Scripts/webkitpy/common/checkout/checkout.py:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CheckoutTest.test_apply_patch):
        * Scripts/webkitpy/common/checkout/deps_mock.py:
        (MockDEPS.write_variable):
        * Scripts/webkitpy/common/checkout/scm/detection.py:
        (SCMDetector.default_scm):
        * Scripts/webkitpy/common/checkout/scm/detection_unittest.py:
        (SCMDetectorTest.test_detect_scm_system):
        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git._check_git_architecture):
        (Git._commit_on_branch):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.ensure_clean_working_directory):
        (SCM.ensure_no_local_commits):
        (SCM.will.commit_locally_with_message):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.apply_reverse_diff):
        * Scripts/webkitpy/common/net/bugzilla/attachment.py:
        (Attachment._validate_flag_value):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla._fetch_bug_page):
        (Bugzilla.bug_id_for_attachment_id):
        (Bugzilla.authenticate):
        (Bugzilla._commit_queue_flag):
        (Bugzilla.add_attachment_to_bug):
        (Bugzilla.add_patch_to_bug):
        (Bugzilla.create_bug):
        (Bugzilla.clear_attachment_flags):
        (Bugzilla.set_flag_on_attachment):
        (Bugzilla.obsolete_attachment):
        (Bugzilla.add_cc_to_bug):
        (Bugzilla.post_comment_to_bug):
        (Bugzilla.close_bug_as_fixed):
        (Bugzilla.reassign_bug):
        (reopen_bug):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        (MockBugzilla.create_bug):
        (MockBugzilla.reassign_bug):
        (MockBugzilla.set_flag_on_attachment):
        (MockBugzilla.post_comment_to_bug):
        (MockBugzilla.add_attachment_to_bug):
        (MockBugzilla.add_patch_to_bug):
        (MockBugzilla.reopen_bug):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        (test_add_cc_to_bug):
        (_assert_reopen):
        (test_reopen_bug):
        * Scripts/webkitpy/common/net/buildbot/buildbot_mock.py:
        (MockBuilder.force_build):
        * Scripts/webkitpy/common/net/credentials.py:
        (Credentials._run_security_tool):
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        (_assert_security_call):
        * Scripts/webkitpy/common/net/irc/irc_mock.py:
        (MockIRC.post):
        (MockIRC.disconnect):
        * Scripts/webkitpy/common/net/irc/ircproxy.py:
        (IRCProxy.__init__):
        (IRCProxy.disconnect):
        * Scripts/webkitpy/common/net/irc/ircproxy_unittest.py:
        (IRCProxyTest.test_trivial):
        * Scripts/webkitpy/common/net/layouttestresults.py:
        (ORWTResultsHTMLParser._failures_from_fail_row):
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        (test_failures_from_fail_row):
        * Scripts/webkitpy/common/net/networktransaction.py:
        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        (JSONTestResult._tokenize):
        (JSONTestResult._failure_types_from_actual_result):
        * Scripts/webkitpy/common/net/statusserver.py:
        (StatusServer.update_status):
        (StatusServer.update_svn_revision):
        * Scripts/webkitpy/common/net/statusserver_mock.py:
        (MockStatusServer.release_work_item):
        (MockStatusServer.update_work_items):
        (MockStatusServer.submit_to_ews):
        (MockStatusServer.update_status):
        * Scripts/webkitpy/common/net/unittestresults.py:
        (UnitTestResults.results_from_string):
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.running_pids):
        (MockExecutive.run_and_throw_if_fail):
        (MockExecutive.run_command):
        (MockExecutive.popen):
        * Scripts/webkitpy/common/system/user_mock.py:
        (MockUser.confirm):
        (MockUser.open_url):
        * Scripts/webkitpy/common/system/workspace_unittest.py:
        (WorkspaceTest.test_create_zip):
        (WorkspaceTest.test_create_zip_exception):
        * Scripts/webkitpy/common/watchlist/watchlist_mock.py:
        (MockWatchList.determine_cc_and_messages):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest.test_setup_environ_for_server_register_cygwin):
        * Scripts/webkitpy/layout_tests/port/efl_unittest.py:
        (EflPortTest.test_show_results_html_file):
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        (GtkPortTest.test_show_results_html_file):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_show_results_html_file):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (test_build_driver):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest.test_show_results_html_file):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest.test_show_results_html_file):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.assertDriverStartSuccessful):
        (XvfbDriverTest.test_start_no_pixel_tests):
        (XvfbDriverTest.test_start_pixel_tests):
        (XvfbDriverTest.test_start_arbitrary_worker_number):
        (XvfbDriverTest.test_start_next_worker):
        (XvfbDriverTest.test_stop):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server_unittest.py:
        (TestLayoutTestApacheHttpd.test_start_cmd):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_test_pause_before_testing):
        (test_run_memory_test):
        (_test_run_with_json_output):
        (test_run_respects_no_results):
        (test_run_generates_and_show_results_page):
        (test_run_respects_no_show_results):
        * Scripts/webkitpy/tool/bot/feeders_unittest.py:
        (FeedersTest.test_commit_queue_feeder):
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        (FlakyTestReporterTest.test_create_bug_for_flaky_test):
        (test_report_flaky_tests_creating_bug):
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_rollout_updates_working_copy):
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        (IRCBotTest.test_exception_during_command):
        (IRCBotTest.test_hi):
        (IRCBotTest.test_help):
        (IRCBotTest.test_restart):
        (IRCBotTest.test_rollout):
        (IRCBotTest.test_revert):
        (IRCBotTest.test_roll_chromium_deps):
        (IRCBotTest.test_roll_chromium_deps_to_lkgr):
        (IRCBotTest.test_multi_rollout):
        (IRCBotTest.test_rollout_with_r_in_svn_revision):
        (IRCBotTest.test_multi_rollout_with_r_in_svn_revision):
        (IRCBotTest.test_rollout_bananas):
        (IRCBotTest.test_rollout_invalidate_revision):
        (IRCBotTest.test_rollout_invalidate_reason):
        (test_multi_rollout_invalidate_reason):
        (test_rollout_no_reason):
        (test_multi_rollout_no_reason):
        * Scripts/webkitpy/tool/bot/sheriff_unittest.py:
        (SheriffTest.test_post_blame_comment_on_bug):
        * Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py:
        (ApplyWatchListLocalTest.test_args_parsing):
        (test_args_parsing_with_bug):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (test_land_cowboy):
        (test_check_style):
        (test_create_rollout):
        (test_create_rollout_resolved):
        (test_rollout):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (AbstractEarlyWarningSystemTest.test_failing_tests_message):
        (EarlyWarningSytemTest._default_expected_logs):
        (EarlyWarningSytemTest._test_builder_ews):
        (EarlyWarningSytemTest._test_testing_ews):
        * Scripts/webkitpy/tool/commands/openbugs_unittest.py:
        (OpenBugsTest.test_args_parsing):
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (QueryCommandsTest.test_bugs_to_commit):
        (QueryCommandsTest.test_patches_in_commit_queue):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (FeederQueueTest.test_feeder_queue):
        (AbstractPatchQueueTest.test_next_patch):
        (AbstractPatchQueueTest.test_upload_results_archive_for_patch):
        (CommitQueueTest.test_commit_queue):
        (test_commit_queue_failure):
        (test_commit_queue_failure_with_failing_tests):
        (test_rollout):
        (test_rollout_lands):
        (test_auto_retry):
        (test_manual_reject_during_processing):
        (test_report_flaky_tests):
        (StyleQueueTest.test_style_queue_with_style_exception):
        (test_style_queue_with_watch_list_exception):
        * Scripts/webkitpy/tool/commands/queuestest.py:
        (QueuesTest._default_begin_work_queue_logs):
        * Scripts/webkitpy/tool/commands/roll_unittest.py:
        (RollCommandsTest.test_update_chromium_deps):
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        (UploadCommandsTest.test_assign_to_committer):
        (test_post):
        (test_attach_to_bug):
        (test_attach_to_bug_no_description_or_comment):
        (test_land_safely):
        (test_prepare):
        (test_upload):
        (test_mark_bug_fixed):
        * Scripts/webkitpy/tool/steps/applywatchlist_unittest.py:
        (ApplyWatchListTest.test_apply_watch_list_local):
        * Scripts/webkitpy/tool/steps/commit_unittest.py:
        (CommitTest._test_check_test_expectations):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        (RunTestsTest.test_webkit_run_unit_tests):
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest._assert_step_output_with_bug):
        (StepsTest._assert_post_diff_output_for_bug):
        (StepsTest.test_post_diff):
        (StepsTest.test_post_diff_for_commit):
        (StepsTest.test_ensure_bug_is_open_and_assigned):
        (StepsTest.test_runtests_args):
        * Scripts/webkitpy/tool/steps/suggestreviewers_unittest.py:
        (SuggestReviewersTest.test_basic):
        * Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py:
        (ValidateChangeLogsTest._assert_start_line_produces_output):

2012-11-27  Pratik Solanki  <psolanki@apple.com>

        objc/objc-runtime.h does not exist on all PLATFORM(MAC)
        https://bugs.webkit.org/show_bug.cgi?id=101780

        Reviewed by Brent Fulgham.

        Clean up header includes so we don't include objc/objc-runtime.h.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/ObjCPlugin.m:
        * TestWebKitAPI/mac/InstanceMethodSwizzler.h:
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:

2012-11-27  Marja Hölttä  <marja@chromium.org>

        Add callbacks to the FrameLoaderClient when a resource is requested
        https://bugs.webkit.org/show_bug.cgi?id=92761

        Reviewed by Adam Barth.

        In Chromium, when an extension script cancels a network
        request (which happens out of process), we'd like to
        notify content scripts running on the current page about
        which elements failed to load because the requests were
        cancelled (as opposed to e.g. the network request just
        didn't work). Since the resource request itself does not
        carry any information what DOM element is was made for,
        currently a content script has to search the DOM tree and
        guess which requests will be cancelled by its counter
        part. By adding these callbacks, the embedder can make
        this connection explictly.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::dumpResourceRequestCallbacks):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        (DRTTestRunner::setShouldDumpResourceRequestCallbacks):
        (DRTTestRunner::shouldDumpResourceRequestCallbacks):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::shouldDumpResourceRequestCallbacks):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::willRequestResource):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-11-27  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GStreamer] Verify if GStreamer was previously initialized
        https://bugs.webkit.org/show_bug.cgi?id=103151

        Reviewed by Philippe Normand.

        This patch adds the gst_init() in GtkLauncher, so we can add the
        GStreamer options in the command line through
        gst_init_get_option_group().

        This approach is not valid for MiniBrowser because it uses WebKit2,
        where the GStreamer backend lives in the web process, which is
        different from the UI process.

        * GNUmakefile.am:
        * GtkLauncher/main.c:
        (main):

2012-11-27  Andras Becsi  <andras.becsi@digia.com>

        [Qt] Fix the build with new Qt5 hash
        https://bugs.webkit.org/show_bug.cgi?id=103406

        Reviewed by Csaba Osztrogonác.

        Remove references to deprecated QApplication::GuiServer which
        has been removed, and use QStyleFactory::create instead of
        instantiating a QWindowsStyle directly since it is about to
        become an internal class.

        * DumpRenderTree/qt/DumpRenderTreeMain.cpp:
        (main):
        * QtTestBrowser/qttestbrowser.cpp:
        (LauncherApplication::LauncherApplication):
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WTR::InjectedBundle::platformInitialize):

2012-11-27  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        [style] Add a style-check for enum-member names
        https://bugs.webkit.org/show_bug.cgi?id=103157

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_EnumState):
        (_EnumState.__init__):
        (_EnumState.process_clean_line):
        (check_enum_casing):
        (check_style):
        (process_line):
        (_process_lines):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (NoNonVirtualDestructorsTest.test_enum_casing):
        (NoNonVirtualDestructorsTest.test_internal_braces.Foo):

2012-11-26  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL][jhbuild] Disable unnecessary options of elementary module
        https://bugs.webkit.org/show_bug.cgi?id=103360

        Reviewed by Gyuyoung Kim.

        When jhbuild configures elementary, unnecessary options may be enabled by
        user installed modules and it causes build break.

        * efl/jhbuild.modules:
        Added --disable-emap --disable-ethumb --disable-eweather to elementary.

2012-11-26  Varun Jain  <varunjain@chromium.org>

        LongPress and LongTap gestures should start drag/drop and open context menu respectively.
        https://bugs.webkit.org/show_bug.cgi?id=101545

        Reviewed by Antonio Gomes.

        For LongPress, we simulate drag by sending a mouse down and mouse drag
        events. If a drag is not started (because maybe there is no draggable
        element), then we show context menu instead (which is the current
        behavior for LongPress). For LongTap, we use the existing functions that
        LongPress uses to summon the context menu. LongPress initiated drag and
        drop can be enabled/disabled by the platform using the Setting
        touchDragDropEnabled which is disabled by default.

        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::EventSender):
        (WebTestRunner::EventSender::gestureLongTap):
        (WebTestRunner::EventSender::gestureEvent):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.h:
        (EventSender):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::setTouchDragDropEnabled):
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (TestRunner):

2012-11-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add setting to enable / disable HTML5 local storage functionality
        https://bugs.webkit.org/show_bug.cgi?id=103224

        Reviewed by Laszlo Gombos.

        Add --local-storage command line argument to MiniBrowser to
        explicitely disable HTML5 local storage functionality. This
        is useful for testing purposes.

        * MiniBrowser/efl/main.c:
        (window_create):
        (elm_main):

2012-11-26  Zan Dobersek  <zandobersek@gmail.com>

        Remove use of deprecated logging from most of webkitpy.tool
        https://bugs.webkit.org/show_bug.cgi?id=103180

        Reviewed by Dirk Pranke.

        Remove calls to log and error methods of the deprecated_logging module, replacing them
        by using Python's Logger objects. This patch covers the switch in all of webkitpy.tool
        except the QueueEngine.

        Unit tests are adjusted for these changes, moving output from expected stderr to expected logs.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        (MockCommitQueue.run_command):
        (MockCommitQueue.command_passed):
        (MockCommitQueue.command_failed):
        (MockCommitQueue.report_flaky_tests):
        (MockCommitQueue.archive_last_test_results):
        (CommitQueueTaskTest._run_through_task):
        (CommitQueueTaskTest.test_success_case):
        (test_fast_success_case):
        (test_clean_failure):
        (test_update_failure):
        (test_apply_failure):
        (test_validate_changelog_failure):
        (test_build_failure):
        (test_red_build_failure):
        (test_flaky_test_failure):
        (test_failed_archive):
        (test_double_flaky_test_failure):
        (test_test_failure):
        (test_red_test_failure):
        (test_very_red_tree_retry):
        (test_red_tree_patch_rejection):
        (test_land_failure):
        * Scripts/webkitpy/tool/bot/feeders.py:
        (CommitQueueFeeder._update_work_items):
        (EWSFeeder.feed):
        * Scripts/webkitpy/tool/bot/feeders_unittest.py:
        * Scripts/webkitpy/tool/bot/layouttestresultsreader.py:
        (LayoutTestResultsReader.archive):
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        (test_archive_last_layout_test_results):
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/commands/abstractsequencedcommand.py:
        (AbstractSequencedCommand.execute):
        * Scripts/webkitpy/tool/commands/commandtest.py:
        (CommandsTest.assert_execute_outputs):
        * Scripts/webkitpy/tool/commands/download.py:
        (AbstractPatchProcessingCommand._process_patch.execute):
        (ProcessBugsMixin._fetch_list_of_patches_to_process):
        (ProcessURLsMixin._fetch_list_of_patches_to_process):
        (AbstractRolloutPrepCommand._commit_info):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (AbstractRolloutPrepCommandTest.test_commit_info):
        (DownloadCommandsTest.test_build):
        (DownloadCommandsTest.test_build_and_test):
        (test_apply_attachment):
        (test_apply_from_bug):
        (test_apply_watch_list):
        (test_land):
        (test_land_red_builders):
        (test_check_style):
        (test_build_attachment):
        (test_land_attachment):
        (test_land_from_bug):
        (test_land_from_url):
        (test_prepare_rollout):
        (test_create_rollout):
        (test_create_rollout_resolved):
        (test_rollout):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.handle_script_error.does):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSytemTest._default_expected_stderr):
        (EarlyWarningSytemTest._default_expected_logs):
        (EarlyWarningSytemTest._test_testing_ews):
        * Scripts/webkitpy/tool/commands/openbugs.py:
        (OpenBugs.execute):
        * Scripts/webkitpy/tool/commands/openbugs_unittest.py:
        (OpenBugsTest.test_args_parsing):
        * Scripts/webkitpy/tool/commands/perfalizer.py:
        (Perfalizer.handle_unexpected_error):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PatchesInCommitQueue.execute):
        (PatchesToCommitQueue._needs_commit_queue):
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (QueryCommandsTest.test_bugs_to_commit):
        (QueryCommandsTest.test_patches_in_commit_queue):
        (QueryCommandsTest.test_patches_to_commit_queue):
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractQueue._cc_watchers):
        (AbstractQueue.begin_work_queue):
        (FeederQueue.handle_unexpected_error):
        (CommitQueue.handle_script_error):
        (AbstractReviewQueue.handle_unexpected_error):
        (AbstractReviewQueue.handle_script_error):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (test_auto_retry):
        * Scripts/webkitpy/tool/commands/queuestest.py:
        (QueuesTest.assert_outputs):
        (QueuesTest._default_begin_work_queue_stderr):
        (QueuesTest):
        (QueuesTest._default_begin_work_queue_logs):
        (QueuesTest.assert_queue_outputs):
        * Scripts/webkitpy/tool/commands/roll_unittest.py:
        (RollCommandsTest.test_update_chromium_deps):
        (test_update_chromium_deps_older_revision):
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        (SheriffBot.handle_unexpected_error):
        * Scripts/webkitpy/tool/commands/stepsequence.py:
        (StepSequence.run_and_handle_errors):
        * Scripts/webkitpy/tool/commands/upload.py:
        (AssignToCommitter._assign_bug_to_last_patch_attacher):
        (AbstractPatchUploadingCommand._prepare_state):
        (PostCommits.execute):
        (MarkBugFixed._determine_bug_id_and_svn_revision):
        (MarkBugFixed.execute):
        (CreateBug.create_bug_from_commit):
        (CreateBug.execute):
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        (test_obsolete_attachments):
        (test_land_safely):
        (test_mark_bug_fixed):
        * Scripts/webkitpy/tool/multicommandtool.py:
        (Command.check_arguments_and_execute):
        (MultiCommandTool.main):
        * Scripts/webkitpy/tool/multicommandtool_unittest.py:
        (CommandTest.test_required_arguments):
        * Scripts/webkitpy/tool/steps/addsvnmimetypeforpng.py:
        (AddSvnMimetypeForPng.run):
        * Scripts/webkitpy/tool/steps/applypatch.py:
        (ApplyPatch.run):
        * Scripts/webkitpy/tool/steps/build.py:
        (Build.run):
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        * Scripts/webkitpy/tool/steps/closebug.py:
        (CloseBug.run):
        * Scripts/webkitpy/tool/steps/closebugforlanddiff.py:
        (CloseBugForLandDiff.run):
        * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
        (CloseBugForLandDiffTest.test_empty_state):
        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit.run):
        * Scripts/webkitpy/tool/steps/commit_unittest.py:
        (CommitTest._test_check_test_expectations):
        * Scripts/webkitpy/tool/steps/ensurelocalcommitifneeded.py:
        (EnsureLocalCommitIfNeeded.run):
        * Scripts/webkitpy/tool/steps/obsoletepatches.py:
        (ObsoletePatches.run):
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        (PrepareChangeLog.run):
        * Scripts/webkitpy/tool/steps/reopenbugafterrollout.py:
        (ReopenBugAfterRollout.run):
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        (RunTestsTest.test_webkit_run_unit_tests):
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest.test_update_step):
        (StepsTest.test_runtests_args):
        * Scripts/webkitpy/tool/steps/update.py:
        (Update.run):
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py:
        (UpdateChangeLogsWithReviewerTest.test_guess_reviewer_from_bug):
        (UpdateChangeLogsWithReviewerTest.test_guess_reviewer_from_multipatch_bug):
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:
        (UpdateChangeLogsWithReviewer._guess_reviewer_from_bug):
        (UpdateChangeLogsWithReviewer.run):
        * Scripts/webkitpy/tool/steps/updatechromiumdeps.py:
        (UpdateChromiumDEPS._validate_revisions):
        (UpdateChromiumDEPS.run):
        * Scripts/webkitpy/tool/steps/validatechangelogs.py:
        (ValidateChangeLogs._check_changelog_diff):
        (ValidateChangeLogs.run):
        * Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py:
        (ValidateChangeLogsTest._assert_start_line_produces_output):
        * Scripts/webkitpy/tool/steps/validatereviewer.py:
        (ValidateReviewer.run):

2012-11-26  Zan Dobersek  <zandobersek@gmail.com>

        Coverage testing in webkitpy should omit some paths
        https://bugs.webkit.org/show_bug.cgi?id=103267

        Reviewed by Dirk Pranke.

        Omit testing coverage of any file under /usr directory and any file
        that is of third party origin and was autoinstalled.

        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests):

2012-11-26  Jaehun Lim  <ljaehun.lim@samsung.com>

        Text Autosizing: Add Text Autosizing APIs for WK2
        https://bugs.webkit.org/show_bug.cgi?id=100633

        Reviewed by Sam Weinig.

        Add test cases for Text Autosizing in WKPreferences.

        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST):

2012-11-26  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] REGRESSION(r135575): It made all tests assert
        https://bugs.webkit.org/show_bug.cgi?id=103169

        Reviewed by Simon Hausmann.

        This fixes another regression introduced in r135515:
        initializeWebKitQt shouldn't implicitely call initializeWebCoreQt
        since it can be called from WebKit2 to initialize QStyle for testing.
        This would then lead to things such as PlatformStrategies being
        initialized twice.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp: Also propagate the change to DRT this time.
        (WebCore::DumpRenderTree::DumpRenderTree):

2012-11-24  Zan Dobersek  <zandobersek@gmail.com>

        Add the --order option to NRWT
        https://bugs.webkit.org/show_bug.cgi?id=102229

        Reviewed by Dirk Pranke.

        The --order option controls in what order the gathered tests will be run.
        There are 3 options:
        - natural, the tests are sorted in natural order,
        - random, the tests are sorted in random order,
        - none, the tests are kept in the order in which they were specified through
        arguments or the test list.

        The natural option is the default one and maintains the current behavior.

        The none option is primarily intended to be used with the --test-list option,
        with the test list file expected to list specific test names.
        When a directory is specified as one of the paths from under which tests should
        be gathered and the none option is used, that path will expand to all the tests
        under it, with these tests sorted in the natural order.

        Using --order=random duplicated the behavior of the --randomize-order option, so
        the latter is removed.

        This patch also incorporates the change with which makes it is possible to specify
        a test via arguments or the test list multiple tests and then have the test run
        that many times.

        * Scripts/webkitpy/common/find_files.py:
        (find): Accept an optional sorting key that is used to sort files found in the directories
        that the given paths specify.
        (_normalized_find): Both paths that are then searched for the tests and the tests that
        were found are now kept in lists. This makes it possible to run a test multiple times
        by specifying it multiple times through arguments or the test list file.
        (_normalized_find.sort_by_directory_key):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder.find_tests): Keep the paths where we should search for tests in a list.
        (LayoutTestFinder.skip_tests): Subtracting from a set of paths is necessary.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.__init__): The Sharder class no longer needs a test path separator.
        (Sharder.__init__): Ditto.
        (Sharder._resize_shards):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (SharderTests.get_shards): Modify the Shader initializing as required.
        (SharderTests.test_multiple_locked_shards): The natural sorting and test name key unit tests
        are now moved to the base Port unit tests.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._prepare_lists): Keep the test names in a list. Order that list as specified by
        the new --order option.
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.tests): This method should now return a list of all the tests found in the specified
        paths.
        (Port._real_tests): A list is required, so no conversion to a set is made.
        (Port):
        (Port.test_key): Place this method here for now, but it should really move into a separate
        module.
        (Port._natural_sort_key): Ditto.
        (Port._natural_sort_key.tryint):
        (Port._virtual_tests): A list is required, so the function now operates on that rather than
        on a set.
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_find_with_skipped_directories_2): Adjust the test case to check for an empty
        list rather than an empty set.
        (PortTest.test_dont_require_http_server):
        (NaturalCompareTest): The natural sorting unit tests are placed here for now.
        (NaturalCompareTest.assert_cmp):
        (NaturalCompareTest.test_natural_compare):
        (KeyCompareTest): The test name key unit tests are placed here for now.
        (KeyCompareTest.assert_cmp):
        (KeyCompareTest.test_test_key):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Remove the --randomize-order option, it's now possible to replicate its behavior
        by using --order=random.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py: Add unit tests covering
        various aspects of this change.
        (MainTest.test_natural_order):
        (MainTest):
        (MainTest.test_natural_order_test_specified_multiple_times):
        (MainTest.test_random_order):
        (MainTest.test_random_order_test_specified_multiple_times):
        (MainTest.test_no_order):
        (MainTest.test_no_order_test_specified_multiple_times):
        (MainTest.test_no_order_with_directory_entries_in_natural_order):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintExpectations.execute): Operate on a set of tests when printing out expectations.

2012-11-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135600.
        http://trac.webkit.org/changeset/135600
        https://bugs.webkit.org/show_bug.cgi?id=103173

        It made EFL API test is failed (Requested by gyuyoung_mbp on
        #webkit).

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/efl/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::sleep):
        * TestWebKitAPI/efl/PlatformWebView.cpp:

2012-11-23  Alexis Menard  <alexis@webkit.org>

        [CSS3 Backgrounds and Borders] Implement new CSS3 background-position parsing.
        https://bugs.webkit.org/show_bug.cgi?id=102104

        Reviewed by Julien Chaffraix.

        Protect the new feature behind a feature flag.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2012-11-23  Mario Sanchez Prada  <mario@webkit.org>

        Unreviewed. Update my e-mail address.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-23  Mateusz Leszko  <m.leszko@samsung.com>

        [EFL][GTK] Adapt accessibility feature to WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=100757

        Reviewed by Laszlo Gombos.

        Allow to build accessibility feature in WebkitTestRunner for EFL Platform.
        Updating CMake files due to changes from Bug 99011.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::AccessibilityController):
        (WTR):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        (AccessibilityController):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp: - Removed gtk/gtk.h dependency.
        * WebKitTestRunner/PlatformEfl.cmake: - Adding atk includes.

2012-11-16  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: extract MemoryObjectInfo declaration into a separate file
        https://bugs.webkit.org/show_bug.cgi?id=102510

        Reviewed by Pavel Feldman.

        Added missing includes.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:

2012-11-23  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] Add support for PlatformWebView::simulateSpacebarKeyPress() in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=103123

        Reviewed by Kenneth Rohde Christiansen.

        Add support for PlatformWebView::simulateSpacebarKeyPress() and enable
        WebKit2 API test ResponsivenessTimerDoesntFireEarly.

        * TestWebKitAPI/PlatformEfl.cmake: Enable ResponsivenessTimerDoesntFireEarly
        test.
        * TestWebKitAPI/efl/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::sleep): Use usleep() instead of sleep since the
        test case is passing 0.5 seconds to sleep.
        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress): Implemented.
        (TestWebKitAPI):

2012-11-23  Wojciech Bielawski  <w.bielawski@samsung.com>

        [WK2][WKTR] WebKitTestRunner needs eventSender.contextClick()
        https://bugs.webkit.org/show_bug.cgi?id=86881

        Reviewed by Kenneth Rohde Christiansen.

        eventSender object extended with contextClick() method in WebKitTestRunner.
        contextClick() method returns an array of menu items objects with field 'title' containing title of single
        context menu entry. According to some tests menu items objects shall also support 'click()' method, but it's not
        delivered in this patch.

        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::contextClick):
        (WTR):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        (EventSendingController):

2012-11-23  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Compiling against QtWebkit API requires QT_DLL to be defined
        https://bugs.webkit.org/show_bug.cgi?id=102942

        Reviewed by Tor Arne Vestbø.

        Remove the requirement of having QT_DLL defined in order for the QWEBKIT_EXPORT
        macro to be defined as Q_DECL_IMPORT. Instead unify the export macro definition
        to follow the same rules as other Qt 5 modules, with the exception that instead of
        QT_BUILD_WEBKIT_LIB we continue to use BUILDING_WEBKIT, because that's used also
        in other cross-platform header files to determine the correct meaning of export
        macros.

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/win32/default_post.prf:

2012-11-23  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] QWebPage::shouldInterruptJavaScript should be virtual in Qt 5
        https://bugs.webkit.org/show_bug.cgi?id=103111

        Reviewed by Kenneth Rohde Christiansen.

        This function was added as a slot during Qt 4.x times because adding
        virtual functions breaks binary compatibility. This constraint is gone
        with the initial release of WebKit with Qt 5, and therefore we can
        make it virtual now.

        The change is fully source compatible as existing "re-implementations"
        as slots will now be called through it being a virtual function. They
        become unused slots.

        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (WebCore::WebPage::shouldInterruptJavaScript):
        (WebPage):
        * QtTestBrowser/webpage.h:
        (WebPage):

2012-11-22  Peter Beverloo  <peter@chromium.org>

        [Chromium] Return an accurate exit code when running Android suites, and wait after restarting adb as root
        https://bugs.webkit.org/show_bug.cgi?id=103065

        Reviewed by Dirk Pranke.

        This addresses two further reliability issues in the Android test running
        scripts. Firstly, the run_tests.py script needs to have the --exit_code
        argument passed in order to return non-zero codes, which we need for the
        build master to distinguish failures from successful runs.

        Secondly, it modifies the layout test runner to briefly wait (through
        the wait-for-device command) after requesting a device to switch to root
        mode. Without this waiting period, commands might get lost and thereby
        unexpectedly fail.

        * Scripts/run-api-tests:
        * Scripts/run-chromium-webkit-unit-tests:
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver._setup_test):
        (ChromiumAndroidDriver._restart_adb_as_root):

2012-11-22  Simon Hausmann  <simon.hausmann@digia.com>, Pierre Rossi <pierre.rossi@digia.com>

        [Qt] Separate QWidget dependant code into separate WebKitWidgets static library
        https://bugs.webkit.org/show_bug.cgi?id=102800

        Reviewed by Tor Arne Vestbø.

        This patch separates code that needs to use QWidget related APIs in
        WebKit/qt/WebCoreSupport and Api from code that doesn't. This means for
        example FrameLoaderClientQt.cpp remains in the WebKit1 static library,
        while qwebpage.cpp and qwebframe.cpp become part of the WebKitWidgets
        static library. WebKit1 is compiled without QT += widgets and therefore
        any widget related dependency has been moved "up" and out of WebKit1 into
        the WebKitWidgets library.

        Between the code in WebKit.a and WebKitWidgets.a new adapters and
        interfaces have been introduced, such as QWebPageAdapter and
        QWebFrameAdapter. QWebPageAdapter, when used from WebKit1, is a way to
        call out into the API layer, implemented by QWebPage (QWebPagePrivate).
        The other way around if QWebPage wants to access WebCore or
        WebCoreSupport related functionality, it will go through
        QWebPageAdapater (as base class). The separation in the direction up
        into the API layer is complete with this patch, no code in WebKit1
        depends on QtWidgets. The separation the other way around, code in the
        API layer not using any WebCore types, is not complete yet.

        Some classes such as QWebSettings, QWebElement or
        DumpRenderTreeSupportQt remain in WebKit1. While they are API layer,
        they do not depend on widget related Qt APIs and they make much more
        use of WebCore internal APIs and therefore are easier to keep in
        WebKit1.

        In the future we plan to place a real shared library boundary between
        WebKit1 and WebKitWidgets, by keeping the WebKit1 static library as
        part of the QtWebKit shared library and by turning the WebKitWidgets
        static library into a shared one.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        (WebCore::WebPage::createWindow):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::dumpFrameScrollPosition):
        (WebCore::DumpRenderTree::dumpFramesAsText):
        (WebCore::DumpRenderTree::dump):
        (WebCore::DumpRenderTree::createWindow):
        (WebCore::DumpRenderTree::pageAdapter):
        (WebCore):
        (WebCore::DumpRenderTree::mainFrameAdapter):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (DumpRenderTree):
        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::contextClick):
        (EventSender::scalePageBy):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::reset):
        (TestRunner::display):
        (TestRunner::closeWebInspector):
        (TestRunner::showWebInspector):
        (TestRunner::evaluateInWebInspector):
        (TestRunner::setFrameFlatteningEnabled):
        (TestRunner::goBack):
        (TestRunner::setDefersLoading):
        (TestRunner::pauseAnimationAtTimeOnElementWithId):
        (TestRunner::pauseTransitionAtTimeOnElementWithId):
        (TestRunner::numberOfActiveAnimations):
        (TestRunner::setCaretBrowsingEnabled):
        (TestRunner::setAuthorAndUserStylesEnabled):
        (TestRunner::callShouldCloseOnWebView):
        (TestRunner::setSmartInsertDeleteEnabled):
        (TestRunner::setSelectTrailingWhitespaceEnabled):
        (TestRunner::execCommand):
        (TestRunner::isCommandEnabled):
        (TestRunner::findString):
        (TestRunner::elementDoesAutoCompleteForElementWithId):
        (TestRunner::setMockDeviceOrientation):
        (TestRunner::setGeolocationPermission):
        (TestRunner::numberOfPendingGeolocationPermissionRequests):
        (TestRunner::setMockGeolocationPositionUnavailableError):
        (TestRunner::setMockGeolocationPosition):
        (TestRunner::evaluateScriptInIsolatedWorld):
        (TestRunner::addUserStyleSheet):
        (TestRunner::setMinimumTimerInterval):
        * DumpRenderTree/qt/TextInputControllerQt.cpp:
        (TextInputController::selectedRange):
        (TextInputController::firstRectForCharacterRange):
        (TextInputController::unmarkText):
        * DumpRenderTree/qt/WorkQueueItemQt.cpp:
        (LoadAlternateHTMLStringItem::invoke):
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/production_build.prf:
        * qmake/mkspecs/features/webkit_modules.prf:
        * qmake/mkspecs/modules/webkitwidgets.prf: Added.

2012-11-22  Christophe Dumez  <christophe.dumez@intel.com>

        WebKitTestRunner needs layoutTestController.setCacheModel
        https://bugs.webkit.org/show_bug.cgi?id=42684

        Reviewed by Kenneth Rohde Christiansen.

        Add support for testRunner.setCacheModel to WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setCacheModel):
        (WTR):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2012-11-22  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WTR] TestController::platformRunUntil should not do busy waiting
        https://bugs.webkit.org/show_bug.cgi?id=101327

        Reviewed by Simon Hausmann.

        Avoid busy waiting for events in platformRunUntil while making
        sure we don't change the behavior of modal event loops.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::~TestController):
        * WebKitTestRunner/TestController.h:
        (TestController):
        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::TestController::platformDestroy):
        (WTR):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformDestroy):
        (WTR):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformDestroy):
        (WTR):
        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (TestController::RunLoop): Helper class to handle
        the event loop logic
        (WTR):
        (WTR::TestController::RunLoop::RunLoop):
        (WTR::TestController::RunLoop::runUntil): Use QEventLoop to implement
        the run loop. This is the appropriate API to push the WaitForMoreEvents
        flag to QCoreApplication::processEvents and also being able to exit the
        loop if we have timed out.
        (WTR::TestController::RunLoop::notifyDone):
        (WTR::TestController::RunLoop::timerFired):
        (WTR::TestController::RunLoop::runModal):
        (WTR::TestController::notifyDone):
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformDestroy):
        (WTR::TestController::platformRunUntil):
        (WTR::TestController::runModal):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformDestroy):
        (WTR):

2012-11-22  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] Enable WKPreferences and AboutBlankLoad API tests
        https://bugs.webkit.org/show_bug.cgi?id=102926

        Reviewed by Kenneth Rohde Christiansen.

        Add missing bits needed by WKPreferences and AboutBlankLoad API
        tests in the test harness and enable these tests on EFL port.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/efl/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::MIMETypeForWKURLResponse):
        (Util):

2012-11-21  Zan Dobersek  <zandobersek@gmail.com>

        [GTK][WTR] Implement AccessibilityUIElement::stringValue
        https://bugs.webkit.org/show_bug.cgi?id=102951

        Reviewed by Martin Robinson.

        Implement AccessibilityUIElement::stringValue in the ATK backend
        in the same manner it is implemented in DumpRenderTree.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::replaceCharactersForResults):
        (WTR):
        (WTR::AccessibilityUIElement::stringValue):

2012-11-21  Vineet Chaudhary  <rgf748@motorola.com>

        Unreviewed. Adding myself to committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-21  Tien-Ren Chen  <trchen@chromium.org>

        [chromium] Device scale factor should be no-op when applyDeviceScaleFactorInCompositor == 0
        https://bugs.webkit.org/show_bug.cgi?id=100061

        Reviewed by Adam Barth.

        On Android we're using a different pixel scaling implementation
        (WebCore::Settings::applyDefaultDeviceScaleFactorInCompositor() == 0) than other
        platforms. In this mode, we don't make use of device-independent pixels. Device
        scale factor is provided to WebKit and get merged into page scale factor. Other
        than that device scale factor should have no effects on rendering.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):

2012-11-21  Fady Samuel  <fsamuel@chromium.org>

        Clear MousePressed state on context menu to avoid initiating a drag
        https://bugs.webkit.org/show_bug.cgi?id=101786

        Reviewed by Ojan Vafai.

        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::EventSender):
        (WebTestRunner::EventSender::contextClick):
        Only send a MouseUp on Windows. Keep the current mouse pressed state when
        calling up a context menu.

2012-11-21  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] KURL unit test crashing when tiled backing store is enabled on Release Bots
        https://bugs.webkit.org/show_bug.cgi?id=102895

        Reviewed by Gyuyoung Kim.

        Change the link order so it wont override the new operator on gtest.
        Looks like it was crashing because an allocator mismatch (using libc's
        new and later fastMalloc delete. Thanks to Kangil Han for hinting on
        the fastMalloc issue.

        * TestWebKitAPI/CMakeLists.txt:

2012-11-21  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r135340.
        http://trac.webkit.org/changeset/135340
        https://bugs.webkit.org/show_bug.cgi?id=102492

        It broke Safari's internal build

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (new):
        (GenerateModule):
        (GenerateInterface):
        (finish):

2012-11-21  Yael Aharon  <yael.aharon@intel.com>, Gyuyoung Kim <gyuyoung.kim@samsung.com>

        [EFL] Turn on WTF_USE_TILED_BACKING_STORE by default
        https://bugs.webkit.org/show_bug.cgi?id=101526

        Reviewed by Kenneth Rohde Christiansen.

        Turn on WTF_USE_TILED_BACKING_STORE for EFL port.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/CMakeLists.txt: No include KURL.cpp because of API test crash.

2012-11-21  Jongseok Yang  <js45.yang@samsung.com>

        [EFL][WK2] Rename ewk_view_setting_encoding_custom_XXX to ewk_view_custom_encoding_XXX
        https://bugs.webkit.org/show_bug.cgi?id=102867

        Reviewed by Gyuyoung Kim.

        Rename ewk_view_setting_encoding_custom_XXX to ewk_view_custom_encoding_XXX.

        ewk_view_setting_encoding_custom_XXX APIs might be misunderstanded as the "setting" word
        because ewk_view_setting_encoding_custom_set triggers the "reload" operation.
        And ewk_view_setting_XXX is not correct because there is ewk_settings object for settings.

        * MiniBrowser/efl/main.c:
        (on_key_down):

2012-11-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133859.
        http://trac.webkit.org/changeset/133859
        https://bugs.webkit.org/show_bug.cgi?id=102875

        This patch makes API test broken (Requested by gyuyoung on
        #webkit).

        * Scripts/webkitperl/FeatureList.pm:

2012-11-20  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Add Ewk_Window_Features API and related UI callbacks
        https://bugs.webkit.org/show_bug.cgi?id=99114

        Reviewed by Gyuyoung Kim.

        Implemented window_create and window_close smartcallback functions.

        * MiniBrowser/efl/main.c:
        (on_window_create):
        (on_window_close):
        (window_create):

2012-11-20  Ojan Vafai  <ojan@chromium.org>

        Simplify builder filters now that we have lists of which builders run which tests
        https://bugs.webkit.org/show_bug.cgi?id=102849

        Reviewed by Dirk Pranke.

        We only need filters when we load the same master for multiple groups in the
        same test type, i.e. when we need to only include some of the builders that run
        a given test suite on a given master.

        Also, get rid of the DEFAULT_BUILDER enum. We were always using the first builder anyways.
        Now just make it a method on BuilderGroup.

        * TestResultServer/static-dashboards/builders.js:
        (BuilderGroup.prototype.append):
        (BuilderGroup.prototype.setup):
        (BuilderGroup.prototype._defaultBuilder):
        (BuilderGroup.prototype.master):
        (requestBuilderList):
        (isChromiumWebkitTipOfTreeTestRunner):
        (isChromiumWebkitDepsTestRunner):
        (loadBuildersList):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (test):

2012-11-20  Ojan Vafai  <ojan@chromium.org>

        Remove perfav master for webkit_unit_tests and test_shell_tests.
        There are no bots on this master that run these tests.
        * TestResultServer/static-dashboards/builders.js:

2012-11-20  Ojan Vafai  <ojan@chromium.org>

        Remove special case for layout tests when builders fail to load
        https://bugs.webkit.org/show_bug.cgi?id=102842

        Reviewed by Tony Chang.

        Now that we load only builders that actually run the given test
        type, we can reliably show errors to the users because it
        represents a broken bot.
        * TestResultServer/static-dashboards/loader.js:

2012-11-15  Ojan Vafai  <ojan@chromium.org>

        Generate a list of builders/test suites from the buildbot json
        https://bugs.webkit.org/show_bug.cgi?id=102443

        Reviewed by Dirk Pranke.

        Instead of the cludgy things we do now to track which bots run which tests,
        we generate all that data from the buildbots' json files.
        This is the minimal amount to keep everything working. Once this lands,
        we can also do a bunch of followup cleanup.

        For now we commit the generated data. In theory, in the future, we could
        have the test results server generate the data on the fly.

        For the sake of easily understanding what changes when we run the generate script,
        also checkin a pretty printed version of the output. The pretty printed version
        is too large to serve as part of the flakiness dashboard though.

        This also has the benefit of making the dashboard load much faster since
        we no longer ever need to block on requests to buildbot.

        * TestResultServer/generate_builders_json.py: Added.
        (master_json_url):
        (builder_json_url):
        (cached_build_json_url):
        (fetch_json):
        (insert_builder_and_test_data):
        (main):
        * TestResultServer/generate_builders_json_unittest.py: Added.
        (GenerateBuildersJsonTest):
        (GenerateBuildersJsonTest.test_master_json_url):
        (GenerateBuildersJsonTest.test_builder_json_url):
        (GenerateBuildersJsonTest.test_cached_build_json_url):
        (GenerateBuildersJsonTest.test_generate_json_data):
        (GenerateBuildersJsonTest.test_generate_json_data.dummy_fetch_json):
        * TestResultServer/static-dashboards/builders-pretty.jsonp: Added.
        * TestResultServer/static-dashboards/builders.js:
        (LOAD_BUILDBOT_DATA):
        (BuilderGroup):
        (BuilderGroup.prototype.append):
        (BuilderGroup.prototype.master):
        (requestBuilderList):
        * TestResultServer/static-dashboards/builders.jsonp: Added.
        * TestResultServer/static-dashboards/builders_unittests.js: Added.
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (showPopupForBuild):
        (htmlForTestResults):
        (htmlForIndividualTestOnAllBuildersWithResultsLinks):
        (loadExpectationsLayoutTests):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (resetGlobals):
        (test):
        * TestResultServer/static-dashboards/loader.js:
        * TestResultServer/static-dashboards/loader_unittests.js:
        * TestResultServer/static-dashboards/run-embedded-unittests.html:
        * TestResultServer/static-dashboards/run-unittests.html:
        * TestResultServer/static-dashboards/timeline_explorer.html:

2012-11-20  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [WTR][Qt] Enable fixedLayout when needed by the test
        https://bugs.webkit.org/show_bug.cgi?id=102811

        Reviewed by Kenneth Rohde Christiansen.

        Create a flickable view for CSS Device Adaptation tests. This is
        crucial for testing them since they will change the size of the
        viewport.

        * WebKitTestRunner/PlatformWebView.h:
        (PlatformWebView):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::viewSupportsOptions):
        (WTR):
        * WebKitTestRunner/qt/main.cpp:
        (main):

2012-11-20  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [WTR] WebKitTestRunner should be able to run tests using fixed layout
        https://bugs.webkit.org/show_bug.cgi?id=102517

        Reviewed by Kenneth Rohde Christiansen.

        WTR will now request the creation of a view that has a page using
        fixed layout for CSS Device Adaptation tests, but this feature might
        be used in the future by any other test that requires a mobile-like type
        of viewport (i.e. Viewport META tests should be ported).

        The viewport type of the other tests remains unchanged and is restored
        when the runner leaves the device-adapt/ folder.

        * WebKitTestRunner/PlatformWebView.h:
        (PlatformWebView):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR):
        (WTR::shouldUseFixedLayout):
        (WTR::updateLayoutType):
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::viewSupportsOptions):
        (WTR):

2012-11-20  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] REGRESSION(r128174): Fast build path doesn't work now
        https://bugs.webkit.org/show_bug.cgi?id=100360

        Reviewed by Tor Arne Vestbø.

        Use a separated .builtRevisions.cache file instead of .qmake.cache to cache built SVN revisions.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-11-20  Mateusz Leszko  <m.leszko@samsung.com>

        [EFL][GTK]Sharing accessibility support in WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=99011

        Reviewed by Martin Robinson.

        Accessibility files from gtk folder are moved to atk folder due to common implementation. Event Type naming changed to default, from Gtk to ATK.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp: Renamed from Tools/WebKitTestRunner/InjectedBundle/gtk/AccessibilityControllerGtk.cpp.
        (WTR::AccessibilityController::logAccessibilityEvents):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp: Renamed from Tools/WebKitTestRunner/InjectedBundle/gtk/AccessibilityUIElementGtk.cpp.

2012-11-20  Zan Dobersek  <zandobersek@gmail.com>

        webkitpy unit tests should run serially when checking code coverage
        https://bugs.webkit.org/show_bug.cgi?id=102693

        Reviewed by Dirk Pranke.

        When checking code coverage, the unit tests should not be run in parallel
        as this causes the tracing functions (set via sys.settrace in the coverage
        module) being overriden, resulting in incorrect coverage reports.

        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests):

2012-11-19  Viatcheslav Ostapenko  <v.ostapenko@samsung.com>

        [EFL] Add fallback for WebkitTestRunner if opengl is not available.
        https://bugs.webkit.org/show_bug.cgi?id=102704

        Reviewed by Laszlo Gombos.

        Add fallback to non-opengl evas engine in WebkitTestRunner if opengl is not available.

        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::initEcoreEvas):

2012-11-19  Dimitri Glazkov  <dglazkov@chromium.org>

        [garden-o-matic] Switch frontend to use the gardeningserver.
        https://bugs.webkit.org/show_bug.cgi?id=102712

        Reviewed by Dirk Pranke.

        Instead of serving garden-o-matic frontend as file, we now serve it from the gardening server. This enables
        using garden-o-matic in a Chrome OS device, with a separate machine as a headless server.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html: Changed CSP policy to use 'self'.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js: Removed now-unnecessary references to kLocalServerURL.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout_unittests.js: Tweaked the test expectation.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js: Removed kLocalServerURL.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js: Spuriously updated the name of the webkit-patch command.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js: Removed kLocalServerURL.
        * Scripts/webkitpy/tool/servers/gardeningserver.py: Changed to use the new launch URL.

2012-11-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135172.
        http://trac.webkit.org/changeset/135172
        https://bugs.webkit.org/show_bug.cgi?id=102710

        Broke some WebKit2 api tests :( (Requested by japhet on
        #webkit).

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::updateForCommittedLoad):

2012-11-19  Dimitri Glazkov  <dglazkov@chromium.org>

        [garden-o-matic] Enable serving garden-o-matic with gardeningserver.
        https://bugs.webkit.org/show_bug.cgi?id=102703

        Reviewed by Ojan Vafai.

        To enable gardening from a Chrome OS device, we need the ability to serve garden-o-matic
        from the same origin as the gardening server. This change gently massages the current
        logic to adapt an extension-sniffing-based approach of identifying static files,
        rather than requiring an explicit list.

        * Scripts/webkitpy/tool/servers/reflectionhandler.py:
        (ReflectionHandler): Replaced STATIC_FILE_NAMES with STATIC_FILE_EXTENSIONS.
        (ReflectionHandler._handle_request): Changed the logic to smell for extensions, rather than specific files.
        * Scripts/webkitpy/tool/servers/reflectionhandler_unittest.py: Added.

2012-11-19  Ojan Vafai  <ojan@chromium.org>

        Add DOM and HTML watchlists and add myself to a bunch of lists
        https://bugs.webkit.org/show_bug.cgi?id=102707

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/config/watchlist:

2012-11-19  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move methods that only use the WebKit API from DRTTestRunner to TestRunner
        https://bugs.webkit.org/show_bug.cgi?id=102676

        Reviewed by Tony Chang.

        In addition, I've replaced parsePageNumber with the more commonly used
        cppVariantToInt32, moved abortModal to the list of stubbed out methods,
        and removed setAutomaticLinkDetectionEnabled which wasn't used
        anywhere.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::reset):
        (DRTTestRunner::overridePreference):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner::TestRunner::reset):
        (WebTestRunner):
        (WebTestRunner::TestRunner::setTabKeyCyclesThroughElements):
        (WebTestRunner::TestRunner::setAsynchronousSpellCheckingEnabled):
        (WebTestRunner::TestRunner::execCommand):
        (WebTestRunner::TestRunner::isCommandEnabled):
        (WebTestRunner::TestRunner::pauseAnimationAtTimeOnElementWithId):
        (WebTestRunner::TestRunner::pauseTransitionAtTimeOnElementWithId):
        (WebTestRunner::TestRunner::elementDoesAutoCompleteForElementWithId):
        (WebTestRunner::TestRunner::numberOfActiveAnimations):
        (WebTestRunner::TestRunner::callShouldCloseOnWebView):
        (WebTestRunner::TestRunner::setDomainRelaxationForbiddenForURLScheme):
        (WebTestRunner::TestRunner::evaluateScriptInIsolatedWorldAndReturnValue):
        (WebTestRunner::TestRunner::evaluateScriptInIsolatedWorld):
        (WebTestRunner::TestRunner::setIsolatedWorldSecurityOrigin):
        (WebTestRunner::TestRunner::setIsolatedWorldContentSecurityPolicy):
        (WebTestRunner::TestRunner::addOriginAccessWhitelistEntry):
        (WebTestRunner::TestRunner::removeOriginAccessWhitelistEntry):
        (WebTestRunner::TestRunner::hasCustomPageSizeStyle):
        (WebTestRunner::TestRunner::forceRedSelectionColors):
        (WebTestRunner::TestRunner::addUserScript):
        (WebTestRunner::TestRunner::addUserStyleSheet):
        (WebTestRunner::TestRunner::startSpeechInput):
        (WebTestRunner::TestRunner::loseCompositorContext):
        (WebTestRunner::TestRunner::markerTextForListItem):
        (WebTestRunner::TestRunner::findString):
        (WebTestRunner::TestRunner::setMinimumTimerInterval):
        (WebTestRunner::TestRunner::setAutofilled):
        (WebTestRunner::TestRunner::setValueForUser):
        (WebTestRunner::TestRunner::enableFixedLayoutMode):
        (WebTestRunner::TestRunner::setFixedLayoutSize):
        (WebTestRunner::TestRunner::selectionAsMarkup):
        (WebTestRunner::TestRunner::setTextSubpixelPositioning):
        (WebTestRunner::TestRunner::resetPageVisibility):
        (WebTestRunner::TestRunner::setPageVisibility):
        (WebTestRunner::TestRunner::setTextDirection):
        (WebTestRunner::TestRunner::textSurroundingNode):
        (WebTestRunner::TestRunner::workerThreadCount):
        (WebTestRunner::TestRunner::cppVariantToBool):
        (WebTestRunner::TestRunner::cppVariantToInt32):
        (WebTestRunner::TestRunner::cppVariantToWebString):
        (WebTestRunner::TestRunner::cppVariantToWebStringArray):
        (WebTestRunner::TestRunner::printErrorMessage): formerly logErrorToConsole
        (WebTestRunner::TestRunner::fallbackMethod):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebKit):
        (WebTestRunner::TestRunner::setWebView):
        (TestRunner):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::createMainWindow):
        (TestShell::~TestShell):

2012-11-19  Yusuke Sato  <yusukes@chromium.org>

        [Chromium] Flash cannot receive scroll events when threaded compositing is in use
        https://bugs.webkit.org/show_bug.cgi?id=101423

        Reviewed by James Robinson.

        Call setWantsWheelEvents(true) in initialize() so that gesture-events and transformed-events tests in
        LayoutTests/platform/chromium/plugins/ will not fail even if a buildbot introduces threaded compositing
        in the future.

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (TestWebPlugin::initialize):

2012-11-19  Nate Chapin  <japhet@chromium.org>

        Move empty loading to DocumentLoader, simplify FrameLoader::init()
        https://bugs.webkit.org/show_bug.cgi?id=101512

        Reviewed by Adam Barth.

        Chromium DRT has some code that doesn't play nicely with empty urls and incorrectly
        interprets them as a non-empty load. This ensures
        http/tests/navigation/new-window-redirect-history.html continues to pass
        in chromium.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::updateForCommittedLoad):

2012-11-19  Vincent Scheib  <scheib@chromium.org>

        [Chromium] Remove WebKit::WebRuntimeFeatures::enablePointerLock.
        https://bugs.webkit.org/show_bug.cgi?id=96946

        Reviewed by Adam Barth.

        The runtime flag functionality has already been removed.
        Now that Chromium no longer has a compile dependency on this
        API, it can be removed as well.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2012-11-19  Kihong Kwon  <kihong.kwon@samsung.com>

        Add PROXIMITY_EVENTS feature
        https://bugs.webkit.org/show_bug.cgi?id=102658

        Reviewed by Kentaro Hara.

        Add PROXIMITY_EVENTS feature to FeatureList and qmake.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2012-11-19  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WTR] Memory leak in TestController::initialize()
        https://bugs.webkit.org/show_bug.cgi?id=102616

        Reviewed by Kenneth Rohde Christiansen.

        Remove call to WKStringCreateWithUTF8CString() to construct
        the icon database path which was leaking memory since the
        returned WKStringRef was not adopted. The code now uses
        WTF::String instead of std::string and converts it to a
        WKStringRef using toWK().

        * WebKitTestRunner/StringFunctions.h:
        (WTR::toWK): Overload toWK() to take a WTF::String in
        argument.
        (WTR):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2012-11-19  Kentaro Hara  <haraken@chromium.org>

        Remove IDLStructure.pm
        https://bugs.webkit.org/show_bug.cgi?id=102642

        Reviewed by Adam Barth.

        Previously IDLStructure.pm was full of regular expressions to
        parse IDL files. Now a new IDL parser is implemented, IDLStructure.pm
        just contains several data structures for the IDL parser. We can
        move them to IDLParser.pm and thus remove IDLStructure.pm.

        No tests. No change in generated code.

        * WebKitTestRunner/DerivedSources.make:
        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/InjectedBundle/DerivedSources.pri:

2012-11-18  KyungTae Kim  <ktf.kim@samsung.com>

        [EFL] Not to include "ewk_view_private.h" in Tools
        https://bugs.webkit.org/show_bug.cgi?id=102644

        Reviewed by Gyuyoung Kim.

        Include ewk_view.h instead of ewk_view_private.h in Tools

        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:

2012-11-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135104.
        http://trac.webkit.org/changeset/135104
        https://bugs.webkit.org/show_bug.cgi?id=102638

        Should not use commit queue to add people to committer list.
        (Requested by ap_ on #webkit).

        * Scripts/webkitpy/common/config/committers.py:

2012-11-18  Vivek Galatage  <vivek.vg@samsung.com>

        Add myself to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=102636

        Reviewed by Laszlo Gombos.

        Add myself to committers.py

        * Scripts/webkitpy/common/config/committers.py:

2012-11-18  Genevieve Mak  <gmak@rim.com>

        [BlackBerry] Enable Touch Sliders
        https://bugs.webkit.org/show_bug.cgi?id=102516

        Reviewed by Rob Buis.

        Enabled for BlackBerry only
        PR #242781
        PR #176014

        * Scripts/webkitperl/FeatureList.pm:

2012-11-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Remove unused code I wrote a long time ago from gardeningserver.py
        https://bugs.webkit.org/show_bug.cgi?id=102605

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/servers/gardeningserver.py: Removed.
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py: Removed.

2012-11-16  Tony Chang  <tony@chromium.org>

        Remove ENABLE_CSS_HIERARCHIES since it's no longer in use
        https://bugs.webkit.org/show_bug.cgi?id=102554

        Reviewed by Andreas Kling.

        As mentioned in https://bugs.webkit.org/show_bug.cgi?id=79939#c41 ,
        we're going to revist this feature once additional vendor support is
        achieved.

        * Scripts/webkitperl/FeatureList.pm:

2012-11-16  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move stubs from DRTTestRunner to TestRunner
        https://bugs.webkit.org/show_bug.cgi?id=102489

        Reviewed by Adam Barth.

        This is part of moving all methods from DRTTestRunner to TestRunner.
        Instead of keeping one stub per method, I'm using a shared stub to
        clean up the code.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner::TestRunner::TestRunner):
        (WebTestRunner):
        (WebTestRunner::TestRunner::fallbackMethod):
        (WebTestRunner::TestRunner::notImplemented):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebTestRunner):
        (TestRunner):
        (WebTestRunner::TestRunner::setDelegate):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::createMainWindow):
        (TestShell::~TestShell):

2012-11-16  Jochen Eisinger  <jochen@chromium.org>

        [chromium] fake drag drop operations in the WebTestProxyBase instead of the WebViewHost
        https://bugs.webkit.org/show_bug.cgi?id=102495

        Reviewed by Adam Barth.

        When a drag operation is initiated in a layout test, we need to
        simulate a corresponding drop event, otherwise the WebViewImpl will sit
        there waiting for it. Instead of having the embedder taking care of
        this, move this into the TestRunner library.

        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestProxyBase):
        (WebTestRunner::WebTestProxy::startDragging):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::startDragging):
        (WebTestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-11-16  Tien-Ren Chen  <trchen@chromium.org>

        Rename applyDefaultDeviceScaleFactorInCompositor to setApplyDeviceScaleFactorInCompositor
        https://bugs.webkit.org/show_bug.cgi?id=102462

        Reviewed by James Robinson.

        As we no longer have this "default" device scale factor.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):

2012-11-15  Takashi Sakamoto  <tasak@google.com>

        [Win] key event's location does not work on Windows platform.
        https://bugs.webkit.org/show_bug.cgi?id=89742

        Reviewed by Brent Fulgham.

        Modified keyDownCallback to use lparam to specify left-hand keys or
        right-hand keys.

        * DumpRenderTree/win/EventSender.cpp:
        (makeKeyDataForScanCode):
        Given a virtual keycode, generate scancode and extended key bit of
        lparam.
        (keyDownCallback):
        Use lparam for left-hand and right-hand keys, because Windows doesn't
        directly provide a virtual keycode which distinguishes between
        left-hand and right-hand. For example, when control key is pressed,
        wparam has VK_CONTROL, neither VK_RCONTROL nor VK_LCONTROL.

2012-11-16  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Add missing WebRTCPeerConnectionHandlerClient::didAddRemoteDataChannel
        https://bugs.webkit.org/show_bug.cgi?id=102386

        Reviewed by Adam Barth.

        Adding mock data channel functionality.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::openDataChannel):

2012-11-16  Jochen Eisinger  <jochen@chromium.org>

        [chromium] delete unused testRunner methods
        https://bugs.webkit.org/show_bug.cgi?id=102479

        Reviewed by Adam Barth.

        These methods aren't used by any layout test. Remove them to avoid bit rot

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::reset):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::shouldBeginEditing):
        (WebViewHost::shouldEndEditing):
        (WebViewHost::shouldInsertNode):
        (WebViewHost::shouldInsertText):
        (WebViewHost::shouldChangeSelectedRange):
        (WebViewHost::shouldDeleteRange):
        (WebViewHost::shouldApplyStyle):
        (WebViewHost::startDragging):
        (WebViewHost::enterFullScreenNow):
        (WebViewHost::exitFullScreenNow):

2012-11-15  Alexey Proskuryakov  <ap@apple.com>

        Private Browsing is a per-page setting that sets a global value
        https://bugs.webkit.org/show_bug.cgi?id=67870

        Reviewed by Sam Weinig.

        * DumpRenderTree/mac/DumpRenderTree.mm: (setDefaultsToConsistentValuesForTesting):
        Call _switchNetworkLoaderToNewTestingSession before making other settings, so that
        they would actually apply to the testing session.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):
        (WTR::InjectedBundle::beginTesting):
        Only call WKBundleSwitchNetworkLoaderToNewTestingSession once per process, matching
        WebKit1. I'm not fully sure what is going wrong, but apparently creating mutiple
        sessions with the same identifier doesn't quite work.

2012-11-16  Yael Aharon  <yael.aharon@intel.com>

        Unreviewed. Help bugzilla find me.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-16  Peter Beverloo  <peter@chromium.org>

        Running TestWebKitAPI and webkit_unit_tests for Chromium Android should defer to the Chromium-sided test runner
        https://bugs.webkit.org/show_bug.cgi?id=102245

        Reviewed by Tony Chang.

        When running TestWebKitAPI and webkit_unit_test for Chromium Android, defer
        the actual running part to the test runner which lives on the Chromium side.
        Re-implementing or even generalizing the device-interaction part in WebKit
        is error prone and not worth the effort.

        * Scripts/run-api-tests:
        * Scripts/run-chromium-webkit-unit-tests:

2012-11-15  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: add code for reporting stack traces of unknown instrumented objects
        https://bugs.webkit.org/show_bug.cgi?id=102384

        Reviewed by Pavel Feldman.

        Updated return type in accord with the changes in MemoryInstrumentationClient.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:

2012-11-15  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Split WebCore/platform into a separate library
        https://bugs.webkit.org/show_bug.cgi?id=94435

        Reviewed by Martin Robinson.

        More people have been reporting problems when linking WebCore because
        the command line limit is being exceeded. Splitting WebCore a bit more
        is in order.

        * GNUmakefile.am: link libWebCorePlatform into DRT

2012-11-15  Dana Jansens  <danakj@chromium.org>

        [chromium] Stop using the WebCompositorSupport methods for changing settings
        https://bugs.webkit.org/show_bug.cgi?id=101968

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/TestShell.cpp:
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setPerTilePaintingEnabled):
        (TestShell::setAcceleratedAnimationEnabled):

2012-11-15  Tony Chang  <tony@chromium.org>

        Generate Settings from a .in file
        https://bugs.webkit.org/show_bug.cgi?id=100393

        Reviewed by Adam Barth.

        Add the generated WebCore files to the include dir.

        * TestWebKitAPI/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:

2012-11-15  Roger Fong  <roger_fong@apple.com>

        Make old-run-webkit-tests handle setting the results directory properly.
        https://bugs.webkit.org/show_bug.cgi?id=102273
        <rdar://problem/11571607>

        Reviewed by Timothy Horton.

        A call to chdirWebkit in old-run-webkit-tests set the current working directory to the OpenSource folder.
        Thus setting --results-directory to OpenSource/layout-test-results would create OpenSource/layout-test-results inside the main OpenSource folder.
        This caused many other problems including failure to upload test results and failed future test runs.
        The solution is to save the current working directory before calling chdirWebKit and then reconstructing the full path to the results directory 
        using the saved directory when setting $testResultsDirectory.

        * Scripts/old-run-webkit-tests:

2012-11-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134800 and r134805.
        http://trac.webkit.org/changeset/134800
        http://trac.webkit.org/changeset/134805
        https://bugs.webkit.org/show_bug.cgi?id=102417

        This patch broke chromium port (Requested by jianli on
        #webkit).

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::openDataChannel):

2012-11-15  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Add missing WebRTCPeerConnectionHandlerClient::didAddRemoteDataChannel
        https://bugs.webkit.org/show_bug.cgi?id=102386

        Reviewed by Adam Barth.

        Adding mock data channel functionality.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::openDataChannel):

2012-11-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134649 and r134665.
        http://trac.webkit.org/changeset/134649
        http://trac.webkit.org/changeset/134665
        https://bugs.webkit.org/show_bug.cgi?id=102413

        Broke a ton of downstream chromium tests (Requested by japhet
        on #webkit).

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::updateForCommittedLoad):

2012-11-15  Andreas Kling  <akling@apple.com>

        Update my e-mail address.

        Rubber-stamped by Anders Koivisto.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-15  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL] Bump Harfbuzz to allow fixing bug 101009 on EFL
        https://bugs.webkit.org/show_bug.cgi?id=101323

        Reviewed by Martin Robinson.

        Bumping Harfbuzz to newer version so that we can remove the
        ifdef round the fix for bug 101009 for EFL, too.
        We're using the zip snapshot since jhbuild can fallback to the previously
        downloaded blob in case of network failures which leads to better
        buildbot robustness. This zip snapshot currently needs to be locally
        patched to fix ICU detection on systems that don't have icu pkg-config files.
        The patch is suggested for merging into HarfBuzz. We can remove it locally
        once it's accepted into HarfBuzz upstream.

        * efl/patches/harfbuzz-icu-detection-fix.patch: Applied after retrieving source to fix harfbuzz detection on systems that don't have pkg-config files for it.
        * efl/jhbuild.modules: Bumping harfbuzz version.

2012-11-15  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Implement WTR --no-timeout-at-all option
        https://bugs.webkit.org/show_bug.cgi?id=102251

        Reviewed by Eric Carlson.

        * WebKitTestRunner/mac/TestControllerMac.mm: (WTR::TestController::platformRunUntil):
        Just do it, and convert to Objective C on the way for simplicity.

2012-11-14  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL] Port tiled backing store
        https://bugs.webkit.org/show_bug.cgi?id=71352

        Reviewed by Gyuyoung Kim.

        * EWebLauncher/main.c: Added option to test the WebCore's tiled backing store.
        (_User_Arguments):
        (windowCreate):
        (parseUserArguments):

2012-11-14  Andy Estes  <aestes@apple.com>

        Fix the build.

        * TestWebKitAPI/mac/TestBrowsingContextLoadDelegate.h:

2012-11-14  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: consolidate webkit-base-finding code
        https://bugs.webkit.org/show_bug.cgi?id=102007

        Reviewed by Eric Seidel.

        This patch creates a new "WebKitFinder" class that other
        modules can use to find the top of the WebKit tree and
        commonly used subdirectories. This logic was in the
        webkitpy.layout_test.port classes but wasn't specific to those
        classes and now can be used by other modules without needing a port
        (e.g., by the check-webkit-style python linter).

        This code is somewhat redundant with the code for find_checkout_root()
        in the scm modules, but it does not rely on the presence of a version
        control system to work. This is a requirement for some uses of the
        tree (e.g., Chromium tester checkouts).

        This patch removes most of the logic from the layout_tests.port.config
        module and makes that as private as possible. Now we just need to move
        the default_configuration and flag_from_configuration logic into
        DeprecatedPort (or someplace else appropriate) and we can finish
        getting rid of the Config class (but that is a separate patch).

        * Scripts/webkitpy/common/webkit_finder.py: Added.
        (WebKitFinder):
        (WebKitFinder.__init__):
        (WebKitFinder.webkit_base):
        (WebKitFinder.path_from_webkit_base):
        (WebKitFinder.path_to_script):
        (WebKitFinder.layout_tests_dir):
        (WebKitFinder.perf_tests_dir):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        (Port):
        (Port.webkit_base):
        (Port.path_from_webkit_base):
        (Port.path_to_script):
        (Port.layout_tests_dir):
        (Port.perf_tests_dir):
        (Port.set_option_default):
        (Port._run_script):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_diff_text):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort._determine_driver_path_statically):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        (Config.__init__):
        (Config.build_directory):
        (Config.default_configuration):
        (Config._read_configuration):
        * Scripts/webkitpy/layout_tests/port/config_mock.py: Removed.
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        (ConfigTest.test_default_configuration__standalone):
        (ConfigTest.test_default_configuration__scripterror):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverTest.make_port):
        (DriverTest.test_no_timeout):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.setup_environ_for_server):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.show_results_html_file):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (TestWebKitPort.__init__):
        (PortTestCase.make_port):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest.test_expectations_files):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.make_driver):
        (XvfbDriverTest.test_stop):
        * Scripts/webkitpy/style/checkers/python.py:
        (Pylinter.__init__):

2012-11-14  Dana Jansens  <danakj@chromium.org>

        [chromium] WebPreferences reset() should set perTilePainting and acceleratedAnimation settings to false.
        https://bugs.webkit.org/show_bug.cgi?id=102296

        Reviewed by James Robinson.

        These settings are always set by TestShell anyhow, but we should be
        setting them to false here along with everything else.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):

2012-11-08  Andy Estes  <aestes@apple.com>

        [WebKit2] Need API in UIProcess to enable loading of custom protocols
        https://bugs.webkit.org/show_bug.cgi?id=101674

        Reviewed by Brady Eidson.

        Add an API test that implements a custom protocol and attempts to load
        a resource requiring that protocol in a WKView. The test passes only if
        didFinishLoadForFrame: fires.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm: Added.
        (+[TestProtocol canInitWithRequest:]):
        (+[TestProtocol canonicalRequestForRequest:]):
        (+[TestProtocol requestIsCacheEquivalent:toRequest:]):
        (-[TestProtocol startLoading]):
        (-[TestProtocol stopLoading]):
        * TestWebKitAPI/Tests/WebKit2ObjC/UserContentTest.mm:
        * TestWebKitAPI/mac/TestBrowsingContextLoadDelegate.h: Copied from Source/WebKit2/UIProcess/API/mac/WKBrowsingContextControllerInternal.h.
        * TestWebKitAPI/mac/TestBrowsingContextLoadDelegate.mm: Copied from Source/WebKit2/UIProcess/API/mac/WKBrowsingContextControllerInternal.h.
        (-[TestBrowsingContextLoadDelegate initWithBlockToRunOnLoad:]):
        (-[TestBrowsingContextLoadDelegate browsingContextControllerDidFinishLoad:]):

2012-11-14  Ojan Vafai  <ojan@chromium.org>

        Fix some defuct flakiness dashboard unittests.
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:

2012-11-14  Glenn Adams  <glenn@skynav.com>

        webkitpy: print-expectations - add --paths option to print only paths of test expectation files
        https://bugs.webkit.org/show_bug.cgi?id=102269

        Reviewed by Dirk Pranke.

        Add --paths option to print-expectations command in order to obtain list of applicable
        test expectation file paths.

        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintExpectations.__init__):
        (PrintExpectations.execute):
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (PrintExpectationsTest.run_test):
        (PrintExpectationsTest.test_paths):

2012-11-14  James Robinson  <jamesr@chromium.org>

        webgl-background-color.html started failing
        https://bugs.webkit.org/show_bug.cgi?id=102247

        Reviewed by Adrienne Walker.

        The compositor thread should outlive the WebView.

        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):

2012-11-14  Nate Chapin  <japhet@chromium.org>

        Move empty loading to DocumentLoader, simplify FrameLoader::init()
        https://bugs.webkit.org/show_bug.cgi?id=101512

        Reviewed by Adam Barth.

        Chromium DRT has some code that doesn't play nicely with empty urls and incorrectly
        interprets them as a non-empty load. This ensures
        http/tests/navigation/new-window-redirect-history.html continues to pass
        in chromium.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::updateForCommittedLoad):

2012-11-14  Zan Dobersek  <zandobersek@gmail.com>

        Remove uses of deprecated unittest.TestCase aliases
        https://bugs.webkit.org/show_bug.cgi?id=102253

        Reviewed by Dirk Pranke.

        Replace the deprecated unittest.TestCase methods with the corresponding methods
        everywhere inside the Tools directory. The following replacements are done:
        - assertEquals -> assertEqual
        - assert_ -> assertTrue
        - failUnlessRaises -> assertRaises

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (SVNMirrorTest.test_CheckOutSource):
        * QueueStatusServer/model/queuepropertymixin_unittest.py:
        (QueuePropertyMixinTest.test_queue_property):
        * QueueStatusServer/model/queues_unittest.py:
        (QueueTest._assert_short_name):
        (QueueTest._assert_display_name):
        (QueueTest._assert_name_with_underscores):
        * QueueStatusServer/model/workitems_unittest.py:
        (WorkItemsTest.test_display_position_for_attachment):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_parse_log_entries_from_changelog):
        (test_parse_log_entries_from_annotated_file):
        (_assert_parse_reviewer_text_and_list):
        (_assert_parse_reviewer_text_list):
        (_assert_fuzzy_reviewer_match):
        (_assert_parse_authors):
        (test_latest_entry_parse):
        (test_latest_entry_parse_single_entry):
        (test_set_reviewer):
        (test_set_short_description_and_bug_url):
        * Scripts/webkitpy/common/checkout/diff_parser_unittest.py:
        (DiffParserTest.test_diff_parser):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (GitSVNTest.test_revisions_changing_files_with_local_commit):
        (GitSVNTest.test_upstream_branch):
        (GitSVNTest.test_create_patch_with_rm_and_changed_files):
        (GitTestWithMock.test_push_local_commits_to_server_with_username_and_password):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_mac_port):
        (DeprecatedPortTest.test_gtk_port):
        (DeprecatedPortTest.test_efl_port):
        (DeprecatedPortTest.test_qt_port):
        (DeprecatedPortTest.test_chromium_port):
        (DeprecatedPortTest.test_chromium_android_port):
        (DeprecatedPortTest.test_chromium_xvfb_port):
        * Scripts/webkitpy/common/config/urls_unittest.py:
        (URLsTest.test_parse_bug_id):
        (URLsTest.test_parse_attachment_id):
        * Scripts/webkitpy/common/find_files_unittest.py:
        (TestWinNormalize.assert_filesystem_normalizes):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        (test_url_creation):
        (test_parse_bug_id):
        (_assert_dictionaries_equal):
        (test_parse_bugs_from_xml):
        (test_attachment_detail_bug_parsing):
        (_assert_result_count):
        (test_request_page_parsing):
        (test_quip_page_parsing):
        (EditUsersParserTest._assert_login_userid_pairs):
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (test_status_parsing):
        (test_latest_cached_build):
        (test_results_zip_url):
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        (test_credentials_from_environment):
        * Scripts/webkitpy/common/net/failuremap_unittest.py:
        (FailureMapTest.test_failing_revisions):
        (FailureMapTest.test_new_failures):
        (FailureMapTest.test_new_failures_with_old_revisions):
        (FailureMapTest.test_new_failures_with_more_old_revisions):
        (FailureMapTest.test_tests_failing_for):
        (FailureMapTest.test_failing_tests):
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        (LayoutTestResultsTest.test_set_failure_limit_count):
        * Scripts/webkitpy/common/net/unittestresults_unittest.py:
        (UnitTestResultsTest.test_nostring):
        (UnitTestResultsTest.test_emptystring):
        * Scripts/webkitpy/common/read_checksum_from_png_unittest.py:
        (ReadChecksumFromPngTest.test_read_checksum):
        * Scripts/webkitpy/common/system/deprecated_logging_unittest.py:
        (LoggingTest.assert_log_equals):
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ScriptErrorTest.test_string_from_args):
        (ScriptErrorTest.test_message_with_output):
        (ExecutiveTest.test_run_command_with_bad_command):
        (ExecutiveTest.test_run_command_with_unicode):
        (ExecutiveTest.serial_test_run_in_parallel):
        * Scripts/webkitpy/common/system/filesystem_mock_unittest.py:
        (MockFileSystemTest.quick_check):
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (GenericFileSystemTests.test_glob__trailing_asterisk):
        (GenericFileSystemTests.test_glob__leading_asterisk):
        (GenericFileSystemTests.test_glob__middle_asterisk):
        (GenericFileSystemTests.test_glob__period_is_escaped):
        (RealFileSystemTest.test_chdir):
        (RealFileSystemTest.test_remove_file_with_retry):
        (RealFileSystemTest.test_sep):
        * Scripts/webkitpy/common/system/logtesting.py:
        (TestLogStream.assertMessages):
        * Scripts/webkitpy/common/system/logutils_unittest.py:
        (GetLoggerTest.test_get_logger_in_webkitpy):
        (GetLoggerTest.test_get_logger_not_in_webkitpy):
        * Scripts/webkitpy/common/system/outputcapture.py:
        (OutputCaptureTestCaseBase.assertStdout):
        (OutputCaptureTestCaseBase.assertStderr):
        * Scripts/webkitpy/common/system/path_unittest.py:
        (AbspathTest.test_abspath_to_uri_cygwin):
        (AbspathTest.test_abspath_to_uri_unixy):
        (AbspathTest.test_abspath_to_uri_win):
        (AbspathTest.test_abspath_to_uri_escaping_unixy):
        (AbspathTest.test_abspath_to_uri_escaping_cygwin):
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo.test_real_code):
        (TestPlatformInfo.test_os_name_and_wrappers):
        (TestPlatformInfo.test_os_version):
        (TestPlatformInfo.test_total_bytes_memory):
        * Scripts/webkitpy/common/system/user_unittest.py:
        (UserTest.test_confirm.mock_raw_input):
        (UserTest.test_confirm):
        * Scripts/webkitpy/common/system/zipfileset_unittest.py:
        (ZipFileSetTest.test_open):
        (ZipFileSetTest.test_read):
        * Scripts/webkitpy/common/watchlist/watchlist_unittest.py:
        (WatchListTest.test_filename_definition_no_matches):
        (WatchListTest.test_filename_definition):
        (WatchListTest.test_cc_rules_simple):
        (WatchListTest.test_cc_rules_complex):
        (WatchListTest.test_cc_and_message_rules_complex):
        (WatchListTest.test_cc_and_message_rules_no_matches):
        (WatchListTest.test_added_match):
        (WatchListTest.test_deleted_match):
        (WatchListTest.test_more_and_less_match):
        (WatchListTest.test_complex_match):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (LockCheckingRunner.handle_finished_list):
        (LayoutTestRunnerTests.test_interrupt_if_at_failure_limits):
        (LayoutTestRunnerTests.test_update_summary_with_result):
        (LayoutTestRunnerTests.test_servers_started):
        (SharderTests.assert_shards):
        (SharderTests.test_shard_in_two_has_no_locked_shards):
        (SharderTests.test_shard_in_two_has_no_unlocked_shards):
        (NaturalCompareTest.assert_cmp):
        (KeyCompareTest.assert_cmp):
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py:
        (TestConfigurationTest.test_items):
        (TestConfigurationTest.test_keys):
        (TestConfigurationTest.test_str):
        (TestConfigurationTest.test_repr):
        (TestConfigurationTest.test_hash):
        (TestConfigurationTest.test_eq):
        (TestConfigurationTest.test_values):
        (SpecifierSorterTest.test_init):
        (SpecifierSorterTest.test_add_specifier):
        (SpecifierSorterTest.test_add_macros):
        (SpecifierSorterTest.test_category_priority):
        (SpecifierSorterTest.test_specifier_priority):
        (SpecifierSorterTest.test_sort_specifiers):
        (TestConfigurationConverterTest.test_symmetric_difference):
        (TestConfigurationConverterTest.test_to_config_set):
        (TestConfigurationConverterTest.test_macro_expansion):
        (TestConfigurationConverterTest.test_to_specifier_lists):
        (TestConfigurationConverterTest.test_macro_collapsing):
        (TestConfigurationConverterTest.test_converter_macro_collapsing):
        (TestConfigurationConverterTest.test_specifier_converter_access):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (assert_exp):
        (MiscTests.test_result_was_expected):
        (MiscTests.test_remove_pixel_failures):
        (MiscTests.test_suffixes_for_expectations):
        (MiscTests.test_get_expectations_string):
        (SkippedTests.check):
        (ExpectationSyntaxTests.assert_tokenize_exp):
        (SemanticTests.test_bad_bugid):
        (SemanticTests.test_missing_bugid):
        (TestExpectationSerializationTests.test_reconstitute_only_these):
        * Scripts/webkitpy/layout_tests/models/test_failures_unittest.py:
        (TestFailuresTest.test_crashes):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_nonexistant_expectations):
        (PortTest.test_additional_expectations):
        * Scripts/webkitpy/layout_tests/port/builders_unittest.py:
        (BuildersTest.test_path_from_name):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidPortTest.test_attributes):
        (ChromiumAndroidPortTest.test_default_timeout_ms):
        (ChromiumAndroidPortTest.test_get_devices_one_device):
        (ChromiumAndroidPortTest.test_get_devices_two_devices):
        (ChromiumAndroidPortTest.test_get_device_serial_one_device):
        (ChromiumAndroidPortTest.test_get_device_serial_two_devices):
        (ChromiumAndroidPortTest.test_must_require_http_server):
        (ChromiumAndroidDriverTest.test_get_last_stacktrace):
        (ChromiumAndroidDriverTest.test_get_crash_log):
        (ChromiumAndroidDriverTest.test_cmd_line):
        (ChromiumAndroidDriverTest.test_read_prompt):
        (ChromiumAndroidDriverTest.test_command_from_driver_input):
        (ChromiumAndroidDriverTwoDriversTest.test_two_drivers):
        (ChromiumAndroidTwoPortsTest.test_options_with_two_ports):
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        (ChromiumLinuxPortTest.assert_architecture):
        (ChromiumLinuxPortTest.test_determine_architecture_fails):
        (ChromiumLinuxPortTest.test_path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.assert_name):
        (ChromiumMacPortTest.test_baseline_path):
        (ChromiumMacPortTest.test_path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/chromium_port_testcase.py:
        (ChromiumPortTestCase.test_default_max_locked_shards):
        (ChromiumPortTestCase.test_default_timeout_ms):
        (ChromiumPortTestCase.test_default_pixel_tests):
        (ChromiumPortTestCase.test_all_test_configurations):
        (ChromiumPortTestCase.test_default_configuration):
        (ChromiumPortTestCase.test_diff_image):
        (ChromiumPortTestCase.test_diff_image_crashed):
        (ChromiumPortTestCase.test_expectations_files):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest.test_setup_environ_for_server_cygpath):
        (ChromiumWinTest.assert_name):
        (ChromiumWinTest.test_baseline_path):
        (ChromiumWinTest.test_path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverTest.test_read_block):
        (DriverTest.test_read_binary_block):
        (DriverTest.test_read_base64_block):
        (DriverTest.test_no_timeout):
        (DriverTest.test_check_for_driver_crash.assert_crash):
        (DriverTest.test_creating_a_port_does_not_write_to_the_filesystem):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.test_get_from_builder_name):
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        (GtkPortTest.test_default_timeout_ms):
        * Scripts/webkitpy/layout_tests/port/http_lock_unittest.py:
        (HttpLockTest.test_current_lock_pid):
        * Scripts/webkitpy/layout_tests/port/image_diff_unittest.py:
        (TestImageDiffer.test_diff_image_failed):
        (TestImageDiffer.test_diff_image_passed):
        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py:
        (LeakDetectorTest.test_leaks_args):
        (test_parse_leaks_output):
        (test_leaks_files_in_directory):
        (test_count_total_leaks):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacTest.test_default_timeout_ms):
        (assert_name):
        (test_setup_environ_for_server):
        (_assert_search_path):
        (test_32bit):
        (test_64bit):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockTestShellTest.test_pixeltest__fails):
        (MockTestShellTest.test_test_shell_parse_options):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_default_max_locked_shards):
        (PortTestCase.test_default_timeout_ms):
        (PortTestCase.test_default_pixel_tests):
        (PortTestCase.test_diff_image):
        (PortTestCase.test_diff_image_crashed):
        (PortTestCase.test_get_crash_log):
        (PortTestCase.assert_build_path):
        (PortTestCase.test_expectations_ordering):
        (_assert_config_file_for_platform):
        (test_path_to_apache_config_file):
        (test_additional_platform_directory):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest._assert_search_path):
        (QtPortTest._assert_expectations_files):
        (QtPortTest.test_setup_environ_for_server):
        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
        (TestServerProcess.test_basic):
        (TestServerProcess.test_broken_pipe):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest._assert_search_path):
        (WinPortTest._assert_version):
        (WinPortTest.test_runtime_feature_list):
        (WinPortTest.test_expectations_files):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (LintTest.test_all_configurations):
        (MainTest.test_all):
        (MainTest.test_repeat_each):
        (MainTest.test_skipped_flag):
        (MainTest.test_iterations):
        (MainTest.test_run_chunk):
        (MainTest.test_run_part):
        (MainTest.test_run_singly):
        (MainTest.test_run_singly_actually_runs_tests):
        (MainTest.test_single_file):
        (MainTest.test_single_file_with_prefix):
        (MainTest.test_single_skipped_file):
        (MainTest.test_stderr_is_saved):
        (MainTest.test_test_list):
        (MainTest.test_test_list_with_prefix):
        (MainTest.test_missing_and_unexpected_results):
        (MainTest.test_pixel_test_directories):
        (MainTest.test_missing_and_unexpected_results_with_custom_exit_code):
        (MainTest.test_crash_log):
        (MainTest.test_web_process_crash_log):
        (MainTest.test_exit_after_n_failures_upload):
        (MainTest.test_exit_after_n_failures):
        (MainTest.test_exit_after_n_crashes):
        (MainTest.test_retrying_and_flaky_tests):
        (MainTest.test_run_order__inline):
        (MainTest.test_reftest_run):
        (MainTest.test_reftest_run_reftests_if_pixel_tests_are_disabled):
        (MainTest.test_reftest_skip_reftests_if_no_ref_tests):
        (MainTest.test_reftest_expected_html_should_be_ignored):
        (MainTest.test_reftest_driver_should_run_expected_html):
        (MainTest.test_reftest_driver_should_run_expected_mismatch_html):
        (MainTest.test_output_diffs):
        (MainTest.test_unsupported_platform):
        (EndToEndTest.test_end_to_end):
        (RebaselineTest.test_reset_results):
        (RebaselineTest.test_missing_results):
        (RebaselineTest.test_new_baseline):
        * Scripts/webkitpy/layout_tests/servers/http_server_integrationtest.py:
        (BaseTest.integration_test_server__normal):
        (BaseTest.integration_test_server__fails):
        (BaseTest.integration_test_port_and_root):
        * Scripts/webkitpy/layout_tests/servers/http_server_unittest.py:
        (TestHttpServer.test_start_cmd):
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (RegularTest.test_logging_not_included):
        (RegularTest._basic):
        (RegularTest.test_basic):
        (RegularTest.test_log_after_update):
        (RegularTest.test_log_args):
        (TtyTest.test_basic):
        (TtyTest.test_log_after_update):
        (VerboseTest.test_basic):
        (VerboseTest.test_log_after_update):
        (VerboseTest.test_log_args):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.assertWritten):
        (test_test_status_line):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.assertWritten):
        * Scripts/webkitpy/style/checker_unittest.py:
        (GlobalVariablesTest.test_webkit_base_filter_rules):
        (CheckerDispatcherSkipTest._assert_should_skip_without_warning):
        (CheckerDispatcherCarriageReturnTest.test_should_check_and_strip_carriage_returns):
        (CheckerDispatcherDispatchTest.assert_checker):
        (CheckerDispatcherDispatchTest.test_changelog_paths):
        (CheckerDispatcherDispatchTest.test_cpp_paths):
        (CheckerDispatcherDispatchTest.test_json_paths):
        (CheckerDispatcherDispatchTest.test_python_paths):
        (CheckerDispatcherDispatchTest.test_text_paths):
        (CheckerDispatcherDispatchTest.test_xml_paths):
        (StyleProcessorConfigurationTest.test_init):
        (StyleProcessorConfigurationTest.test_write_style_error_emacs):
        (StyleProcessorConfigurationTest.test_write_style_error_vs7):
        (StyleProcessor_EndToEndTest.test_init):
        (StyleProcessor_EndToEndTest.test_process):
        (StyleProcessor_CodeCoverageTest.test_process__checker_dispatched):
        * Scripts/webkitpy/style/checkers/changelog_unittest.py:
        (ChangeLogCheckerTest.assert_error.handle_style_error):
        (ChangeLogCheckerTest.test_init):
        * Scripts/webkitpy/style/checkers/common_unittest.py:
        (CarriageReturnCheckerTest.assert_carriage_return):
        (TabCheckerTest.assert_tab):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppFunctionsTest.test_convert_to_lower_with_underscores):
        (CppFunctionsTest.test_create_acronym):
        (CppFunctionsTest.test_parameter):
        (CppFunctionsTest.test_single_line_view):
        (CppFunctionsTest.test_create_skeleton_parameters):
        (CppFunctionsTest.test_find_parameter_name_index):
        (CppFunctionsTest.test_parameter_list):
        (CppFunctionsTest.test_check_parameter_against_text):
        (CppStyleTestBase.perform_lint):
        (CppStyleTestBase.assert_lint):
        (CppStyleTestBase.assert_lint_one_of_many_errors_re):
        (CppStyleTestBase.assert_multi_line_lint):
        (CppStyleTestBase.assert_language_rules_check):
        (CppStyleTestBase.assert_include_what_you_use):
        (CppStyleTestBase.assert_blank_lines_check):
        (CppStyleTestBase.assert_positions_equal):
        (FunctionDetectionTest.perform_function_detection):
        (CppStyleTest.test_get_line_width):
        (CppStyleTest.test_find_next_multi_line_comment_start):
        (CppStyleTest.test_find_next_multi_line_comment_end):
        (CppStyleTest.test_remove_multi_line_comments_from_range):
        (CppStyleTest.test_position):
        (CppStyleTest.test_rfind_in_lines):
        (CppStyleTest.test_close_expression):
        (CppStyleTest.test_include_what_you_use_no_implementation_files):
        (CppStyleTest.test_include_what_you_use):
        (CppStyleTest.test_files_belong_to_same_module):
        (CppStyleTest.test_cleanse_line):
        (CppStyleTest.test_multiline_strings):
        (CppStyleTest.test_newline_at_eof.do_test):
        (CppStyleTest.test_invalid_utf8.do_test):
        (CppStyleTest.test_is_blank_line):
        (CppStyleTest.test_allow_blank_line_before_closing_namespace):
        (CppStyleTest.test_allow_blank_line_before_if_else_chain):
        (CppStyleTest.test_else_on_same_line_as_closing_braces):
        (CppStyleTest.test_build_header_guard):
        (CppStyleTest.test_legal_copyright):
        (CleansedLinesTest.test_init):
        (CleansedLinesTest.test_init_empty):
        (CleansedLinesTest.test_collapse_strings):
        (CheckForFunctionLengthsTest.assert_function_lengths_check):
        (PassPtrTest.assert_pass_ptr_check):
        (LeakyPatternTest.assert_leaky_pattern_check):
        (WebKitStyleTest.test_parameter_names):
        (WebKitStyleTest.test_webkit_export_check):
        (CppCheckerTest.test_init):
        * Scripts/webkitpy/style/checkers/jsonchecker_unittest.py:
        (JSONCheckerTest.assert_error.handle_style_error):
        (JSONCheckerTest.test_init):
        * Scripts/webkitpy/style/checkers/png_unittest.py:
        (PNGCheckerTest.test_init):
        (PNGCheckerTest.test_check):
        * Scripts/webkitpy/style/checkers/python_unittest.py:
        (PythonCheckerTest.test_init):
        (PythonCheckerTest.test_check):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase._expect_port_for_expectations_path):
        (TestExpectationsTestCase.assert_lines_lint):
        * Scripts/webkitpy/style/checkers/text_unittest.py:
        (TextStyleTestCase.assertNoError):
        (TextStyleTestCase.assertError.error_for_test):
        (TextStyleTestCase.assertError):
        (TextCheckerTest.test_init):
        * Scripts/webkitpy/style/checkers/watchlist_unittest.py:
        (WatchListTest.test_basic_error_message.handle_style_error):
        (WatchListTest):
        * Scripts/webkitpy/style/checkers/xcodeproj_unittest.py:
        (XcodeProjectFileCheckerTest.assert_error):
        * Scripts/webkitpy/style/checkers/xml_unittest.py:
        (XMLCheckerTest.assert_error.handle_style_error):
        (XMLCheckerTest.test_init):
        * Scripts/webkitpy/style/error_handlers_unittest.py:
        (DefaultStyleErrorHandlerTest._check_initialized):
        (DefaultStyleErrorHandlerTest.test_non_reportable_error):
        (DefaultStyleErrorHandlerTest.test_max_reports_per_category):
        (DefaultStyleErrorHandlerTest.test_line_numbers):
        * Scripts/webkitpy/style/filereader_unittest.py:
        (TextFileReaderTest._assert_file_reader):
        (TextFileReaderTest.test_process_file__does_not_exist):
        (TextFileReaderTest.test_count_delete_only_file):
        * Scripts/webkitpy/style/filter_unittest.py:
        (CategoryFilterTest.test_init):
        (CategoryFilterTest.test_init_default_arguments):
        (CategoryFilterTest.test_str):
        (FilterConfigurationTest.test_init):
        (FilterConfigurationTest.test_default_arguments):
        * Scripts/webkitpy/style/main_unittest.py:
        (ChangeDirectoryTest._assert_result):
        * Scripts/webkitpy/style/optparser_unittest.py:
        (ArgumentPrinterTest.test_to_flag_string):
        (ArgumentParserTest.test_parse_default_arguments):
        (ArgumentParserTest.test_parse_explicit_arguments):
        (ArgumentParserTest.test_parse_files):
        (CommandOptionValuesTest.test_init):
        * Scripts/webkitpy/style/patchreader_unittest.py:
        (PatchReaderTest._assert_checked):
        * Scripts/webkitpy/test/finder_unittest.py:
        (FinderTest.test_additional_system_paths):
        (FinderTest.test_to_module):
        (FinderTest.check_names):
        * Scripts/webkitpy/test/main_unittest.py:
        (TesterTest.test_individual_names_are_not_run_twice):
        (TesterTest.test_integration_tests_are_not_found_by_default):
        (TesterTest.test_integration_tests_are_found):
        (TesterTest.integration_test_coverage_works):
        * Scripts/webkitpy/test/runner_unittest.py:
        (RunnerTest.test_run):
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        (_expect_validate):
        * Scripts/webkitpy/tool/bot/expectedfailures_unittest.py:
        (ExpectedFailuresTest._assert_can_trust):
        (ExpectedFailuresTest.test_unexpected_failures_observed):
        (ExpectedFailuresTest.test_unexpected_failures_observed_when_tree_is_hosed):
        * Scripts/webkitpy/tool/bot/feeders_unittest.py:
        (test_patches_with_acceptable_review_flag):
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_whois):
        (IRCCommandTest.test_create_bug):
        (IRCCommandTest.test_roll_chromium_deps):
        (IRCCommandTest.test_rollout):
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        (LayoutTestResultsReaderTest.test_missing_layout_test_results):
        (test_missing_unit_test_results_path):
        (test_layout_test_results):
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        (LoggingDelegate.process_work_item):
        (LoggingDelegate.handle_unexpected_error):
        (QueueEngineTest.test_trivial):
        (QueueEngineTest.test_unexpected_error):
        (QueueEngineTest.test_handled_error):
        (QueueEngineTest._test_terminating_queue):
        * Scripts/webkitpy/tool/commands/openbugs_unittest.py:
        (OpenBugsTest.test_find_bugs_in_string):
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (FailureReasonTest.test_blame_line_for_revision):
        (PrintExpectationsTest.run_test):
        (PrintBaselinesTest.test_basic):
        (PrintBaselinesTest.test_multiple):
        (PrintBaselinesTest.test_csv):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (AbstractQueueTest.test_log_directory):
        (AbstractPatchQueueTest.test_next_patch):
        (test_auto_retry):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_rebaseline_updates_expectations_file):
        (test_rebaseline_does_not_include_overrides):
        (test_rebaseline_test):
        (test_rebaseline_test_with_results_directory):
        (test_rebaseline_test_and_print_scm_changes):
        (test_rebaseline_and_copy_test):
        (test_rebaseline_and_copy_test_no_existing_result):
        (test_rebaseline_and_copy_test_with_lion_result):
        (test_rebaseline_and_copy_no_overwrite_test):
        (test_rebaseline_test_internal_with_move_overwritten_baselines_to):
        (TestRebaselineJson.test_rebaseline_all):
        (TestRebaselineJson.test_rebaseline_debug):
        (TestRebaselineJson.test_move_overwritten):
        (TestRebaselineJson.test_no_optimize):
        (TestRebaselineJson.test_results_directory):
        (TestRebaseline.test_rebaseline):
        (TestRebaselineExpectations.test_rebaseline_expectations_noop):
        (TestRebaselineExpectations.disabled_test_overrides_are_included_correctly):
        (TestAnalyzeBaselines.test_default):
        (TestAnalyzeBaselines.test_missing_baselines):
        * Scripts/webkitpy/tool/commands/roll_unittest.py:
        (PostRollCommandsTest.test_prepare_state):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (BuildCoverageExtrapolatorTest.test_extrapolate):
        * Scripts/webkitpy/tool/steps/addsvnmimetypeforpng_unittest.py:
        (AddSvnMimetypeForPngTest.test_run):
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:
        (PrepareChangeLogTest.test_ensure_bug_url):
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py:
        (_assert_message_for_revert_output):
        * TestResultServer/model/jsonresults_unittest.py:
        (JsonResultsTest._test_merge):
        (JsonResultsTest._test_get_test_list):

2012-11-14  János Badics  <jbadics@inf.u-szeged.hu>

        [Qt][ARM] Fix 'nullptr' is a keyword in C++11 [-Wc++0x-compat] warning
        https://bugs.webkit.org/show_bug.cgi?id=102083

        Reviewed by Csaba Osztrogonác.

        Modified compiler name regex in condition that tests if -std=c++0x, c++11,
        gnu++0x or gnu++11 are enabled in order to match linux-arm-gnueabi-g++ too,
        thus enabling -Wno-c++0x-compat also on ARM compiler.

        * qmake/mkspecs/features/unix/default_post.prf:

2012-11-14  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        REGRESSION(r133757): Causing webkitpy unit tests to fail
        https://bugs.webkit.org/show_bug.cgi?id=101444

        Reviewed by Csaba Osztrogonác.

        Updated the bot name on the unit tests.

        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineTest.test_baseline_directory):

2012-11-14  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] Rename variables, structures and functions of the MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=101517

        Reviewed by Gyuyoung Kim.

        Rename variables, structures and functions of the MiniBrowser
        for the naming consistency.

        1) Browser_Window* {app_data|browser_window|window} -> window

        2) Browser_Window::webview -> Browser_Window::ewk_view
             The webkit API functions are ewk_view_xxx not webview_xxx.
             So using ewk_view will be better than webview.

        3) Browser_Window::window -> Browser_Window::elm_window
             The name is changed to be distinguished with 'Browser_Window *window'

        4) browser_{window|view}_find() -> window_find_with_{elm_window|ewk_view}()
             This is changed because the name of the function can be confused.
             Currently, browser_window_find() returns Browser_Window*. And
             browser_view_find() also returns Browser_Window*.

        5) FileSelectorData -> File_Selector_Data / AuthData -> Auth_Data
             The type definition is moved to the top of the source file
             and the name is changed to follow EFL style.

        * MiniBrowser/efl/main.c:
        (miniBrowserViewSmartClass):
        (_Browser_Window):
        (_File_Selector_Data):
        (_Auth_Data):
        (window_find_with_ewk_view):
        (window_free):
        (on_key_down):
        (view_focus_set):
        (on_mouse_down):
        (title_set):
        (on_title_changed):
        (on_url_changed):
        (on_back_forward_list_changed):
        (on_new_window):
        (on_close_window):
        (on_progress):
        (on_error):
        (on_download_request):
        (close_file_picker):
        (on_filepicker_parent_deletion):
        (on_filepicker_deletion):
        (on_fileselector_done):
        (on_file_chooser_request):
        (on_download_finished):
        (on_download_failed):
        (on_favicon_received):
        (on_view_icon_changed):
        (on_url_bar_activated):
        (on_url_bar_clicked):
        (on_back_button_clicked):
        (on_forward_button_clicked):
        (on_refresh_button_clicked):
        (on_javascript_alert):
        (on_javascript_confirm):
        (on_javascript_prompt):
        (on_window_geometry_get):
        (on_window_geometry_set):
        (on_fullscreen_deny):
        (on_fullscreen_enter):
        (on_fullscreen_exit):
        (auth_popup_close):
        (on_auth_cancel):
        (on_auth_ok):
        (on_authentication_request):
        (on_tooltip_text_set):
        (on_tooltip_text_unset):
        (on_home_button_clicked):
        (on_window_deletion):
        (window_create):

2012-11-14  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        webkitpy: Update the EFL list of bots
        https://bugs.webkit.org/show_bug.cgi?id=102121

        Reviewed by Kenneth Rohde Christiansen.

        Update the EFL bots so we can use garden-o-matic.

        * Scripts/webkitpy/layout_tests/port/builders.py:

2012-11-13  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2] New window size should consult the window attributes
        https://bugs.webkit.org/show_bug.cgi?id=102122

        Reviewed by Kenneth Rohde Christiansen.

        Take into account the size that was specified in window.open
        when creating a new window. This avoids ugly flashing on the screen.

        * MiniBrowser/efl/main.c:
        (on_key_down):
        (on_new_window):
        (window_create):
        (elm_main):

2012-11-13  Dana Jansens  <danakj@chromium.org>

        [chromium] Plumb WebCompositorSupport settings through WebLayerTreeSettings as well, in preparation for removing the settings from WebCompositorSupport
        https://bugs.webkit.org/show_bug.cgi?id=102146

        Reviewed by James Robinson.

        Pass settings that go through WebCompositorSupport also through
        WebLayerTreeSettings. When the compositor starts using those instead,
        we can remove the callers to the WebCompositorSupport setters.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        (TestShell::setPerTilePaintingEnabled):
        (TestShell::setAcceleratedAnimationEnabled):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):

2012-11-13  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r134503.
        http://trac.webkit.org/changeset/134503

        Roll out a patch that was landed just to investigate svn
        trouble

        * Scripts/webkitpy/common/config/committers.py:

2012-11-13  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Investigating svn trouble. Test commit.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r134446.
        http://trac.webkit.org/changeset/134446
        https://bugs.webkit.org/show_bug.cgi?id=101968

        Need to try a different strategy for landing a two-sided patch
        (3/3).

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        (TestShell::setPerTilePaintingEnabled):
        (TestShell::setAcceleratedAnimationEnabled):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):

2012-11-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r134449.
        http://trac.webkit.org/changeset/134449
        https://bugs.webkit.org/show_bug.cgi?id=102076

        Re-rolling in the patch, it was innocent.

        * TestWebKitAPI/PlatformEfl.cmake:

2012-11-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r134424.
        http://trac.webkit.org/changeset/134424
        https://bugs.webkit.org/show_bug.cgi?id=102076

        Made fast/dom/Window/open-window-min-size.html crash.

        * TestWebKitAPI/PlatformEfl.cmake:

2012-11-12  Dana Jansens  <danakj@chromium.org>

        [chromium] Remove the WebCompositorSupport methods for changing settings, plumb everything through WebLayerTreeSettings
        https://bugs.webkit.org/show_bug.cgi?id=101968

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setPerTilePaintingEnabled):
        (TestShell::setAcceleratedAnimationEnabled):
        (TestShell):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):

2012-11-13  Dirk Pranke  <dpranke@chromium.org>

        Fix webkitpy issues arising from a partially-installed pylint.
        Unreviewed, build fix.

        This patch ensures that we will re-install the pylint and logilab
        packages if any of them are missing, not just the pylint package.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_pylint):

2012-11-13  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Unreviewed, adding my new email address to committers.py and watchlist.

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/watchlist:

2012-11-13  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [CMake] Incorrect dependency calculation when generating forwarding headers
        https://bugs.webkit.org/show_bug.cgi?id=102076

        Reviewed by Kenneth Rohde Christiansen.

        Explicitly call generate-forwarding-headers.pl on ${WEBKIT2_DIR} as
        well, since some dependencies pulled in via the WebKit2/WebKit2_C.h
        include in config.h are only generated from there.

        This is a bit redundant since this is also done in WebKit2's
        PlatformEfl.cmake, however the WTF and WebCore API tests do not depend
        on WebKit2 so the script may not have been called when these tests are
        being built.

        * TestWebKitAPI/PlatformEfl.cmake:

2012-11-13  Zeno Albisser  <zeno@webkit.org>

        Unreviewed: Adding watchlist definition for CoordinatedGraphics.

        * Scripts/webkitpy/common/config/watchlist:

2012-11-13  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [cmake] Do not use GLOB to add WTR IDL files to buildsystem.
        https://bugs.webkit.org/show_bug.cgi?id=101785

        Reviewed by Caio Marcelo de Oliveira Filho.

        Using *.idl makes impossible to add IDL files depending on compiler flags,
        like a possible GamepadController.idl file found on Chromium.

        * WebKitTestRunner/CMakeLists.txt:

2012-11-13  Jochen Eisinger  <jochen@chromium.org>

        [chromium] TestRunner should depend on webkit_wtf_support instead of compiling the files itself
        https://bugs.webkit.org/show_bug.cgi?id=102075

        Reviewed by Pavel Feldman.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-11-13  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][DRT] Remove extra layoutFrame() call when preparing to send an event via EventSender.
        https://bugs.webkit.org/show_bug.cgi?id=102074

        Reviewed by Kenneth Rohde Christiansen.

        * DumpRenderTree/efl/EventSender.cpp:
        (feedMouseEvent): Do not call DumpRenderTreeSupportEfl::layoutFrame()
        when sending an event, as it causes additional repaints that create
        wrong pixel results for tests such as
        fast/repaint/overflow-auto-in-overflow-auto-scrolled.html.

2012-11-13  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Enable Mutation observer
        https://bugs.webkit.org/show_bug.cgi?id=102066

        Reviewed by Pavel Feldman.

        * qmake/mkspecs/features/features.pri:

2012-11-13  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] DRT - platform/blackberry/editing/text-iterator/findString-markers.html failed
        https://bugs.webkit.org/show_bug.cgi?id=102056

        Reviewed by Rob Buis.

        RIM PR 235836

        TestRunner::findString() was changed to call Page::findString() instead
        of WebPage::findNextString(). Page::findString() doesn't update
        TextMatch markers.
        Work-around by calling both Page::findString() and WebPage::findNextString().

        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        (TestRunner::findString):

2012-11-12  Jochen Eisinger  <jochen@chromium.org>

        Add the TestRunner public API to the ChromiumPublicApi watchlist, and introduce an entry for ChromiumTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=101957

        Reviewed by Adam Barth.

        Chromium now also depends on the TestRunner public API, and as such, similar rules as for the Chromium WebKit API should apply.

        * Scripts/webkitpy/common/config/watchlist:

2012-11-13  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move tracking of damaged regions from WebViewHost to WebTestProxy
        https://bugs.webkit.org/show_bug.cgi?id=101927

        Reviewed by Adam Barth.

        This will allow for sharing the code with content_shell

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::display):
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
        (WebKit):
        (WebTestProxyBase):
        (WebTestRunner::WebTestProxy::didInvalidateRect):
        (WebTestRunner::WebTestProxy::didScrollRect):
        (WebTestRunner::WebTestProxy::scheduleComposite):
        (WebTestRunner::WebTestProxy::scheduleAnimation):
        (WebTestRunner::WebTestProxy::setWindowRect):
        (WebTestRunner::WebTestProxy::show):
        (WebTestRunner::WebTestProxy::didAutoResize):
        (WebTestRunner::WebTestProxy::postAccessibilityNotification):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
        (WebTestRunner::WebTestProxyBase::setPaintRect):
        (WebTestRunner):
        (WebTestRunner::WebTestProxyBase::paintRect):
        (WebTestRunner::WebTestProxyBase::didInvalidateRect):
        (WebTestRunner::WebTestProxyBase::didScrollRect):
        (WebTestRunner::WebTestProxyBase::scheduleComposite):
        (WebTestRunner::WebTestProxyBase::scheduleAnimation):
        (WebTestRunner::WebTestProxyBase::show):
        (WebTestRunner::WebTestProxyBase::setWindowRect):
        (WebTestRunner::WebTestProxyBase::didAutoResize):
        (WebTestRunner::WebTestProxyBase::postAccessibilityNotification):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::createNewWindow):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::scheduleAnimation):
        (WebViewHost::show):
        (WebViewHost::setWindowRect):
        (WebViewHost::WebViewHost):
        (WebViewHost::proxy):
        (WebViewHost::setProxy):
        (WebViewHost::reset):
        (WebViewHost::paintInvalidatedRegion):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-11-12  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up lint errors, part 1
        https://bugs.webkit.org/show_bug.cgi?id=102024

        Reviewed by Adam Barth.

        This patch cleans up a lot of miscellaneous minor lint errors that
        apparently aren't caught by unit tests, and suppresses a few
        false positives.

        Also, this patch removes the garden-o-matic "rollout" entry point
        since it's no longer being used by the frontend (rather than
        fix it to not generate lint errors).

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive2.run_command):
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.copyfile):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._http_tests):
        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.reference_files):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver._teardown_performance):
        * Scripts/webkitpy/layout_tests/port/chromium_port_testcase.py:
        (ChromiumPortTestCase.TestAndroidPort.__init__):
        (ChromiumPortTestCase.test_default_configuration):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase):
        (PortTestCase.test_driver_cmd_line):
        (PortTestCase.test_expectations_ordering):
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase._check_that_all_ports_are_available):
        * Scripts/webkitpy/style/checkers/python.py:
        (Pylinter):
        * Scripts/webkitpy/tool/commands/gardenomatic.py:
        (GardenOMatic.__init__):
        * Scripts/webkitpy/tool/commands/queues.py:
        (CommitQueue):
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler):
        (GardeningHTTPRequestHandler.localresult):

2012-11-12  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up lint errors, part 2
        https://bugs.webkit.org/show_bug.cgi?id=102029

        Reviewed by Adam Barth.

        This cleans up the remaining lint errors in webkitpy with four exceptions:
        1) we don't lint thirdparty/ autoinstalled code, obviously
        2) there's an intentional error in the unit tests for pylint itself
        3) the implementation of webkit-patch optimize-expectations has
        an error but I think we can and should just remove that command as well.
        4) I have not yet linted the test code

        * Scripts/webkitpy/common/newstringio.py:
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.find_checkout_root):
        (SCM.will.remote_merge_base):
        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVNRepository.has_authorization_for_realm):
        (SVN.__init__):
        * Scripts/webkitpy/common/config/contributionareas.py:
        (ContributionAreas.names):
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort):
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (Builder.force_build):
        * Scripts/webkitpy/common/net/buildbot/buildbot_mock.py:
        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_posix_threading):
        (check_spacing):
        * Scripts/webkitpy/style/optparser.py:
        (ArgumentParser._create_option_parser):
        * Scripts/webkitpy/tool/commands/abstractlocalservercommand.py:
        (AbstractLocalServerCommand.execute):
        * Scripts/webkitpy/tool/commands/download.py:
        (AbstractPatchProcessingCommand):
        (AbstractPatchProcessingCommand._process_patch):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem):

2012-11-12  Dirk Pranke  <dpranke@chromium.org>

        remove 'webkit-patch optimize-expectations'
        https://bugs.webkit.org/show_bug.cgi?id=102032

        Reviewed by Adam Barth.

        Removing this command because it is totally broken (probably
        broke when I added support for multiple files in a cascade)
        and doesn't seem to do anything much useful. It certainly
        didn't actually optimize things.

        * Scripts/webkitpy/tool/commands/expectations.py: Removed.

2012-11-12  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] DRT - Update Pixel Dump Support for OpenGL renderer
        https://bugs.webkit.org/show_bug.cgi?id=101894

        Reviewed by Rob Buis.

        RIM PR 241686
        Also remove an un-needed pixel lock, and fix a klocwork error in SKIA
        code path.

        * DumpRenderTree/blackberry/PixelDumpSupportBlackBerry.cpp:
        (readPixelsUserInterfaceThread):
        (createBitmapContextFromWebView):

2012-11-12  Daniel Bates  <dbates@webkit.org>

        Perl errors from Tools/Scripts/copy-webkitlibraries-to-product-directory
        https://bugs.webkit.org/show_bug.cgi?id=101980

        Reviewed by Mark Rowe.

        Remove library libWebKitSystemInterfaceLeopard.a and libWebKitSystemInterfaceSnowLeopard.a
        from the list of libraries to copy to the specified built products directory
        as these libraries were removed from the repository in <http://trac.webkit.org/changeset/133670>.

        * Scripts/copy-webkitlibraries-to-product-directory:

2012-11-12  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: integrate pylint into check-webkit-style, part I
        https://bugs.webkit.org/show_bug.cgi?id=101285

        Reviewed by Ojan Vafai.

        This patch re-works lint-webkitpy so that the logic is pushed
        into check-webkit-style (mostly); we don't yet control which
        messages are displayed using the rules in webkitpy/style/checker.py
        (we're still using the pylintrc to suppress messages instead),
        but otherwise things work. For now we will only report pylint
        "errors", not warnings.

        * Scripts/lint-webkitpy:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checkers/python.py:
        (PythonChecker):
        (PythonChecker.check):
        (PythonChecker._check_pep8):
        (PythonChecker._check_pylint):
        (Pylinter):
        (Pylinter.__init__):
        (Pylinter.run):
        (_FilteredStringIO):
        (_FilteredStringIO.__init__):
        (_FilteredStringIO.write):
        (_FilteredStringIO._filter):
        * Scripts/webkitpy/style/checkers/python_unittest.py:
        (PythonCheckerTest.test_check):
        * Scripts/webkitpy/style/checkers/python_unittest_input.py:

2012-11-12  Dirk Pranke  <dpranke@chromium.org>

        nrwt: remove a bunch of broken chromium-specific flags
        https://bugs.webkit.org/show_bug.cgi?id=101979

        Reviewed by Tony Chang.

        There were a bunch of chromium-specific flags that used to be
        supported by NRWT (and handled and passed on to DRT) but have
        probably been broken for a long time and are currently ignored.

        This patch removes all of those flags; the rule of thumb going forward
        is that we should only add flags that affect how the python code functions.
        If a flag is just passed verbatim to DRT, the user can use --additional-drt-flag
        for that.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.setUp):

2012-11-12  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Add --device-pixel-ratio command line option to EFL MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=101930

        Reviewed by Kenneth Rohde Christiansen.

        Added --device-pixel-ratio command line option to EFL MiniBrowser which sets
        the ratio between the CSS units and device pixels when the content is unscaled.
        Option is applied for all the views created by mini browser.

        * MiniBrowser/efl/main.c:
        (window_create):
        (elm_main):

2012-11-12  Dirk Pranke  <dpranke@chromium.org>

        remove the chromium-mac-mountainlion TestExpectations file
        https://bugs.webkit.org/show_bug.cgi?id=101789

        Reviewed by Ojan Vafai.

        Nearly all of the tests have been updated for 10.8 and the remaining
        failures have been merged into the main TestExpectations file. We
        don't need this hook any more.

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.operating_system):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_path_to_image_diff):

2012-11-12  Peter Beverloo  <peter@chromium.org>

        [Chromium-Android] Restart the device's shell in root before pushing data
        https://bugs.webkit.org/show_bug.cgi?id=101944

        Reviewed by Adam Barth.

        Setting up md5sum and pushing the executable, fonts and test resources was
        unintentionally being done prior to executing the "adb root" command,
        which restarts the device's shell to be root. Since test data is still
        being pushed to /data/local/tmp, writing to which requires root access,
        devices not running as root would throw a ScriptError.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver._setup_test):

2012-11-12  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Support ResourceRequest's setTimeoutInterval
        https://bugs.webkit.org/show_bug.cgi?id=101731

        Reviewed by Simon Hausmann.

        Enable XHR_TIMEOUT now that we support the necessary feature.

        * qmake/mkspecs/features/features.pri:

2012-11-12  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed. Removing myself from the list of address to CC on EWS
        build failure; the CC turned out to just be too noisy so I'm
        tracking those in a different way.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (GtkEWS):

2012-11-12  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Can not load MHTML documents
        https://bugs.webkit.org/show_bug.cgi?id=101765

        Reviewed by Simon Hausmann.

        Enable MHTML feature.

        * qmake/mkspecs/features/features.pri:

2012-11-12  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Schedule the RTCDataChannel events to be triggered at idle state
        https://bugs.webkit.org/show_bug.cgi?id=101751

        Reviewed by Adam Barth.

        Makes the data channel mocks to be synchronous instead of asynchronous to be able to
        properly test RTCDataChannel event handling.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::sendStringData):
        (MockWebRTCPeerConnectionHandler::sendRawData):

2012-11-12  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move TestRunner implementation into WebTestRunner namespace
        https://bugs.webkit.org/show_bug.cgi?id=101837

        Reviewed by Adam Barth.

        That way, we don't get collisions when linking e.g. against chromium's
        net test support library.

        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.h:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.h:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.h:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/GamepadController.cpp:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/GamepadController.h:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestDelegate.h:
        (WebTestRunner):
        (TestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (WebTestRunner):
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TextInputController.h:
        (WebTestRunner):

2012-11-12  Zeno Albisser  <zeno@webkit.org>

        [Qt] MiniBrowser should not strongly depend on QtTestSupport.
        https://bugs.webkit.org/show_bug.cgi?id=101775

        Introducing HAVE(QTTESTSUPPORT) to allow building
        MiniBrowser without QtTestSupport.
        This is necessary when using a production build.

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):
        * qmake/mkspecs/features/configure.prf:
        * qmake/mkspecs/features/features.prf:

2012-11-11  Kangil Han  <kangil.han@samsung.com>

        Change build congratulation message in EFL
        https://bugs.webkit.org/show_bug.cgi?id=101833

        Reviewed by Gyuyoung Kim.

        EFL port is currently supporting both WK1 and WK2.
        But, build congratulation message still shows WK1(EWebLauncher) only.
        Therefore, this patch adopts WK2 reference execution(MiniBrowser) in its message.

        From 'To run EWebLauncher with this newly-built code, use the'
        to 'To run EWebLauncher/MiniBrowser with this newly-built code, use the'.

        * Scripts/build-webkit:
        (writeCongrats):
        * Scripts/webkitdirs.pm:
        (launcherName):

2012-11-09  Ryosuke Niwa  <rniwa@webkit.org>

        People with dichromacy can't tell crashes and passes on flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=101711

        Reviewed by Ojan Vafai.

        Lower the brightness of orange, and raise the brightness of green so that
        people with color blindnes can still distinguish passes and crashes easily.

        * TestResultServer/static-dashboards/flakiness_dashboard_tests.css:
        (.P):
        (.C):

2012-11-09  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Deleting all files relating to the deprecated PeerConnection00
        https://bugs.webkit.org/show_bug.cgi?id=101730

        Reviewed by Adam Barth.

        Since RTCPeerConenction has superseeded PeerConnection00 this patch removes all
        files relating to the old API.

        * DumpRenderTree/chromium/MockWebMediaStreamCenter.cpp:
        * DumpRenderTree/chromium/MockWebMediaStreamCenter.h:
        (MockWebMediaStreamCenter):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2012-11-09  Yael Aharon  <yael.aharon@intel.com>

        [EFL] Give the view a size in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=101770

        Reviewed by Laszlo Gombos.

        2 tests are currently failing, because they expect us to paint, but we don't paint if the view size is empty.

        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        (TestWebKitAPI):
        (TestWebKitAPI::PlatformWebView::resizeTo):

2012-11-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134068.
        http://trac.webkit.org/changeset/134068
        https://bugs.webkit.org/show_bug.cgi?id=101766

        Caused crashes on the bots. (Requested by rakuco on #webkit).

        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2012-11-09  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Bump the jhbuild Cairo version to 1.12.8
        https://bugs.webkit.org/show_bug.cgi?id=101721

        Bump the Cairo version in Jhbuild moduleset to 1.12.8. This version
        should fix multiple failures in canvas tests and also contains
        fixes for X-related crashes that occurred from the 1.12.4 version onwards.

        * gtk/jhbuild.modules:

2012-11-09  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [WTR][Cairo] Do not call paintRepaintRectOverlay() when there is no repaint rect.
        https://bugs.webkit.org/show_bug.cgi?id=101759

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Improve
        the check for an empty repaintRect -- we need to check if the
        WKArrayRef has any items. `if (repaintRect)' will return true
        regardless of whether the array is empty or not.


2012-11-09  Tor Arne Vestbø  <tor.arne.vestbo@digia.com>

        [Qt] Stop watchlist from triggering QtBuildSystem rule on DerivedSources

        Having DerivedSources.pri in the watchlist regexp was creating too much
        noise.

        Reviewed by Ossy.

        * Scripts/webkitpy/common/config/watchlist:

2012-11-09  Dominik Röttsches  <dominik.rottsches@intel.com>

        webkitpy/layouttests integration test fails if high shards/processes environment variables are used
        https://bugs.webkit.org/show_bug.cgi?id=101455

        Reviewed by Dirk Pranke.

        Updating test to disregard WEBKIT_TEST_MAX_LOCKED_SHARDS environment variable.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_max_locked_shards):

2012-11-09  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][DRT] Force a repaint before tracking repaint rects.
        https://bugs.webkit.org/show_bug.cgi?id=101743

        Reviewed by Kenneth Rohde Christiansen.

        Do like other ports and force a repaint before we start tracking
        repaints so that the pixel results generated look more in line
        with what's expected.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (displayWebView): Call DRTSupport::forceLayout() before start
        tracking repaints.

2012-11-09  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] DRT - eventSender.keyDown() needs to support pageUp, pageDown, home, end key
        https://bugs.webkit.org/show_bug.cgi?id=100937

        Reviewed by Rob Buis.

        1. Translate these keys to their corresponding BlackBerry key code.
        2. Break down a KeyChar event to a KeyDown/KeyUp pair. This is required
        because we only handle scrolling on a KeyDown event in WebPage::keyEvent()
        , and internally a KeyChar event is interpreted as a KeyDown event + a
        KeyUp event in InputHandler::handleKeyboardInput().

        Tests fixed:
        1. editing/input/scroll-viewport-page-up-down.html
        2. editing/selection/move-begin-end.html
        3. fast/forms/select-popup-pagekeys.html

        * DumpRenderTree/blackberry/EventSender.cpp:
        (keyDownCallback):

2012-11-09  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed prospective Qt/Windows build bot fix:

        Make determination of qmake mkspec work with older versions of Qt that
        still create a "mkspecs/default" directory.

        * Scripts/webkitdirs.pm:
        (qtMakeCommand):

2012-11-09  Jochen Eisinger  <jochen@chromium.org>

        [chromium] Introduce a WebTestProxy to override methods in WebViewClient for layout tests
        https://bugs.webkit.org/show_bug.cgi?id=101452

        Reviewed by Adam Barth.

        The WebTestProxy is template, so it can derive from an implementation
        of the WebViewClient interface. That way, WebTestProxy can hook into
        individual methods of the WebViewClient and forward all the rest to the
        actual implementation.

        To demonstrate how I want to use this, I moved the
        postAccessibilityNotification method from WebViewHost to WebTestProxy.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h: Added.
        (WebKit):
        (WebTestRunner):
        (WebTestProxyBase):
        (WebTestProxy):
        (WebTestRunner::WebTestProxy::WebTestProxy):
        (WebTestRunner::WebTestProxy::~WebTestProxy):
        (WebTestRunner::WebTestProxy::postAccessibilityNotification):
        * DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp: Added.
        (WebTestRunner):
        (WebTestRunner::WebTestProxyBase::WebTestProxyBase):
        (WebTestRunner::WebTestProxyBase::~WebTestProxyBase):
        (WebTestRunner::WebTestProxyBase::setInterfaces):
        (WebTestRunner::WebTestProxyBase::setDelegate):
        (WebTestRunner::WebTestProxyBase::doPostAccessibilityNotification):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::createNewWindow):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-11-09  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Build with MSVC fails to use nmake instead of make
        https://bugs.webkit.org/show_bug.cgi?id=98645

        Reviewed by Tor Arne Vestbø.

        Don't rely on the "default" mkspec but instead query the target
        mkspec variable from qmake to find the right qmake.conf.

        * Scripts/webkitdirs.pm:
        (qtMakeCommand):

2012-11-08  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL] about:blank should display the blank page
        https://bugs.webkit.org/show_bug.cgi?id=101566

        Reviewed by Laszlo Gombos.

        Add a check to return early without prepending http:// scheme, if the
        URL is 'about:blank'.

        * EWebLauncher/url_utils.c:
        (url_from_user_input):

2012-11-08  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add proper support for fullscreen API to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=101615

        Reviewed by Kenneth Rohde Christiansen.

        Implement fullscreen API support in MiniBrowser. When entering
        fullscreen a popup is shown to notify the user that something
        is displayed in fullscreen and to advertise that the Escape
        key can be used to exit fullscreen. This behavior is according
        to specification.

        * MiniBrowser/efl/main.c:
        (on_key_down):
        (on_fullscreen_accept):
        (on_fullscreen_deny):
        (on_fullscreen_enter):
        (on_fullscreen_exit):
        (window_create):

2012-11-08  Slavomir Kaslev  <skaslev@google.com>

        [Chromium] DumpRenderTree fix for canvas in software compositing
        https://bugs.webkit.org/show_bug.cgi?id=101509

        Reviewed by Adrienne Walker.

        Don't use accelerated canvas 2d when in software compositing mode.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):

2012-11-08  Jakob Petsovits  <jpetsovits@rim.com>

        [BlackBerry] Rework the API to use document coordinates
        https://bugs.webkit.org/show_bug.cgi?id=101608
        RIM PR 173292

        Reviewed by Adam Treat.

        Adapt to changed WebPage API.
        See Source/WebKit/blackberry/ChangeLog for details.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::DumpRenderTree):
        (BlackBerry::WebKit::DumpRenderTree::resetToConsistentStateBeforeTesting):

2012-11-08  Yael Aharon  <yael.aharon@intel.com>

        [EFL] Turn on WTF_USE_TILED_BACKING_STORE by default
        https://bugs.webkit.org/show_bug.cgi?id=101526

        Reviewed by Kenneth Rohde Christiansen.

        Turn on WTF_USE_TILED_BACKING_STORE for EFL port.

        * Scripts/webkitperl/FeatureList.pm:

2012-11-08  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix build with MSVC 2012 and Angle
        https://bugs.webkit.org/show_bug.cgi?id=101588

        Reviewed by Tor Arne Vestbø.

        Angle includes STL's <memory> header file, which with MSVC 2012 includes stdint.h. MSVC 2012
        does ship stdint.h, but it's lacking other headers such as inttypes.h.

        So for the rest of WebKit we have to continue to use our own versions of these files from
        JavaScriptCore/os-win32. But for Angle we are just including a shipped STL header file (memory)
        and so it's up to the compiler to make that work, i.e. using the stdint.h it ships.

        This patch moves the addition of JavaScriptCore/os-win32 out of default_post.prf, so that it
        doesn't apply to each and every target anymore. In particular it won't apply to Angle anymore,
        because its presence causes a build issue where due to the addition of os-win32/ we end up
        including our own stdint.h but are lacking WTF/ to be in the include search path (which our own
        stdint.h requires). So out of default_post.prf and into WTF.pri, our own wrappers are now only
        used where WTF is also needed, and since os-win32/stdint.h depends on wtf/Platform.h, it seems
        like a logical location.

        * qmake/mkspecs/features/default_post.prf:

2012-11-08  Dominik Röttsches  <dominik.rottsches@intel.com>

        Unreviewed, rolling out r133859.
        http://trac.webkit.org/changeset/133859
        https://bugs.webkit.org/show_bug.cgi?id=101526

        Breaks EFL bots test execution.

        * Scripts/webkitperl/FeatureList.pm:

2012-11-08  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Reduce the number of clean builds
        https://bugs.webkit.org/show_bug.cgi?id=100844

        Reviewed by Tor Arne Vestbø.

        A change in any Qt project file shouldn't trigger clean
        build always, but only if the incremental build failed.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-11-08  Kangil Han  <kangil.han@samsung.com>

        [EFL][MiniBrowser] Add encoding detector option.
        https://bugs.webkit.org/show_bug.cgi?id=100931

        Reviewed by Gyuyoung Kim.

        Add a runtime option to enable/disable encoding detector.

        * MiniBrowser/efl/main.c:
        (window_create):
        (elm_main):

2012-11-08  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] DumpRenderTree does not honor the shouldDumpPixels boolean argument of dumpAsText
        https://bugs.webkit.org/show_bug.cgi?id=101485

        Reviewed by Csaba Osztrogonác.

        [Qt] DumpRenderTree does not honor the shouldDumpPixels boolean argument of dumpAsText

        Support dumpAsText(true) which means we should not dump a render tree
        but should dump pixels. All other platforms already support it.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::reset):
        (TestRunner::dumpAsText):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner::shouldDumpPixels):
        (TestRunner):

2012-11-08  Yael Aharon  <yael.aharon@intel.com>

        [EFL] Turn on WTF_USE_TILED_BACKING_STORE by default
        https://bugs.webkit.org/show_bug.cgi?id=101526

        Reviewed by Kenneth Rohde Christiansen.

        Turn on WTF_USE_TILED_BACKING_STORE for EFL port.

        * Scripts/webkitperl/FeatureList.pm:

2012-11-07  Csaba Osztrogonác  <ossy@webkit.org>

        Make wait-for-SVN-server.py accept empty string as revision
        https://bugs.webkit.org/show_bug.cgi?id=98014

        Reviewed by Dirk Pranke.

        * BuildSlaveSupport/wait-for-SVN-server.py:
        (waitForSVNRevision):

2012-11-07  Dirk Pranke  <dpranke@chromium.org>

        garden-o-matic should handle concurrent requests
        https://bugs.webkit.org/show_bug.cgi?id=101407

        Reviewed by Ojan Vafai.

        Garden-o-Matic is implemented on top of the BaseHttpServer
        python library, which implements a single-threaded (one request at
        a time) server. This means that we can only rebaseline one test at
        a time, and when using a local results file, even fetching the results
        for diffs is single-threaded.

        Mixing in the ThreadingMixin enables concurrent requests (subject
        to the global python interpreter lock). Given that we're doing all
        of the work in webkit-patch subprocesses, I think this is safe.

        Of course, it may not be safe to do some of the subprocesses in
        parallel (e.g., rollout), but I think as long as we don't issue
        commands that touch overlapping sets of files things should be fine.
        The file locking over modifying testexpectations should keep that
        from being corrupted.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPServer):
        (GardeningHTTPRequestHandler):

2012-11-07  Andreas Kling  <akling@apple.com>

        Remove build-webkit dependency on Java SDK for Apple Mac WebKit.
        <http://webkit.org/b/101492>

        Reviewed by Anders Carlsson.

        Don't check for a Java SDK before building the Apple Mac port. It's no longer needed for
        the build after the Java bridge was removed.

        * Scripts/build-webkit:
        (cMakeArgsFromFeatures):

2012-11-07  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Allow client to override setWindowFrame() / getWindowFrame()
        https://bugs.webkit.org/show_bug.cgi?id=101496

        Reviewed by Kenneth Rohde Christiansen.

        Provide implementation for on_window_geometry_get() / on_window_geometry_set()
        smart functions that interact with the elm_win widget.

        * MiniBrowser/efl/main.c:
        (on_window_geometry_get):
        (on_window_geometry_set):
        (window_create):

2012-11-07  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2][AC] API tests crash
        https://bugs.webkit.org/show_bug.cgi?id=101480

        Reviewed by Kenneth Rohde Christiansen.

        When AC is enabled, 8 API tests are crashing. We need to properly set the evas engine for these tests.

        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::initEcoreEvas):

2012-11-07  Peter Beverloo  <peter@chromium.org>

        Don't show the Android tester in garden-o-matic yet
        https://bugs.webkit.org/show_bug.cgi?id=101476

        Reviewed by Adam Barth.

        The Android tester just started running layout tests, and doesn't upload its
        results yet. Don't show it for now. This exception will be removed once it
        has a baseline of greenness.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        (.):

2012-11-07  Balazs Kelemen  <kbalazs@webkit.org>

        WebKitTestRunner flakily hangs when running pixel tests on Qt
        https://bugs.webkit.org/show_bug.cgi?id=100686

        Reviewed by Csaba Osztrogonác.

        Make WebKitTestRunner harden against the situation when the coordinated
        graphics rendering synchronisation fails. If we time out when waiting
        for the forced repaint to finish it usually a symptom of the synchronisation
        has been broken. In this case all other tests will fail with the same error.
        The underlying problem is not yet known. Ths patch make us report this situation
        as web process unresponsiveness, so the test harness will kill us and launch
        a new instance. This will make our pixel test bot usable while it should not limit
        us debugging the underlying bug.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::run):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::dumpWebProcessUnresponsiveness):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:
        (TestInvocation): Introduce new members to hold our state
        that was local to invoke() so far.
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2012-11-07  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Open link in this window action
        https://bugs.webkit.org/show_bug.cgi?id=101226

        Reviewed by Simon Hausmann.

        Populates the context-menu with the new action when the default action is to open in a new window.

        * QtTestBrowser/webview.cpp:
        (createContextMenu):

2012-11-07  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Add ewk_settings_preferred_minimum_contents_width_get/set API
        https://bugs.webkit.org/show_bug.cgi?id=101467

        Reviewed by Kenneth Rohde Christiansen.

        Added ewk_settings_preferred_minimum_contents_width_get/set API which is used for setting/getting
        of default minimum contents width for non viewport meta element sites.
        Set default minimum contents width to '0' for MiniBrowser as it should behave like desktop browser.

        * MiniBrowser/efl/main.c:
        (window_create):

2012-11-07  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Add EFL to garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=101444

        Reviewed by Kenneth Rohde Christiansen.

        Added the EFL bots running layout tests to the garden-o-matic report
        page. We are skipping here the bot that just builds WebKit EFL to make
        the data fetching faster.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        (.):

2012-11-07  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Make EWK classes Ewk_Objects
        https://bugs.webkit.org/show_bug.cgi?id=101057

        Reviewed by Kenneth Rohde Christiansen.

        Now all the existing EWK classes share common Ewk_Object ref/unref API.

        * MiniBrowser/efl/main.c:
        (close_file_picker):
        (on_file_chooser_request):

2012-11-07  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed. Add Qt EWS bots to the watchers list.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (QtEWS):
        (QtWK2EWS):

2012-11-07  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        WebKitTestRunner needs to turn on 'setContinuousSpellCheckingEnabled'
        https://bugs.webkit.org/show_bug.cgi?id=93611

        Reviewed by Gyuyoung Kim.

        WebKitTestRunner enables spelling feature to pass the layout tests from editing/spelling.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        Enables spelling by WebKit2 C API.

2012-11-07  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL] Switch the efl-linux-slave-2 to Wk2 Release
        https://bugs.webkit.org/show_bug.cgi?id=101345

        Reviewed by Gyuyoung Kim.

        Switching efl-linux-slave-2 to Wk2 Release.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2012-11-07  Christophe Dumez  <christophe.dumez@intel.com>

        Add replaceWithLiteral() method to WTF::String
        https://bugs.webkit.org/show_bug.cgi?id=101257

        Reviewed by Benjamin Poulain.

        Add API tests for String::replaceWithLiteral() and corresponding
        StringImpl methods.

        * TestWebKitAPI/CMakeLists.txt: Add WTFString API tests to CMake.
        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI):
        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST):

2012-11-07  Oswald Buddenhagen <oswald.buddenhagen@nokia.com>

        [Qt] Fix build of modules depending on QtWebKit when using prefix
        https://bugs.webkit.org/show_bug.cgi?id=101437

        Reviewed by Simon Hausmann.

        Remove setting of MODULE_QMAKE_OUTDIR from here, it's been moved to .qmake.conf.

        * qmake/mkspecs/features/default_pre.prf:

2012-11-06  Dan Beam  <dbeam@chromium.org>

        Enable REQUEST_AUTOCOMPLETE for chromium port
        https://bugs.webkit.org/show_bug.cgi?id=101376

        Reviewed by Adam Barth.

        This patch enables the feature flag REQUEST_AUTOCOMPLETE in WebKit/chromium only to allow web authors to start to use
        HTMLFormElement#requestAutocomplete as the chrome-side work progresses further.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

        Enables the requestAutocomplete runtime feature flag during tests.

2012-11-06  KyungTae Kim  <ktf.kim@samsung.com>

        [WK2][EFL] Add shortcut for setting a pagination mode on Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=100301

        Reviewed by Gyuyoung Kim.

        Setting pagination modes is for a paginated view - left to right / right to left / top to bottom / bottom to top.
        Assign a shortcut "F7" to set pagination modes for tests.

        * MiniBrowser/efl/main.c:
        (on_key_down):

2012-11-06  KyungTae Kim  <ktf.kim@samsung.com>

        [EFL][EWebLauncher] Use Ctrl +/-  to zoom in EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=100207

        Reviewed by Gyuyoung Kim.

        Use "Ctrl -" instead of "F7" to zoom out, and use "Ctrl +" instead of "F8" to zoom in, 
        and use "Ctrl 0" to set to default zoom level.
        They are more common shortcuts on usual browsers.

        * EWebLauncher/main.c:
        (on_key_down):

2012-11-06  Oliver Hunt  <oliver@apple.com>

        Don't warn about RefPtr* parameters
        https://bugs.webkit.org/show_bug.cgi?id=101403

        Reviewed by Gavin Barraclough.

        RefPtr<>* is a valid parameter type.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_function_definition_and_pass_ptr):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (PassPtrTest.test_ref_ptr_parameter_value):

2012-11-06  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [WTR] Reset EventSender before running each test.
        https://bugs.webkit.org/show_bug.cgi?id=101353

        Reviewed by Simon Fraser.

        Contrary to what was done to at least some ports in DumpRenderTree,
        EventSender did not currently reset its values in WTR. This caused
        flakiness if a test such as editing/selection/fake-doubleclick.html was
        run twice in a row, since the click count was not reset across each
        run.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController): Do not create m_eventSenderProxy
        in the constructor anymore, it is created in
        resetStateToConsistentValues now.
        (WTR::TestController::resetStateToConsistentValues): Recreate
        m_eventSenderProxy every time this method is run.
        * WebKitTestRunner/TestController.h: Make m_eventSenderProxy an OwnPtr
        and guard it with a platform #ifdef.
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::~EventSenderProxy): Add an empty
        implementation.
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::~EventSenderProxy): Ditto.
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::~EventSenderProxy): Ditto.

2012-11-06  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Refactor Ewk_Auth_Request, Ewk_Url_Scheme_Request and Ewk_Download_Job to be Ewk_Objects
        https://bugs.webkit.org/show_bug.cgi?id=101383

        Reviewed by Kenneth Rohde Christiansen.

        Ewk_Auth_Request, Ewk_Url_Scheme_Request and Ewk_Download_Job are Ewk_Objects now.

        * MiniBrowser/efl/main.c:
        (auth_popup_close):
        (on_authentication_request):

2012-11-06  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Remove the valgrind issue with MockWebRTCPeerConnectionHandler
        https://bugs.webkit.org/show_bug.cgi?id=101336

        Reviewed by Andreas Kling.

        This patch changes the delete to delete [] to match the new[].

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:

2012-11-06  Mihai Balan  <mibalan@adobe.com>

        Add Adobe's bug tracker to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=101338

        Reviewed by Kentaro Hara.

        Adding Adobe's bug tracker mailing list to committers.py
        to enable its inclusion in the autocomplete list.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-06  Sami Kyostila  <skyostil@chromium.org>

        [chromium] Enable fixed position compositing on Android DRT
        https://bugs.webkit.org/show_bug.cgi?id=100263

        Reviewed by James Robinson.

        Chrome on Android forces composited mode for every page and creates
        stacking contexts and graphics layers for fixed positioned elements.
        Change the DumpRenderTree settings to match this.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setAcceleratedCompositingForFixedPositionEnabled):
        (TestShell):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.additional_drt_flag):

2012-11-06  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][WTR] EventSender: Get rid of the WTRMouseButton enum.
        https://bugs.webkit.org/show_bug.cgi?id=101340

        Reviewed by Kenneth Rohde Christiansen.

        Get rid of an enum which was basically a duplicate of the
        WKEventMouseButton one in the shared API.

        The only difference is that it also had a case for a 4th mouse
        button that we treat in a special way in evasMouseButton() now.

        * WebKitTestRunner/EventSenderProxy.h:
        (EventSenderProxy):
        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp:
        (WTR::evasMouseButton):
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::leapForward):

2012-11-06  Jussi Kukkonen  <jussi.kukkonen@intel.com>

        [EFL][WK2] Minibrowser forgets http variables when url includes ampersand
        https://bugs.webkit.org/show_bug.cgi?id=101061

        Reviewed by Kenneth Rohde Christiansen.

        Elementary entry only returns 'markup' text, meaning ampersands
        in a url will become "&amp;". Use elm_entry_markup_to_utf8() and
        elm_entry_utf8_to_markup() when interacting with the entry.

        * MiniBrowser/efl/main.c:
        (on_url_changed):
        (on_url_bar_activated):

2012-11-06  Balazs Kelemen  <kbalazs@webkit.org>

        DumpRenderTree should have --pixel-tests option again
        https://bugs.webkit.org/show_bug.cgi?id=98648

        Reviewed by Dirk Pranke.

        Add back the --pixel-tests command line option to DumpRenderTree.
        It was removed r124581 because tools don't use it after that patch.
        However, it turned out that it is useful for debugging and working
        with pixel tests.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (parseCommandLineOptions):
        (runTest):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeGlobalsFromCommandLineOptions):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions):
        (runTest):
        * DumpRenderTree/qt/DumpRenderTreeMain.cpp:
        (isOption):
        (printUsage):
        (main):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::processLine):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (WebCore::DumpRenderTree::setShouldDumpPixelsForAllTests):
        (DumpRenderTree):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        (dllLauncherEntryPoint):
        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (runTest):
        (MyApp::OnInit):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestController.h:
        (TestController):

2012-11-05  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch rebaseline*: fix typo for --results-directory
        https://bugs.webkit.org/show_bug.cgi?id=101295

        Reviewed by Ojan Vafai.

        Had --results_directory instead of --results-directory in both the
        code and the unit test.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractParallelRebaselineCommand._rebaseline_commands):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineJson.test_results_directory):

2012-11-05  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch rebaseline*: fix handling of local file urls
        https://bugs.webkit.org/show_bug.cgi?id=101296

        Reviewed by Ojan Vafai.

        When using --results-directory, we need to make sure we're converting
        paths to file:/// urls for urllib to work correctly. Also, this
        patch reworks the unit tests to get better coverage (of the execute()
        command) and reduce copy/pasting of mock options.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._rebaseline_test_and_update_expectations):
        (RebaselineTest.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineTest.setUp):
        (test_rebaseline_updates_expectations_file):
        (test_rebaseline_does_not_include_overrides):
        (test_rebaseline_test_with_results_directory):
        (test_rebaseline_test_internal_with_move_overwritten_baselines_to):

2012-11-05  Kenneth Russell  <kbr@google.com>

        Added secondary email address and IRC nick.
        https://bugs.webkit.org/show_bug.cgi?id=101290

        Unreviewed change to committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-05  Glenn Adams  <glenn@skynav.com>

        Add IRC alias for Glenn Adams
        https://bugs.webkit.org/show_bug.cgi?id=101262

        Reviewed by Eric Seidel.

        Add IRC alias for Glenn Adams.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-05  Dima Gorbik  <dgorbik@apple.com>

        Back out controversial changes from Bug 98665.
        https://bugs.webkit.org/show_bug.cgi?id=101244

        Reviewed by David Kilzer.

        Backing out changes from Bug 98665 until further discussions take place on rules for including Platform.h in Assertions.h.

        * DumpRenderTree/mac/MockGeolocationProvider.mm:

2012-11-05  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: lint, clean up rebaseline.py
        https://bugs.webkit.org/show_bug.cgi?id=101240

        Reviewed by Ojan Vafai.

        Miscellaneous cleanup of lint errors and warnings.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractRebaseliningCommand):
        (RebaselineTest._test_root):
        (OptimizeBaselines._optimize_baseline):
        (OptimizeBaselines.execute):
        (AnalyzeBaselines.__init__):
        (AbstractParallelRebaselineCommand):
        (AbstractParallelRebaselineCommand._builders_to_fetch_from):
        (AbstractParallelRebaselineCommand._files_to_add):
        (AbstractParallelRebaselineCommand._rebaseline):
        (RebaselineExpectations.__init__):
        (Rebaseline.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (_BaseTestCase.setUp):
        (TestAnalyzeBaselines.setUp):

2012-11-05  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch optimize-baselines should take a --platform arg
        https://bugs.webkit.org/show_bug.cgi?id=97623

        Reviewed by Ojan Vafai.

        So that we can optionally limit/control which platforms' results
        are affected.

        This patch adds --platform to analyze-baselines as well.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        (_baseline_search_hypergraph):
        (BaselineOptimizer.__init__):
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        (TestBaselineOptimizer.__init__):
        (BaselineOptimizerTest.test_move_baselines):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (OptimizeBaselines.__init__):
        (OptimizeBaselines.execute):
        (AnalyzeBaselines.__init__):
        (AnalyzeBaselines.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestAnalyzeBaselines.test_default):
        (TestAnalyzeBaselines.test_missing_baselines):

2012-11-05  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch rebaseline-expectations should take a --platform arg
        https://bugs.webkit.org/show_bug.cgi?id=97621

        Reviewed by Ojan Vafai.

        So that we can limit which platforms we attempt to rebaseline;
        this can reduce the noise the command produces if some ports
        have errors or warnings in their TestExpectations files and/or
        help produce more predictable results.

        In testing this patch, I realized that the rebaseline-in-parallel
        commands (rebaseline-json, rebaseline-expectations, etc.) can
        cause multiple rebaseline-test-internal commands to attempt to
        modify the TestExpectations files concurrently, and that we needed
        to lock the files to prevent corruption; it would be nice if
        we can split the updating-the-expectations-files out separately
        from updating the filesystem (much like we do with the scm updates)
        to avoid this concurrency.

        * Scripts/webkitpy/common/system/file_lock_mock.py: Added.
        (MockFileLock):
        (MockFileLock.__init__):
        (MockFileLock.acquire_lock):
        (MockFileLock.release_lock):
        * Scripts/webkitpy/common/system/systemhost.py:
        (SystemHost.copy_current_environment):
        (SystemHost):
        (SystemHost.make_file_lock):
        * Scripts/webkitpy/common/system/systemhost_mock.py:
        (MockSystemHost.copy_current_environment):
        (MockSystemHost):
        (MockSystemHost.make_file_lock):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._update_expectations_file):
        (RebaselineExpectations.__init__):
        (RebaselineExpectations._add_tests_to_rebaseline_for_port):
        (RebaselineExpectations.execute):

2012-11-05  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up options for specifying multiple platforms at once
        https://bugs.webkit.org/show_bug.cgi?id=101140

        Reviewed by Ojan Vafai.

        This patch reworks how we display the help strings for --platform
        options and how we filter out platforms matching a glob. This will
        be useful as I add patches to ensure that all the webkit-patch
        commands are using --platform consistently to filter ports.

        There should be no functional changes resulting from this patch.

        * Scripts/webkitpy/layout_tests/port/factory.py:
        (platform_options):
        (PortFactory.all_port_names):
        (PortFactory.get_from_builder_name):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintExpectations.__init__):
        (PrintBaselines.__init__):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractRebaseliningCommand):
        (RebaselineJson.__init__):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineExpectations.setUp):
        (TestRebaselineExpectations.test_rebaseline_expectations):

2012-11-05  Peter Beverloo  <peter@chromium.org>

        The layout test runner shouldn't wait for data if stdout/stderr have been closed
        https://bugs.webkit.org/show_bug.cgi?id=101233

        Reviewed by Dirk Pranke.

        Trying to read the file descriptor for the stdout or stderr pipes when DumpRenderTree
        has crashed during a Chromium Android layout test-run, which uses FIFOs for
        communication, causes the File.fileno() method to raise a ValueError. Return early
        if either of the pipes has already been closed.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess._wait_for_data_and_update_buffers_using_select):

2012-11-05  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch rebaseline is broken
        https://bugs.webkit.org/show_bug.cgi?id=101235

        Reviewed by Ojan Vafai.

        It didn't get updated to handle the change in parsing --suffixes
        properly, and the unit test didn't get updated either, masking the
        problem.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (Rebaseline._tests_to_update):
        (Rebaseline.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline):

2012-11-05  Dirk Pranke  <dpranke@chromium.org>

        lint-webkitpy doesn't autoinstall pylint properly.
        https://bugs.webkit.org/show_bug.cgi?id=101106

        Reviewed by Ojan Vafai.

        Re-land r133381 with fix; ironically, lint-webkitpy would've
        complained about the problem. Also modify pylintrc and clean up
        any other lint errors in the modified files.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._set_up_target_dir):
        (AutoInstaller):
        (AutoInstaller._make_package):
        (AutoInstaller._create_scratch_directory):
        (AutoInstaller._install):
        (AutoInstaller.install):
        * Scripts/webkitpy/pylintrc:
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._ensure_autoinstalled_dir_is_in_sys_path):
        (AutoinstallImportHook):
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_pylint):
        (AutoinstallImportHook._install_coverage):
        (AutoinstallImportHook._install_eliza):
        (AutoinstallImportHook._install_webpagereplay):
        (AutoinstallImportHook._install):
        * Scripts/webkitpy/thirdparty/__init___unittest.py:
        (ThirdpartyTest.test_import_hook.MockImportHook.__init__):
        (ThirdpartyTest.test_import_hook):
        (ThirdpartyTest.test_imports):

2012-11-05  KyungTae Kim  <ktf.kim@samsung.com>

        [EFL] Fix build warning in EWebLauncher/main.c
        https://bugs.webkit.org/show_bug.cgi?id=101197

        Reviewed by Kentaro Hara.

        Because the strp of _Ecore_Getopt_Value is char** (Ecore_Getopt.h),
        The parameter of ECORE_GETOPT_VALUE_STR should be char*

        * EWebLauncher/main.c:
        (_User_Arguments):

2012-11-05  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Add --window-size command line option to EFL MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=100942

        Reviewed by Kenneth Rohde Christiansen.

        Added window-size (-s) command line option to EFL MiniBrowser.

        * MiniBrowser/efl/main.c:
        (window_create):
        (parse_window_size):
        (elm_main):

2012-11-05  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] The icon database path should be set by the client
        https://bugs.webkit.org/show_bug.cgi?id=101182

        Reviewed by Kenneth Rohde Christiansen.

        Enable favicon database functionality in MiniBrowser since
        it is used and it is no longer enabled by default.

        * MiniBrowser/efl/main.c:
        (elm_main):

2012-11-03  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] setPlatformStrategies always asserts after r132744
        https://bugs.webkit.org/show_bug.cgi?id=100838

        Reviewed by Simon Hausmann.

        Reland with build fixes.

        Turned test runners to use the new QtTestSupport.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeMain.cpp:
        (main):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/qt/QtInitializeTestFonts.h: Removed.
        * MiniBrowser/qt/MiniBrowser.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/qttestbrowser.cpp:
        (LauncherApplication::handleUserOptions):
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * WebKitTestRunner/InjectedBundle/qt/QtInitializeTestFonts.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/qt/QtInitializeTestFonts.h: Removed.
        * WebKitTestRunner/InjectedBundle/qt/TestRunnerQt.cpp:
        (WTR::TestRunner::platformInitialize):  Removed the comment from here
        because it was just lying, apparently two times. First, it is not incorrect
        to reinitialize our font set and clear font caches, it is what the tests
        expect. Second, the use of QRawFont has nothing to do with the font cache.
        * WebKitTestRunner/Target.pri:
        * WebKitTestRunner/qt/main.cpp:
        (main):

2012-11-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133381.
        http://trac.webkit.org/changeset/133381
        https://bugs.webkit.org/show_bug.cgi?id=101161

        It made webkit-patch useless (Requested by Ossy_weekend on
        #webkit).

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._create_scratch_directory):
        (AutoInstaller._install):
        (AutoInstaller.install):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.__init__):
        (AutoinstallImportHook._install_pylint):
        (AutoinstallImportHook._install_coverage):
        (AutoinstallImportHook._install_eliza):
        (AutoinstallImportHook._install):
        * Scripts/webkitpy/thirdparty/__init___unittest.py:
        (ThirdpartyTest.test_import_hook.MockImportHook.__init__):
        (ThirdpartyTest.test_import_hook):

2012-11-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133403, r133404, and r133409.
        http://trac.webkit.org/changeset/133403
        http://trac.webkit.org/changeset/133404
        http://trac.webkit.org/changeset/133409
        https://bugs.webkit.org/show_bug.cgi?id=101158

        "Broke tests" (Requested by kbalazs on #webkit).

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeMain.cpp:
        (main):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/qt/QtInitializeTestFonts.cpp: Renamed from Source/WebCore/platform/qt/QtTestSupport.cpp.
        (WebKit):
        (WebKit::initializeTestFonts):
        * DumpRenderTree/qt/QtInitializeTestFonts.h: Copied from Tools/WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp.
        (WebKit):
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/qttestbrowser.cpp:
        (LauncherApplication::handleUserOptions):
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * WebKitTestRunner/InjectedBundle/qt/QtInitializeTestFonts.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp.
        * WebKitTestRunner/InjectedBundle/qt/QtInitializeTestFonts.h: Copied from Tools/WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp.
        * WebKitTestRunner/InjectedBundle/qt/TestRunnerQt.cpp:
        (WTR::TestRunner::platformInitialize):
        * WebKitTestRunner/Target.pri:
        * WebKitTestRunner/qt/main.cpp:
        (main):

2012-11-03  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] setPlatformStrategies always asserts after r132744
        https://bugs.webkit.org/show_bug.cgi?id=100838

        2nd unreviewed buildfix.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:

2012-11-03  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] setPlatformStrategies always asserts after r132744
        https://bugs.webkit.org/show_bug.cgi?id=100838

        Unreviewed buildfix.

        * WebKitTestRunner/Target.pri:

2012-11-03  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] setPlatformStrategies always asserts after r132744
        https://bugs.webkit.org/show_bug.cgi?id=100838

        Reviewed by Simon Hausmann.

        Reland with build fix.

        Turned test runners to use the new QtTestSupport.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeMain.cpp:
        (main):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/qt/QtInitializeTestFonts.h: Removed.
        * MiniBrowser/qt/MiniBrowser.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/qttestbrowser.cpp:
        (LauncherApplication::handleUserOptions):
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * WebKitTestRunner/InjectedBundle/qt/QtInitializeTestFonts.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/qt/QtInitializeTestFonts.h: Removed.
        * WebKitTestRunner/InjectedBundle/qt/TestRunnerQt.cpp:
        (WTR::TestRunner::platformInitialize):  Removed the comment from here
        because it was just lying, apparently two times. First, it is not incorrect
        to reinitialize our font set and clear font caches, it is what the tests
        expect. Second, the use of QRawFont has nothing to do with the font cache.
        * WebKitTestRunner/Target.pri:
        * WebKitTestRunner/qt/main.cpp:
        (main):

2012-11-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133397.
        http://trac.webkit.org/changeset/133397
        https://bugs.webkit.org/show_bug.cgi?id=101155

        "Broke Qt. No way to force the damn bots to do a clean build.
        I'm giving up." (Requested by kbalazs on #webkit).

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeMain.cpp:
        (main):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/qt/QtInitializeTestFonts.cpp: Renamed from Source/WebCore/platform/qt/QtTestSupport.cpp.
        (WebKit):
        (WebKit::initializeTestFonts):
        * DumpRenderTree/qt/QtInitializeTestFonts.h: Copied from Tools/WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp.
        (WebKit):
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/qttestbrowser.cpp:
        (LauncherApplication::handleUserOptions):
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * WebKitTestRunner/InjectedBundle/qt/QtInitializeTestFonts.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp.
        * WebKitTestRunner/InjectedBundle/qt/QtInitializeTestFonts.h: Copied from Tools/WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp.
        * WebKitTestRunner/InjectedBundle/qt/TestRunnerQt.cpp:
        (WTR::TestRunner::platformInitialize):
        * WebKitTestRunner/Target.pri:
        * WebKitTestRunner/qt/main.cpp:
        (main):

2012-11-03  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] setPlatformStrategies always asserts after r132744
        https://bugs.webkit.org/show_bug.cgi?id=100838

        Reviewed by Simon Hausmann.

        Turned test runners to use the new QtTestSupport.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeMain.cpp:
        (main):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/qttestbrowser.cpp:
        (LauncherApplication::handleUserOptions):
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * WebKitTestRunner/InjectedBundle/qt/QtInitializeTestFonts.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/qt/QtInitializeTestFonts.h: Removed.
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:
        * WebKitTestRunner/InjectedBundle/qt/TestRunnerQt.cpp:
        (WTR::TestRunner::platformInitialize): Removed the comment from here
        because it was just lying, apparently two times. First, it is not incorrect
        to reinitialize our font set and clear font caches, it is what the tests
        expect. Second, the use of QRawFont has nothing to do with the font cache.
        * WebKitTestRunner/Target.pri:
        * WebKitTestRunner/qt/main.cpp:
        (main):

2012-11-02  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch rebaseline is broken
        https://bugs.webkit.org/show_bug.cgi?id=101081

        Reviewed by Ojan Vafai.

        I broke this in r133061 and the unit tests weren't covering this
        code path. Fixed the issue and the tests. --results-directory
        doesn't make sense for either 'webkit-patch rebaseline' or
        'webkit-patch rebaseline-expectations', so we don't want to expose
        that as a command line option, but they all call a common
        _rebaseline() routine that references options.results_directory,
        so we need to set a default value.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineExpectations.execute):
        (Rebaseline.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline):
        (TestRebaseline.test_rebaseline):

2012-11-02  Dirk Pranke  <dpranke@chromium.org>

        lint-webkitpy doesn't autoinstall pylint properly
        https://bugs.webkit.org/show_bug.cgi?id=101106

        Reviewed by Ojan Vafai.

        Turns out the autoinstalling code for pylint didn't install
        pylint's dependencies, and the autoinstaller code didn't work
        using nested directories (e.g., "logilab/astng"). Fix those issues,
        clean up the autoinstaller code, and add tests to make sure everything
        imports successfully.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._create_scratch_directory):
        (AutoInstaller._install):
        (AutoInstaller.install):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._ensure_autoinstalled_dir_is_in_sys_path):
        (AutoinstallImportHook._install_pylint):
        (AutoinstallImportHook._install_coverage):
        (AutoinstallImportHook._install_eliza):
        (AutoinstallImportHook._install):
        * Scripts/webkitpy/thirdparty/__init___unittest.py:
        (ThirdpartyTest.test_import_hook.MockImportHook.__init__):
        (ThirdpartyTest.test_import_hook):
        (ThirdpartyTest.test_imports):

2012-11-02  Dirk Pranke  <dpranke@chromium.org>

        nrwt prints an awkward result message for missing results
        https://bugs.webkit.org/show_bug.cgi?id=100915

        Reviewed by Ojan Vafai.

        Completely rework how we print out the description of
        each tests's result - we now will print either "passed" or "failed",
        followed by " unexpectedly" if we weren't expecting the result,
        followed by a short description of each type of failure that happened
        (in parentheses). Also reworked the description of each type of
        failure slightly to be clearer.

        Also rework the tests to make sure we have coverage of all of the
        messages. Examples of the new output are posted as an attachment to
        the bug.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations):
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (FailureTimeout.message):
        (FailureMissingResult.message):
        (FailureTextMismatch.message):
        (FailureMissingImageHash.message):
        (FailureMissingImage.message):
        (FailureImageHashMismatch.message):
        (FailureImageHashIncorrect.message):
        (FailureReftestMismatch.message):
        (FailureReftestMismatchDidNotOccur.message):
        (FailureReftestNoImagesGenerated.message):
        (FailureMissingAudio.message):
        (FailureAudioMismatch.message):
        (FailureEarlyExit.message):
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_run_singly_actually_runs_tests):
        (MainTest.test_missing_and_unexpected_results):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer._print_result_summary_entry):
        (Printer.print_finished_test):
        (Printer._result_message):
        (Printer._print_unexpected_results):
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2012-11-02  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up logging in common.system.autoinstall
        https://bugs.webkit.org/show_bug.cgi?id=101090

        Reviewed by Ojan Vafai.

        This module logged way too much, much of which was logging that
        was either really redundant or useful only during initial development.
        This patch deletes a lot of code and tweaks the remaining log messages
        to be more useful now.

        Also, clean up a bunch of lint errors and warnings.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller.__init__):
        (AutoInstaller._write_file):
        (AutoInstaller._set_up_target_dir):
        (AutoInstaller._create_scratch_directory):
        (AutoInstaller._url_downloaded_path):
        (AutoInstaller._is_downloaded):
        (AutoInstaller._record_url_downloaded):
        (AutoInstaller._extract_targz):
        (AutoInstaller._extract_all):
        (AutoInstaller._unzip):
        (AutoInstaller._download_to_stream):
        (AutoInstaller._download):
        (AutoInstaller._install):
        (AutoInstaller.install):

2012-11-02  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch analyze-baselines output is weak
        https://bugs.webkit.org/show_bug.cgi?id=100998

        Reviewed by Ojan Vafai.

        Currently analyze-baselines prints a list of baselines that have
        the same checksum per line, but the format is hard to read;
        this patch cleans up the output to print by directory instead
        and use the same format I recently added for debugging optimize-baselines,
        then refactors the code so that we share and adds tests for
        analyze-baselines (which was untested).

        Also, I got rid of a couple of unnecessarily-hardcoded port names,
        and modified the baseline optimizer to log the current world when
        optimize fails.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        (BaselineOptimizer.read_results_by_directory):
        (BaselineOptimizer.write_by_directory):
        (BaselineOptimizer.optimize):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (OptimizeBaselines.execute):
        (AnalyzeBaselines.__init__):
        (AnalyzeBaselines._write):
        (AnalyzeBaselines._analyze_baseline):
        (AnalyzeBaselines.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (_FakeOptimizer):
        (_FakeOptimizer.read_results_by_directory):
        (TestAnalyzeBaselines):
        (TestAnalyzeBaselines.setUp):
        (TestAnalyzeBaselines.test_default):
        (TestAnalyzeBaselines.test_missing_baselines):

2012-11-02  Adam Barth  <abarth@webkit.org>

        ENABLE(UNDO_MANAGER) is disabled everywhere and is not under active development
        https://bugs.webkit.org/show_bug.cgi?id=100711

        Reviewed by Eric Seidel.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2012-11-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133303.
        http://trac.webkit.org/changeset/133303
        https://bugs.webkit.org/show_bug.cgi?id=101068

        "Broke qt wk2 build (seems like bots fails to rerun qmake if
        needed)" (Requested by kbalazs on #webkit).

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeMain.cpp:
        (main):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/qt/QtInitializeTestFonts.cpp: Renamed from Source/WebCore/platform/qt/QtTestSupport.cpp.
        (WebKit):
        (WebKit::initializeTestFonts):
        * DumpRenderTree/qt/QtInitializeTestFonts.h: Copied from Tools/WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp.
        (WebKit):
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/qttestbrowser.cpp:
        (LauncherApplication::handleUserOptions):
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * WebKitTestRunner/InjectedBundle/qt/QtInitializeTestFonts.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp.
        * WebKitTestRunner/InjectedBundle/qt/QtInitializeTestFonts.h: Copied from Tools/WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp.
        * WebKitTestRunner/InjectedBundle/qt/TestRunnerQt.cpp:
        (WTR::TestRunner::platformInitialize):
        * WebKitTestRunner/Target.pri:
        * WebKitTestRunner/qt/main.cpp:
        (main):

2012-11-02  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] setPlatformStrategies always asserts after r132744
        https://bugs.webkit.org/show_bug.cgi?id=100838

        Reviewed by Simon Hausmann.

        Turned test runners to use the new QtTestSupport.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeMain.cpp:
        (main):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/qttestbrowser.cpp:
        (LauncherApplication::handleUserOptions):
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * WebKitTestRunner/InjectedBundle/qt/QtInitializeTestFonts.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/qt/QtInitializeTestFonts.h: Removed.
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:
        * WebKitTestRunner/InjectedBundle/qt/TestRunnerQt.cpp:
        (WTR::TestRunner::platformInitialize): Removed the comment from here
        because it was just lying, apparently two times. First, it is not incorrect
        to reinitialize our font set and clear font caches, it is what the tests
        expect. Second, the use of QRawFont has nothing to do with the font cache.
        * WebKitTestRunner/Target.pri:
        * WebKitTestRunner/qt/main.cpp:
        (main):

2012-11-02  Peter Beverloo  <peter@chromium.org>

        Output Android's device status before running tests on the bots
        https://bugs.webkit.org/show_bug.cgi?id=100944

        Reviewed by Dirk Pranke.

        This adds a new step to the build master which will be run prior to the
        actual tests-suites on the Chromium Android tester, and soon the Chromium
        Android Perf bot. For each attached device, it outputs the build
        information, battery level, battery temperature and username.

        The Android tester currently is very flaky, and this will help tremendously
        in being able to figure out what's wrong with the bot.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (OutputAndroidDeviceStatus):
        (TestFactory.__init__):
        * BuildSlaveSupport/chromium/output-android-device-status: Added.
        (GetAttachedDevices):
        (AndroidDeviceStatus):
        (AndroidDeviceStatus.__init__):
        (AndroidDeviceStatus._run_adb_command):
        (AndroidDeviceStatus.device_type):
        (AndroidDeviceStatus.device_build):
        (AndroidDeviceStatus.device_fingerprint):
        (AndroidDeviceStatus.battery_level):
        (AndroidDeviceStatus.battery_temperature):
        (AndroidDeviceStatus.username):
        (main):

2012-11-02  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] WTR: Make sure that eventSender.mouseDown sends a press event for the second press
        https://bugs.webkit.org/show_bug.cgi?id=101033

        Reviewed by Simon Hausmann.

        eventSender.mouseDown doesn't work properly since r133153 where
        MouseButtonDblClick events aren't interpreted as Press events anymore.
        The problem is that mouseDown sends a DblClick event instead of a Press,
        while the correct way is to send both events.

        Since QQuickWebView isn't doing anything with DblClick events anymore,
        simply send Press events all the time and let WebCore figure out
        where the double clicks are.

        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::updateClickCountForButton):
        (WTR::EventSenderProxy::mouseDown):

2012-11-02  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add HTTP authentication support to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=100953

        Reviewed by Kenneth Rohde Christiansen.

        Add HTTP authentication support to MiniBrowser. An authentication
        dialog now pops up to ask the user for credentials whenever
        a Web site requires authentication.

        * MiniBrowser/efl/main.c:
        (auth_popup_close):
        (on_auth_cancel):
        (on_auth_ok):
        (on_authentication_request):
        (window_create):

2012-11-01  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: do not call checkCountedObject with wrong pointers
        https://bugs.webkit.org/show_bug.cgi?id=100958

        Reviewed by Alexander Pavlov.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp: test that if there
        if there is class A derived from classes B and C and we have pointer B* to an
        object of class A then MemoryInstrumentationClient::checkoutCountedObject won't
        be called for B* but only for A*

        Also MemoryInstrumentation implementation used in the test was refactored to
        allow passing client as a parameter. The client implementation was extracted into
        a top-level class MemoryInstrumentationTestClient.

2012-11-01  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make File Chooser dialog modal in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=100962

        Reviewed by Gyuyoung Kim.

        Make File Chooser dialog modal in MiniBrowser and make
        sure it is closed and freed when its parent window is
        closed.

        * MiniBrowser/efl/main.c:
        (close_file_picker):
        (on_filepicker_parent_deletion):
        (on_file_chooser_request):

2012-11-01  Seonae Kim  <sunaeluv.kim@samsung.com>

        [EFL][DRT] Support Geolocation
        https://bugs.webkit.org/show_bug.cgi?id=97427

        Reviewed by Gyuyoung Kim. 

        Implement methods to use GeolocationClientMock in DumpRenderTree.
        This client attaches to the page whenever a view is created.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::setMockGeolocationPosition):
        (TestRunner::setMockGeolocationPositionUnavailableError):
        (TestRunner::setGeolocationPermission):
        (TestRunner::numberOfPendingGeolocationPermissionRequests):

2012-11-01  Ryosuke Niwa  <rniwa@webkit.org>

        Remove tests no longer needed after r133229.

        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPerfTestFactory.test_inspector_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_collect_tests_with_skipped_list):

2012-11-01  Nico Weber  <thakis@chromium.org>

        [chromium] Try to find ninja if it's not in the path already
        https://bugs.webkit.org/show_bug.cgi?id=100988

        Reviewed by Ryosuke Niwa.

        Similar to the gclient detection logic in update-webkit-chromium

        * Scripts/webkitdirs.pm:
        (buildChromiumNinja):

2012-11-01  Eric Seidel  <eric@webkit.org>

        Add Glenn Adams to the Contributor list
        https://bugs.webkit.org/show_bug.cgi?id=100982

        Reviewed by Adam Barth.

        I CC him enough on bugs it would help me to have him listed here.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-01  Jer Noble  <jer.noble@apple.com>

        Add Python-LLDB support for WTF::Vector types.
        https://bugs.webkit.org/show_bug.cgi?id=100980

        Reviewed by Anders Carlsson.

        Add a synthetic child provider for WTF::Vector types.

        * lldb/lldb_webkit.py:
        (__lldb_init_module): Add both the summary and synthetic providers for WTF::Vector
        (WTFVector_SummaryProvider): Wrapper around WTFVectorProvider
        (WTFVectorProvider):
        (WTFVectorProvider.__init__):
        (WTFVectorProvider.num_children): Return m_size+2 children to account for synthesized children.
        (WTFVectorProvider.get_child_index): Synthesize child indexes for each entry in the Vector.
        (WTFVectorProvider.get_child_at_index): Synthesize children for each entry in the Vector.
        (WTFVectorProvider.update): Retrieve state from the underlying Vector.
        (WTFVectorProvider.has_children): Vectors always have children.

2012-11-01  Zoltan Horvath  <zoltan@webkit.org>

        Remove PageLoad directory entry from PerformanceTests pattern_map
        https://bugs.webkit.org/show_bug.cgi?id=100989

        Reviewed by Ryosuke Niwa.

        Since we removed PageLoad directory from PerformanceTests we don't need this entry in pattern_map.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTestFactory):

2012-11-01  Jer Noble  <jer.noble@apple.com>

        Add LLDB-Python scripts to support WebKit data types.
        https://bugs.webkit.org/show_bug.cgi?id=100898

        Reviewed by Anders Carlsson.

        Add Summary providers for common WebKit string types.

        * lldb/lldb_webkit.py: Added.
        (__lldb_init_module): Register these providers with the debugger.
        (WTFString_SummaryProvider): Wrapper around WTFStringProvider.
        (WTFStringImpl_SummaryProvider): Wrapper around WTFStringImplProvider.
        (WTFAtomicString_SummaryProvider): Ditto.
        (guess_string_length): Walk through the string looking for a null-byte(s).
        (ustring_to_string): Walk through the string, extracting two-byte values, and concatenate them.
        (lstring_to_string): Walk through the string, extracting byte values, and concatenate them.
        (WTFStringImplProvider): 
        (WTFStringImplProvider.__init__):
        (WTFStringImplProvider.get_length): Extract the m_length variable.
        (WTFStringImplProvider.get_data8): Extract the m_data8 variable.
        (WTFStringImplProvider.get_data16): Extract the m_data16 variable.
        (WTFStringImplProvider.to_string): Pass the appropriate data variable to {u,l}string_to_string.
        (WTFStringImplProvider.is_8bit): Check the m_hashAndFlags variable.
        (WTFStringProvider):
        (WTFStringProvider.__init__):
        (WTFStringProvider.stringimpl): Extract the m_impl variable.
        (WTFStringProvider.get_length): Pass through to WTFStringImplProvider.
        (WTFStringProvider.to_string): Ditto.

2012-11-01  Peter Beverloo  <peter@chromium.org>

        [Chromium-Android] Apache doesn't properly clean up ipc semaphores after a layout test run
        https://bugs.webkit.org/show_bug.cgi?id=100950

        Reviewed by Dirk Pranke.

        When a test run would fail to complete due to an exception in one of
        the workers, the HTTP server wouldn't get a chance to gracefully shut
        down. This caused too much IPC semaphores to be left on the server,
        causing Apache to fail to start in subsequent runs.

        By unifying the Android-specific code with other ports, we no longer
        fail to call the ChromiumPort/Base setup_test_run() and clean_up_test_run()
        methods either. Furthermore, the number_of_servers argument for starting
        the HTTP server is now available as well.

        Because not all tests require an HTTP server, it's not guaranteed that
        it will be started. Android depends on this, so add a new method to Port
        and override it for Android: requires_http_server().

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.to.requires_http_server):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_dont_require_http_server):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.requires_http_server):
        (ChromiumAndroidPort.start_http_server):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidPortTest.test_must_require_http_server):

2012-11-01  Adam Roben  <aroben@webkit.org>

        Crash beneath WKRelease after failed load in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=100954

        Reviewed by Sam Weinig.

        There were just some simple retain/release bugs.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController updateTextFieldFromURL:]):
        (-[WK2BrowserWindowController updateProvisionalURLForFrame:]):
        Don't try to release null URLs.

        (-[WK2BrowserWindowController updateCommittedURLForFrame:]): Don't
        release a URL for which we don't have ownership.

2012-10-31  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Fix editing/text-iterator/findString-expected.html fail
        https://bugs.webkit.org/show_bug.cgi?id=100902

        Reviewed by Yong Li.

        PR 210039

        Fix the test my using the Page::findString method instead of our own in-page searcher.
        This also syncs some of the changes we did regarding String usage.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::dumpFramesAsText):
        (BlackBerry::WebKit::dumpHistoryItem):
        (BlackBerry::WebKit::dumpBackForwardListForWebView):
        (BlackBerry::WebKit::DumpRenderTree::dump):
        (BlackBerry::WebKit::DumpRenderTree::didFinishDocumentLoadForFrame):
        (BlackBerry::WebKit::DumpRenderTree::didReceiveTitleForFrame):
        (BlackBerry::WebKit::DumpRenderTree::runJavaScriptAlert):
        * DumpRenderTree/blackberry/DumpRenderTreeBlackBerry.h:
        (DumpRenderTree):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        (TestRunner::setMockGeolocationError):
        (TestRunner::layerTreeAsText):
        (TestRunner::findString):
        (TestRunner::setStorageDatabaseIdleInterval):

2012-11-01  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add File Chooser dialog support to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=100822

        Reviewed by Kenneth Rohde Christiansen.

        Add very basic file picker dialog to MiniBrowser so that
        the user can select a file from the file system when
        clicking an input element of type "file".

        * MiniBrowser/efl/main.c:
        (close_file_picker):
        (on_filepicker_deletion):
        (on_fileselector_done):
        (on_file_chooser_request):
        (window_create):

2012-11-01  Yael Aharon  <yael.aharon@intel.com>

        Unreviewed. Change my email address.

        * Scripts/webkitpy/common/config/committers.py:

2012-11-01  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Double clicks/taps aren't passed down to the page
        https://bugs.webkit.org/show_bug.cgi?id=100949

        Reviewed by Kenneth Rohde Christiansen.

        Touch mocking shouldn't transform double click events as well,
        this adds an extra touch update between clicks which prevents
        double-tap detection from triggering on web pages.

        Tested on the mobile version of Google maps.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):

2012-10-31  Dirk Pranke  <dpranke@chromium.org>

        NRWT: lint warnings don't show up by default
        https://bugs.webkit.org/show_bug.cgi?id=100914

        Reviewed by Ryosuke Niwa.

        NRWT wasn't printing any warnings if you had errors in your
        TestExpectations files; this means you would only notice this
        with --lint-test-files, which is probably bad. I'm not sure
        when this requested, but perhaps when we changed the
        warnings to not be fatal if you weren't linting the files.

        Now they're still not fatal, but at least we print them.

        Also fix one warning message where we were printing the test name twice.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationsModel._already_seen_better_match):
        (TestExpectations._report_warnings):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (MiscTests.test_parse_warnings_are_logged_if_not_in_lint_mode(self): Added.

2012-10-31  Terry Anderson  <tdanderson@chromium.org>

        Missing stderr output when using run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=100709

        Reviewed by Dirk Pranke.

        Appends #EOF to the end of the stderr output only at the end of a test,
        not possibly part-way through. This will allow all of the stderr output 
        to appear on the results page after running run-webkit-tests.

        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (TestEventPrinter::handleTextFooter):
        (TestEventPrinter::handleTestFooter):

2012-10-30  Mark Lam  <mark.lam@apple.com>

        A JSC printf (support for %J+s and %b).
        https://bugs.webkit.org/show_bug.cgi?id=100566.

        Reviewed by Michael Saboff.

        Added regression tests for VMInspector::fprintf() sprintf() and snprintf().

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/JavaScriptCore: Added.
        * TestWebKitAPI/Tests/JavaScriptCore/VMInspector.cpp: Added.

2012-10-31  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Added viewport at-rule to the CSS parser and tokenizer
        https://bugs.webkit.org/show_bug.cgi?id=95961

        Reviewed by Kenneth Rohde Christiansen.

        Enable CSS Device Adaptation by default on EFL.

        * Scripts/webkitperl/FeatureList.pm:

2012-10-31  Terry Anderson  <tdanderson@chromium.org>

        [touchadjustment] touch-links-two-finger-tap test pass incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=100619

        Reviewed by Antonio Gomes.

        Store the touch area when sending a GestureTwoFingerTap event.

        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::gestureEvent):

2012-10-31  Dirk Pranke  <dpranke@chromium.org>

        nrwt is not killing stuck DRTs on chromium win
        https://bugs.webkit.org/show_bug.cgi?id=100886

        Unreviewed, build fix.

        In the original implementation of NRWT for Chromium, we used
        to assume that DRT would always manage to exit on its own and
        so NRWT wouldn't attempt to kill DRT if it was stuck (this was the
        "hung worker" problem, and meant that if DRT hung, NRWT would hang).

        Eventually, we merged the chromium code with the other ports and
        now will always try to shut down DRTs if a test times out, but as
        part of that merge we left in a code path where we wouldn't
        shut the driver down on windows. This was resulting in stray
        DRTs being left around, and NRWT sometimes not exiting cleanly as
        a result.

        No unit tests added because this was a windows-only code path (hence
        hard to test) and that is now gone.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess.stop):

2012-10-31  Ami Fischman  <fischman@chromium.org>

        [chromium] DRT and WTR should clear the cache between tests
        https://bugs.webkit.org/show_bug.cgi?id=93195

        Reviewed by Tony Chang.

        This change makes chromium DRT match the GTK+, Qt, and EFL ports.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController): added a WebCache::clear() call to achieve the goal of the bug.

2012-10-31  Dirk Pranke  <dpranke@chromium.org>

        Fix typos introduced in r133061.
        Unreviewed, build fix.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:
        (ReflectionHandler._serve_file):

2012-10-31  Dirk Pranke  <dpranke@chromium.org>

        garden-o-matic should work for local results
        https://bugs.webkit.org/show_bug.cgi?id=100805

        Reviewed by Adam Barth.

        This is the next step in making garden-o-matic replace
        'webkit-patch rebaseline-server' and be able to deal with local
        results. garden-o-matic now accepts a '--results-directory' option
        that will point to a layout-test-results directory. At the moment
        this will only work if you are also filtering to a single bot/
        platform at a time (we can't handle multiple bots' worth of local
        results, but that is a logical next step).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:
        * Scripts/webkitpy/tool/commands/gardenomatic.py:
        (GardenOMatic.__init__):
        (GardenOMatic.execute):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractRebaseliningCommand):
        (RebaselineTest.__init__):
        (RebaselineTest._rebaseline_test):
        (RebaselineTest._rebaseline_test_and_update_expectations):
        (RebaselineTest.execute):
        (AbstractParallelRebaselineCommand._rebaseline_commands):
        (AbstractParallelRebaselineCommand._rebaseline):
        (RebaselineJson.__init__):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (_BaseTestCase):
        (test_rebaseline_updates_expectations_file):
        (test_rebaseline_does_not_include_overrides):
        (test_rebaseline_test):
        (test_rebaseline_test_and_print_scm_changes):
        (test_rebaseline_and_copy_test):
        (test_rebaseline_and_copy_test_no_existing_result):
        (test_rebaseline_and_copy_test_with_lion_result):
        (test_rebaseline_and_copy_no_overwrite_test):
        (test_rebaseline_test_internal_with_move_overwritten_baselines_to):
        (TestRebaselineJson.test_rebaseline_all):
        (TestRebaselineJson.test_rebaseline_debug):
        (TestRebaselineJson.test_move_overwritten):
        (TestRebaselineJson.test_no_optimize):
        (TestRebaselineExpectations.test_rebaseline_expectations):
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler.rebaselineall):
        (GardeningHTTPRequestHandler):
        (GardeningHTTPRequestHandler.localresult):
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:
        (ReflectionHandler.do_POST):
        (ReflectionHandler):
        (ReflectionHandler.do_HEAD):

2012-10-31  Dirk Pranke  <dpranke@chromium.org>

        garden-o-matic should support gardening a single port and specifying how to deal with overwritten baselines
        https://bugs.webkit.org/show_bug.cgi?id=100563

        Reviewed by Ojan Vafai.

        This patch starts the process of making garden-o-matic more useful for
        bringing up a single new port in two ways. The goal is to fully
        obsolete webkit-patch rebaseline-server.
        
        First, it adds support for the --platform arguments to garden-o-matic
        (so that the UI will default to the right cluster of bots), and if the platform arg
        specifies a single bot, filters the results down to just that bot.

        Second, it adds support for --move-overwritten-baselines and changes
        the implementation of the move_overwritten_baselines setting in builders.py
        so that it is only used if this flag is provided.

        Future patches will make it possible to use local copies of the build
        results (rather than going to the bots) and other optimizations to make
        it faster to review lots of changes on a single bot.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        (.):
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/tool/commands/gardenomatic.py:
        (GardenOMatic):
        (GardenOMatic.execute):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractRebaseliningCommand):
        (AbstractRebaseliningCommand.__init__):
        (RebaselineTest):
        (OptimizeBaselines):
        (AnalyzeBaselines):
        (AbstractParallelRebaselineCommand):
        (AbstractParallelRebaselineCommand._rebaseline_commands):
        (AbstractParallelRebaselineCommand._rebaseline):
        (Rebaseline.__init__):
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPServer.url):
        (GardeningHTTPRequestHandler.rebaselineall):

2012-10-31  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: fix running modules and classes on the command line
        https://bugs.webkit.org/show_bug.cgi?id=100787

        Reviewed by Eric Seidel.

        Handling modules and classes are arguments on the command line
        was broken due to the way we were parsing test names looking for
        parallel and serial tests.

        * Scripts/webkitpy/test/main.py:
        (Tester._test_names):
        (_Loader):
        * Scripts/webkitpy/test/main_unittest.py:
        (TestStubs.integration_test_empty):
        (TestStubs):
        (TestStubs.serial_test_empty):
        (TestStubs.serial_integration_test_empty):
        (TesterTest._find_test_names):
        (TesterTest):
        (TesterTest.test_individual_names_are_not_run_twice):
        (TesterTest.test_integration_tests_are_not_found_by_default):
        (TesterTest.test_integration_tests_are_found):

2012-10-31  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: refactor common command line arguments for --platform, rebaseline commands
        https://bugs.webkit.org/show_bug.cgi?id=100800

        Reviewed by Ojan Vafai.

        This change shuffles around how we share command-line options
        between NRWT and the various webkit-patch rebaselining commands.

        There are no functional changes in this patch but it should make
        things clearer and will be useful in a couple of upcoming patches.

        * Scripts/webkitpy/layout_tests/port/__init__.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (platform_options):
        (configuration_options):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintExpectations.__init__):
        (PrintBaselines.__init__):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractRebaseliningCommand):
        (AbstractRebaseliningCommand.__init__):
        (RebaselineTest.__init__):
        (OptimizeBaselines.__init__):
        (AnalyzeBaselines.__init__):
        (AbstractParallelRebaselineCommand):
        (RebaselineJson.__init__):
        (RebaselineExpectations.__init__):
        (Rebaseline.__init__):

2012-10-31  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [NRWT] Xvfb driver is leaking application cache files
        https://bugs.webkit.org/show_bug.cgi?id=100864

        Reviewed by Kenneth Rohde Christiansen.

        Application Cache looks for XDG_CACHE_HOME which is now
        prepended with DUMPRENDERTREE_TEMP and cleaned up when
        the test worker finishes his job.

        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        (XvfbDriver._start):

2012-10-31  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] DRT doesn't clean up after itself
        https://bugs.webkit.org/show_bug.cgi?id=100346

        Reviewed by Kenneth Rohde Christiansen.

        The test driver exports an environment variable DUMPRENDERTREE_TEMP
        which is used by both DRT and WTR as the folder for storing icons,
        databases, application cache, etc, overriding the default XDG_* path.

        We don't need to create these folders because in fact, they are never
        used and also never cleaned. Things created inside DUMPRENDERTREE_TEMP
        are automatically removed after the test run.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort.setup_environ_for_server):

2012-10-31  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [WTR] WebKitTestRunner is not cleaning up the icon database
        https://bugs.webkit.org/show_bug.cgi?id=100678

        Reviewed by Kenneth Rohde Christiansen.

        The icon database was not being set to the temporary folder created for
        the test runner by the test driver, which is removed automatically
        after the run.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2012-10-31  Mike West  <mkwst@chromium.org>

        Script run from an isolated world should bypass a page's CSP.
        https://bugs.webkit.org/show_bug.cgi?id=97398

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::setIsolatedWorldContentSecurityPolicy):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
            Adding a mechanism to set the Content Security Policy for an
            isolated world to Chromium's testRunner.

2012-10-31  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][DRT] EventSender requires contextClick implementation
        https://bugs.webkit.org/show_bug.cgi?id=86091

        Reviewed by Gyuyoung Kim.

        Add contextClick for DumpRenderTreeEventSender basing on WebKit GTK
        implementation.

        * DumpRenderTree/efl/EventSender.cpp:
        (getMenuItemTitleCallback):
        (setMenuItemTitleCallback):
        (menuItemClickCallback):
        (contextClickCallback):

2012-10-30  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [WTR] Memory leaks in TestWebKitAPI::didReceiveMessageFromInjectedBundle()
        https://bugs.webkit.org/show_bug.cgi?id=100770

        Reviewed by Sam Weinig.

        Adopt strings returned by WKStringCreateWithUTF8CString() in
        didReceiveMessageFromInjectedBundle() to avoid memory leaks.

        * TestWebKitAPI/Tests/WebKit2/WillSendSubmitEvent.cpp:
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):

2012-10-30  Kangil Han  <kangil.han@samsung.com>

        Fix broken python unit test
        https://bugs.webkit.org/show_bug.cgi?id=100810

        Reviewed by Dirk Pranke.

        BUG 100755 has broken python unit test, e.g. assertion fail, since it modified baseline path.
        Therefore, this patch fixes it.

        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineTest.test_baseline_directory):

2012-10-30  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch rebaseline*: add more helpful logging
        https://bugs.webkit.org/show_bug.cgi?id=100562

        Reviewed by Ojan Vafai.

        This change rewires the garden-o-matic and rebaseline* commands
        in webkit-patch so that --verbose propagates through all the
        subcommand invocations properly, and cleans up the logging so
        that you can actually tell what is happening. For now, we
        leave all of the logging at the logging.DEBUG level, which
        means that it gets mixed in will all the other debug logging noise
        and is harder to read, but we'll fix that in subsequent patches.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        (BaselineOptimizer._platform):
        (BaselineOptimizer._move_baselines):
        (BaselineOptimizer.optimize):
        * Scripts/webkitpy/tool/commands/gardenomatic.py:
        (GardenOMatic.execute):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._copy_existing_baseline):
        (RebaselineTest._rebaseline_test):
        (OptimizeBaselines._optimize_baseline):
        (OptimizeBaselines.execute):
        (AbstractParallelRebaselineCommand._run_webkit_patch):
        (AbstractParallelRebaselineCommand._rebaseline_commands):
        (AbstractParallelRebaselineCommand._files_to_add):
        (AbstractParallelRebaselineCommand._optimize_baselines):
        (AbstractParallelRebaselineCommand._rebaseline):
        (RebaselineExpectations._add_tests_to_rebaseline_for_port):
        (Rebaseline.execute):
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPServer.__init__):
        (GardeningHTTPRequestHandler):
        (GardeningHTTPRequestHandler._run_webkit_patch):
        (GardeningHTTPRequestHandler.rebaselineall):

2012-10-30  Dirk Pranke  <dpranke@chromium.org>

        clean up tests for webkit-patch rebaseline* commands
        https://bugs.webkit.org/show_bug.cgi?id=100793

        Reviewed by Ojan Vafai.

        The tests in rebaseline_unittest.py had a lot of code cloning,
        and many of the tests tested whether things passed or failed by
        looking at what was logged instead of what was actually done;
        as a result the tests were kinda hard to understand and harder to
        maintain.

        This patch adds hooks to MockWeb() and MockExecutive() so we can
        directly see which URLs were fetched and calls invoked, and
        then reworks all of the unit tests to be easier to follow and
        maintain and not sensitive to the logging. Also there were a
        couple of tests that were redundant.

        There are no functional changes in this patch, and I verified that
        the coverage remains the same.

        * Scripts/webkitpy/common/net/web_mock.py:
        (MockWeb.__init__):
        (MockWeb.get_binary):
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.__init__):
        (MockExecutive.run_command):
        (MockExecutive.kill_all):
        (MockExecutive):
        (MockExecutive.kill_process):
        (MockExecutive.popen):
        (MockExecutive.run_in_parallel):
        (MockExecutive2):
        (MockExecutive2.__init__):
        (MockExecutive2.run_command):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (_BaseTestCase):
        (_BaseTestCase.setUp):
        (_BaseTestCase._expand):
        (_BaseTestCase._read):
        (_BaseTestCase._write):
        (_BaseTestCase._zero_out_test_expectations):
        (TestRebaselineTest):
        (TestRebaselineTest.test_baseline_directory):
        (TestRebaselineTest.test_rebaseline_updates_expectations_file_noop):
        (test_rebaseline_updates_expectations_file):
        (test_rebaseline_does_not_include_overrides):
        (test_rebaseline_test):
        (test_rebaseline_test_and_print_scm_changes):
        (test_rebaseline_and_copy_test):
        (test_rebaseline_and_copy_test_no_existing_result):
        (test_rebaseline_and_copy_test_with_lion_result):
        (test_rebaseline_and_copy_no_overwrite_test):
        (test_rebaseline_test_internal_with_move_overwritten_baselines_to):
        (TestRebaselineJson):
        (TestRebaselineJson.setUp):
        (TestRebaselineJson.tearDown):
        (TestRebaselineJson.test_rebaseline_all):
        (TestRebaselineJson.test_rebaseline_debug):
        (TestRebaseline):
        (TestRebaseline.test_tests_to_update):
        (TestRebaseline.test_rebaseline):
        (TestRebaseline.test_rebaseline.rebaseline_stub):
        (TestRebaselineExpectations):
        (TestRebaselineExpectations.setUp):
        (TestRebaselineExpectations.test_rebaseline_expectations):
        (TestRebaselineExpectations.test_rebaseline_expectations_noop):
        (TestRebaselineExpectations.disabled_test_overrides_are_included_correctly):

2012-10-30  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: fix import of coverage so that it works in a clean install
        https://bugs.webkit.org/show_bug.cgi?id=100780

        Reviewed by Tony Chang.

        The coverage module is written so that the parent directory needs
        to be in PYTHONPATH; work around that ...

        * Scripts/webkitpy/test/main_unittest.py:
        (TestStubs.test_empty):
        (TesterTest.test_individual_names_are_not_run_twice):
        (TesterTest):
        (TesterTest.integration_test_coverage_works):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_coverage):

2012-10-30  Anders Carlsson  <andersca@apple.com>

        Another build fix.

        * TestWebKitAPI/Tests/WebKit2/WebArchive.cpp:
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):

2012-10-30  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseScrollBy):

2012-10-30  Rick Byers  <rbyers@chromium.org>

        [touchadjustment] touch-links-longpress tests passes incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=96810

        Reviewed by Antonio Gomes.

        Add support for suppling width/height information for longpress
        gesture (as for other gestures like tapDown) for the purposes
        of touch adjustment.

        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::gestureEvent):

2012-10-29  Anders Carlsson  <andersca@apple.com>

        Build WebKit as C++11 on Mac
        https://bugs.webkit.org/show_bug.cgi?id=100720

        Reviewed by Daniel Bates.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        Add CLANG_CXX_LANGUAGE_STANDARD=gnu++0x.

2012-10-30  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][JHBUILD] Update EFL libraries to v1.7.1 stable release
        https://bugs.webkit.org/show_bug.cgi?id=100759

        Reviewed by Kenneth Rohde Christiansen.

        Update Bump EFL libraries to the new stable release (v1.7.1)
        in JHBuild to pull the latest bug fixes.

        * efl/jhbuild.modules:

2012-10-29  Anders Carlsson  <andersca@apple.com>

        String::createCFString should return a RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=100419

        Reviewed by Andreas Kling.

        Update callers of String::createCFString.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundlePageMac.mm:
        (WTR::InjectedBundlePage::platformDidStartProvisionalLoadForFrame):

2012-10-30  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][WTR] WebKitTestRunner needs testRunner.queueLoadHTMLString
        https://bugs.webkit.org/show_bug.cgi?id=100747

        Reviewed by Kenneth Rohde Christiansen.

        Added testRunner.queueLoadHTMLString implementation.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::queueLoadHTMLString):
        (WTR):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::queueLoadHTMLString):
        (WTR):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/WorkQueueManager.cpp:
        (WTR::WorkQueueManager::queueLoadHTMLString):
        (WTR):
        * WebKitTestRunner/WorkQueueManager.h:
        (WorkQueueManager):

2012-10-30  Kangil Han  <kangil.han@samsung.com>

        [EFL] Baseline search path should consider both WK1 and WK2 on layout test.
        https://bugs.webkit.org/show_bug.cgi?id=100755

        Reviewed by Gyuyoung Kim.

        Current implementation doesn't consider WK1 case in baseline search path.
        Therefore, this patch fixes it.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort.default_baseline_search_path):

2012-10-30  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [QT][DRT] Remove unneeded testRunner.setMediaType() implementation
        https://bugs.webkit.org/show_bug.cgi?id=100740

        Reviewed by Kenneth Rohde Christiansen.

        Removed unneeded testRunner.setMediaType() implementation, as tests use
        cross-platform window.internals.settings.setMediaTypeOverride instead.

        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner):

2012-10-30  Kangil Han  <kangil.han@samsung.com>

        [EFL][DRT] Bitmap should show whole view area.
        https://bugs.webkit.org/show_bug.cgi?id=100642

        Reviewed by Gyuyoung Kim.

        css sticky position test cases haven't been passed even though implementation has been landed by BUG 95182.
        This is because current create bitmap implementation refers to geometry position that considers scroll movement even though
        paint does it. Therefore, this patch always reflects current view size and remove duplicated graphic operation to dump correct bitmap image.

        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:
        (createBitmapContextFromWebView):

2012-10-30  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL] Refactor tooltip callback signal in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=100571

        Reviewed by Gyuyoung Kim.

        Separate tooltip callback signal into 'tooltip,text,set'
        and 'tooltip,text,unset' to be consistent with WebKit2.

        * EWebLauncher/main.c:
        (on_tooltip_text_set):
        (on_tooltip_text_unset):
        (browserCreate):

2012-10-29  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r132819.
        http://trac.webkit.org/changeset/132819
        https://bugs.webkit.org/show_bug.cgi?id=100388

        It made layout testing 40% slower and storage tests assert

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (DumpRenderTree):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::reset):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner):

2012-10-29  Jochen Eisinger  <jochen@chromium.org>

        [chromium] TestRunner needs to compile ChromiumCurrentTime and ChromiumThreading in components build
        https://bugs.webkit.org/show_bug.cgi?id=100658

        Reviewed by Tony Chang.

        Before, this was compiled into DumpRenderTree. I also dropped the
        include_dirs and dependencies block as TestRunner already has them.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-10-29  Takashi Sakamoto  <tasak@google.com>

        Unreviewed. Adding myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2012-10-28  Mark Rowe  <mrowe@apple.com>

        Simplify Xcode configuration settings that used to vary between OS versions.

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

2012-10-28  Mark Rowe  <mrowe@apple.com>

        Remove references to unsupported OS and Xcode versions.

        Reviewed by Anders Carlsson.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/CompilerVersion.xcconfig: Removed.
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/CompilerVersion.xcconfig: Removed.
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/CompilerVersion.xcconfig: Removed.
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/CompilerVersion.xcconfig: Removed.
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2012-10-26  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: change non-verbose log format for webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=100561

        Reviewed by Ojan Vafai.

        Logging the module name and the log level is annoying and nearly useless.
        For starters, this change removes that unless you are doing verbose/
        debug logging. In the future we should split out the concepts of
        verbose and debug logging (like we did in test-webkitpy and
        run-webkit-tests) so that you could get this in debug logging.

        * Scripts/webkitpy/common/system/logutils.py:
        (_default_handlers):
        (configure_logging):
        * Scripts/webkitpy/common/system/logutils_unittest.py:
        (ConfigureLoggingTest.test_info_message):
        (ConfigureLoggingTest):
        (ConfigureLoggingTest.test_debug_message):
        (ConfigureLoggingTest.test_two_messages):
        (ConfigureLoggingVerboseTest):
        (ConfigureLoggingVerboseTest._logging_level):
        (ConfigureLoggingVerboseTest.test_info_message):
        (ConfigureLoggingVerboseTest.test_debug_message):
        (ConfigureLoggingCustomLevelTest.test_logged_message):

2012-10-29  Christophe Dumez  <christophe.dumez@intel.com>

        [CMAKE] Add TestNetscapePlugIn/Tests/NPRuntimeCallsWithNullNPP.cpp to CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=100681

        Reviewed by Anders Carlsson.

        Add TestNetscapePlugIn/Tests/NPRuntimeCallsWithNullNPP.cpp to CMake since
        it is needed by plugins/npruntime/npruntime-calls-with-null-npp.html
        layout test.

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:

2012-10-29  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Flaky security tests
        https://bugs.webkit.org/show_bug.cgi?id=100388

        Reviewed by Jocelyn Turcotte.

        Disable text dumping and load a blank URL to ensure the documentLoader is cleared 
        before we start dumping text for the new page. Otherwise messages from the old page
        may end up in the text output of the new test.

        This matches what WebKitTestRunner does, and reuses the Qt code for waiting for flag.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::runUntil):
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        (WebCore::DumpRenderTree::finishedResetting):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (DumpRenderTree):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::resetDumping):
        (TestRunner::reset):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner):

2012-10-29  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] Enable Shadow DOM at runtime if compiled with SHADOW_DOM support
        https://bugs.webkit.org/show_bug.cgi?id=100668

        Reviewed by Kenneth Rohde Christiansen.

        Enable Shadow DOM functionality at run time in WebKitTestRunner
        if compiled with SHADOW_DOM flag set. This is needed to run
        the Shadow DOM layout tests.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):

2012-10-29  Yael Aharon  <yael.aharon@intel.com>

        [EFL][AC] Fix bugs preventing us from running layout tests with AC turned on
        https://bugs.webkit.org/show_bug.cgi?id=100598

        Reviewed by Kenneth Rohde Christiansen.

        Make sure to use opengl_x11 engine when AC is turned on and X11 is in use.
        We cannot create a gl context otherwise.

        * MiniBrowser/efl/main.c:
        (elm_main):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::initEcoreEvas):
        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (initEcoreEvas):
        * EWebLauncher/efl/main.c:
        (windowCreate):

2012-10-29  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][WK2] REGRESSION(r132342): fast/events/frame-tab-focus.html fails
        https://bugs.webkit.org/show_bug.cgi?id=100646

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::focus): Improve the check we perform to
        decide whether the focus should be taken out of the view before
        focusing it again so that we do not unnecessarily unfocus it and
        cause blur/focus events to be triggered. Instead of just verifying
        if the Evas_Object representing the view has focus, use the WK C
        API to check that the currently focused frame is not the main
        frame.

2012-10-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132782.
        http://trac.webkit.org/changeset/132782
        https://bugs.webkit.org/show_bug.cgi?id=100653

        It made 400+ tests fail and 180 tests flakey on Qt (Requested
        by Ossy on #webkit).

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):

2012-10-29  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Flaky security tests
        https://bugs.webkit.org/show_bug.cgi?id=100388

        Reviewed by Jocelyn Turcotte.

        Disable text output and load a blank URL to ensure the documentLoader is cleared
        before we start dumping text for the new page. Otherwise messages from the old page
        may end up in the text output of the new test.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):

2012-10-29  Jochen Eisinger  <jochen@chromium.org>

        [chromium] remove remaining usages of webkit_support from the TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=100344

        Reviewed by Adam Barth.

        The most important part is to not rely on calling out to gdk/X11 to
        translate keycodes to hardware keycodes, as this is not possible inside
        the sandbox.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (WebKit):
        (webkit_support):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.h:
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::doDragDrop):
        (WebTestRunner::EventSender::updateClickCountForButton):
        (WebTestRunner::EventSender::mouseDown):
        (WebTestRunner::EventSender::mouseUp):
        (WebTestRunner::EventSender::mouseMoveTo):
        (WebTestRunner::EventSender::keyDown):
        (WebTestRunner::EventSender::replaySavedEvents):
        (WebTestRunner::EventSender::contextClick):
        (WebTestRunner::EventSender::beginDragWithFiles):
        (WebTestRunner::EventSender::sendCurrentTouchEvent):
        (WebTestRunner::EventSender::handleMouseWheel):
        (WebTestRunner::EventSender::gestureEvent):
        (WebTestRunner::EventSender::gestureFlingCancel):
        (WebTestRunner::EventSender::gestureFlingStart):
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp: Added.
        (WebTestRunner):
        (WebTestRunner::NativeKeyCodeForWindowsKeyCode):
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h.
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestDelegate.h:
        (TestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestInterfaces::Internal):
        (WebTestRunner::WebTestInterfaces::Internal::getCurrentTimeInMillisecond):
        (WebTestRunner):
        (WebTestRunner::WebTestInterfaces::Internal::getAbsoluteWebStringFromUTF8Path):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::getCurrentTimeInMillisecond):
        (WebViewHost::getAbsoluteWebStringFromUTF8Path):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-10-29  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        Unreviewed. Add jonathan.dong@torchmobile.com.cn as a committer.
        https://bugs.webkit.org/show_bug.cgi?id=100629

        * Scripts/webkitpy/common/config/committers.py:

2012-10-27  Dan Bernstein  <mitz@apple.com>

        REAL_PLATFORM_NAME build setting is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=100587

        Reviewed by Mark Rowe.

        Removed the definition of REAL_PLATFORM_NAME and replaced references to it with references
        to PLATFORM_NAME.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/CompilerVersion.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/CompilerVersion.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/CompilerVersion.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/CompilerVersion.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

2012-10-26  Anders Carlsson  <andersca@apple.com>

        Crash when making NPRuntime calls with a null NPP pointer
        https://bugs.webkit.org/show_bug.cgi?id=100569

        Reviewed by Darin Adler.

        Add new NPRuntimeCallsWithNullNPP plug-in test.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPN_ReleaseVariantValue):
        (PluginTest::netscapeFuncs):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        (PluginTest):
        * DumpRenderTree/TestNetscapePlugIn/Tests/NPRuntimeCallsWithNullNPP.cpp: Added.
        (NPRuntimeCallsWithNullNPP):
        (NPRuntimeCallsWithNullNPP::NPRuntimeCallsWithNullNPP):
        (NPRuntimeCallsWithNullNPP::NPP_New):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:

2012-10-26  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Notification should be sent when accessibilityIsIgnored changes
        https://bugs.webkit.org/show_bug.cgi?id=99547

        Reviewed by Chris Fleizach.

        Add additional accessibility notifications.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::postAccessibilityNotification):

2012-10-25  Roger Fong  <roger_fong@apple.com>

        Get rid of (<X%) failing output for old-run-webkit-tests.
        https://bugs.webkit.org/show_bug.cgi?id=100447

        Reviewed by Jessie Berlin.

        Not a particularly useful piece of information. It's pretty much never above 1%.
        new-run-webkit-tests does not output this either.

        * Scripts/old-run-webkit-tests:
        (printResults):

2012-10-26  Xianzhu Wang  <wangxianzhu@chromium.org>

        Build bot gives incorrect link to EWS build failure
        https://bugs.webkit.org/show_bug.cgi?id=100436

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        (MockCommitQueue.__init__):
        (MockCommitQueue.command_failed): Return incremental failure_status_id
        (CommitQueueTaskTest.test_red_tree_patch_rejection): Check failure_status_id
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (PatchAnalysisTask._test_patch): Use the failure_status_id of test with patch when test without patch fails and test with patch has unexpected failures.

2012-10-26  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        webkitpy: Pass the `Listen' Apache directive from webkitpy, not the httpd.conf files.
        https://bugs.webkit.org/show_bug.cgi?id=98602

        Reviewed by Dirk Pranke.

        Unify all the different `Listen' directives present in the several
        httpd.conf files we have in LayoutTests/http/conf. For one, we
        were already passing `Listen 127.0.0.1:8000' via webkitpy before,
        and opening the other ports from the conf files.

        The configuration files differed mostly in the way they handled
        IPV6 ports. Some of them did not listen to IPV6 ports because the
        systems which used them sometimes did not have IPV6 support. The
        `http_server_supports_ipv6' method has been added to Port to
        address that. cygwin, on its turn, still seems to use Apache 1.3,
        which does not support IPV6 at all; the newly-added method has a
        special case for that. Plus, perform a socket.getaddrinfo() call
        the same way Apache itself does so we are sure we only enable IPV6
        when setting that up in the httpd server is not going to fail.

        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.is_cygwin):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.baseline_version_dir):
        (Port.to.start_websocket_server):
        (Port.to):
        (Port.to.http_server_supports_ipv6):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_http_server_supports_ipv6):
        (PortTest.test_build_path):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd):
        (LayoutTestApacheHttpd.__init__):

2012-10-26  David Barton  <dbarton@mathscribe.com>

        Unreviewed. Update my IRC nickname to a registered one.

        * Scripts/webkitpy/common/config/committers.py:

2012-10-26  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix the LLInt build on Windows
        https://bugs.webkit.org/show_bug.cgi?id=97648

        Reviewed by Tor Arne Vestbø.

        Added BIN_EXTENSION variable - similar to automake - that expands to .exe as suffix for
        executable programs on Windows. Empty otherwise. Also added support for force_build_all
        to allow overriding us disabling build_all for TEMPLATE = app.

        * qmake/mkspecs/features/default_pre.prf:

2012-10-26  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] Support pixel tests for BlackBerry DRT
        https://bugs.webkit.org/show_bug.cgi?id=100210

        Reviewed by Rob Buis.

        (The following 2 files are missed in previous patch(r132582), adding them
        again.)

        * DumpRenderTree/blackberry/build: Added.
        * DumpRenderTree/blackberry/src.pro: Added.
        Adds 2 files for building ImageDiff, by Christopher Wells.

2012-10-26  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Add feature flags for CSS Device Adaptation
        https://bugs.webkit.org/show_bug.cgi?id=95960

        Reviewed by Kenneth Rohde Christiansen.

        * Scripts/webkitperl/FeatureList.pm:

2012-10-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132552.
        http://trac.webkit.org/changeset/132552
        https://bugs.webkit.org/show_bug.cgi?id=100486

        Makes typeahead tests crash in debug. (Requested by pfeldman
        on #webkit).

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DRTTestRunner.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.h:
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::doDragDrop):
        (WebTestRunner::EventSender::updateClickCountForButton):
        (WebTestRunner::EventSender::mouseDown):
        (WebTestRunner::EventSender::mouseUp):
        (WebTestRunner::EventSender::mouseMoveTo):
        (WebTestRunner::EventSender::keyDown):
        (WebTestRunner::EventSender::replaySavedEvents):
        (WebTestRunner::EventSender::contextClick):
        (WebTestRunner::EventSender::beginDragWithFiles):
        (WebTestRunner::EventSender::sendCurrentTouchEvent):
        (WebTestRunner::EventSender::handleMouseWheel):
        (WebTestRunner::EventSender::gestureEvent):
        (WebTestRunner::EventSender::gestureFlingCancel):
        (WebTestRunner::EventSender::gestureFlingStart):
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp: Removed.
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.h: Removed.
        * DumpRenderTree/chromium/TestRunner/src/TestDelegate.h:
        (TestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        (WebKit):
        (webkit_support):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestInterfaces::Internal):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-10-26  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] Support pixel tests for BlackBerry DRT
        https://bugs.webkit.org/show_bug.cgi?id=100210

        Reviewed by Rob Buis.

        The implementation is based on the patch from Christopher Wells.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::DumpRenderTree):
        (BlackBerry::WebKit::DumpRenderTree::runTest):
        (BlackBerry::WebKit::DumpRenderTree::runCurrentTest):
        (BlackBerry::WebKit::DumpRenderTree::resetToConsistentStateBeforeTesting):
        (BlackBerry::WebKit::DumpRenderTree::runTests):
        (BlackBerry::WebKit::DumpRenderTree::dump):
        * DumpRenderTree/blackberry/DumpRenderTreeBlackBerry.h:
        (DumpRenderTree):

        * DumpRenderTree/blackberry/PNGImageEncoder.cpp:
        (BGRAtoRGBA):
        (encodeBitmapToPNG):
        * DumpRenderTree/blackberry/PNGImageEncoder.h:
        The changes to PNGImageEncoder files are from master_40, patched by Tyler
        Abbott and Rob Buis.

        * DumpRenderTree/blackberry/PixelDumpSupportBlackBerry.cpp:
        (createBitmapContextFromWebView):
        (computeMD5HashStringForBitmapContext):
        (printPNG):
        (dumpBitmap):
        * DumpRenderTree/blackberry/PixelDumpSupportBlackBerry.h:
        (BitmapContext::createByAdoptingData):
        (BitmapContext::~BitmapContext):
        (BitmapContext):
        (BitmapContext::BitmapContext):

        * DumpRenderTree/blackberry/build: Added.
        * DumpRenderTree/blackberry/src.pro: Added.
        Adds 2 files for building ImageDiff, by Christopher Wells.

2012-10-25  Min Qin  <qinmin@chromium.org>

        Fix a layout test crash if a TestWebkitPlugin is put inside an iframe
        https://bugs.webkit.org/show_bug.cgi?id=100406

        Reviewed by Adam Barth.

        Resize the context with an empty rect will cause a gl_error in gles2_cmd_decoder.cc.
        Don't paint the plugin if m_rect is empty.

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (TestWebPlugin::updateGeometry):

2012-10-25  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Display tooltip in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=99322

        Reviewed by Kenneth Rohde Christiansen.

        Display tooltip in MiniBrowser using elm_object_tooltip_text_set().

        * MiniBrowser/efl/main.c:
        (on_tooltip_text_set):
        (on_tooltip_text_unset):
        (window_create):

2012-10-25  Jochen Eisinger  <jochen@chromium.org>

        [chromium] remove remaining usages of webkit_support from the TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=100344

        Reviewed by Adam Barth.

        The most important part is to not rely on calling out to gdk/X11 to
        translate keycodes to hardware keycodes, as this is not possible inside
        the sandbox.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (WebKit):
        (webkit_support):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.h:
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::doDragDrop):
        (WebTestRunner::EventSender::updateClickCountForButton):
        (WebTestRunner::EventSender::mouseDown):
        (WebTestRunner::EventSender::mouseUp):
        (WebTestRunner::EventSender::mouseMoveTo):
        (WebTestRunner::EventSender::keyDown):
        (WebTestRunner::EventSender::replaySavedEvents):
        (WebTestRunner::EventSender::contextClick):
        (WebTestRunner::EventSender::beginDragWithFiles):
        (WebTestRunner::EventSender::sendCurrentTouchEvent):
        (WebTestRunner::EventSender::handleMouseWheel):
        (WebTestRunner::EventSender::gestureEvent):
        (WebTestRunner::EventSender::gestureFlingCancel):
        (WebTestRunner::EventSender::gestureFlingStart):
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp: Added.
        (WebTestRunner):
        (WebTestRunner::NativeKeyCodeForWindowsKeyCode):
        * DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h.
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestDelegate.h:
        (TestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestInterfaces::Internal):
        (WebTestRunner::WebTestInterfaces::Internal::getCurrentTimeInMillisecond):
        (WebTestRunner):
        (WebTestRunner::WebTestInterfaces::Internal::getAbsoluteWebStringFromUTF8Path):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::getCurrentTimeInMillisecond):
        (WebViewHost::getAbsoluteWebStringFromUTF8Path):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-10-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132514.
        http://trac.webkit.org/changeset/132514
        https://bugs.webkit.org/show_bug.cgi?id=100440

        "Broke chromium content_browsertests AccessibilityAriaMenu
        AccessibilityInputRange AccessibilityListMarkers" (Requested
        by scheib on #webkit).

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::postAccessibilityNotification):

2012-10-25  Dirk Pranke  <dpranke@chromium.org>

        rwt --lint-test-files doesn't handle the cascade properly
        https://bugs.webkit.org/show_bug.cgi?id=100315

        Reviewed by Ojan Vafai.

        We were only linting the first file in each port's list of
        expectations.

        This change pushes more of the logic for linting files into
        the TestExpectations classes themselves, but it's still a bit of
        a hack. A better solution will require splitting out the actual
        parsing of the files from the TestExpectations constructor.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations):
        (TestExpectations.__init__):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (parse_exp):
        (SkippedTests.check):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (lint):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (LintTest.test_all_configurations.FakePort.__init__):
        (LintTest.test_all_configurations):
        (LintTest.test_lint_test_files__errors):
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.check_test_expectations):

2012-10-25  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed GTK gardening.

        Skipping the atspi-basic-hierarchy test case in the TestWebKitAccessibility
        WebKit2 API test since the test is currently failing.

        * Scripts/run-gtk-tests:
        (TestRunner):

2012-10-25  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Notification should be sent when accessibilityIsIgnored changes
        https://bugs.webkit.org/show_bug.cgi?id=99547

        Reviewed by Chris Fleizach.

        Add additional accessibility notifications.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::postAccessibilityNotification):

2012-10-25  Dominik Röttsches  <dominik.rottsches@intel.com>

        Conditionalize XHR timeout support
        https://bugs.webkit.org/show_bug.cgi?id=100356

        Reviewed by Adam Barth.

        Adding XHR_TIMEOUT feature in perl and qmake files.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2012-10-25  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed. Update my contact info.

        * Scripts/webkitpy/common/config/committers.py:

2012-10-25  Terry Anderson  <tdanderson@chromium.org>

        Unreviewed. Adding myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2012-10-25  Zeno Albisser  <zeno@webkit.org>

        [Qt] Adjust library name in webkitdirs.pm after r131300.
        https://bugs.webkit.org/show_bug.cgi?id=100376

        The library was renamed from QtWebKit to QtWebKitWidgets.
        run-launcher was still looking for QtWebKit.

        Reviewed by Simon Hausmann.

        * Scripts/webkitdirs.pm:
        (builtDylibPathForName):

2012-10-22  Mikhail Naganov  <mnaganov@chromium.org>

        [Chromium] Add supportMultipleWindows setting, needed for Android
        https://bugs.webkit.org/show_bug.cgi?id=99716

        Reviewed by Adam Barth.

        Add supportMultipleWindows settings for reusing the same view when
        opening popups. This is required for emulating the behavior of
        Android WebView. Adding into WebCore, as other ports might want to
        use this setting in the future.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::overridePreference):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):

2012-10-25  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] JavaScript popups are not focused when opened
        https://bugs.webkit.org/show_bug.cgi?id=100354

        Reviewed by Kenneth Rohde Christiansen.

        Move focus to the JavaScript popups when opened so that the key events
        are forwarded to the popups instead of web view.

        * MiniBrowser/efl/main.c:
        (on_javascript_alert):
        (on_javascript_confirm):
        (on_javascript_prompt):

2012-10-25  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Fix "check-inspector-strings" script and fix localized strings.
        https://bugs.webkit.org/show_bug.cgi?id=100090

        Reviewed by Vsevolod Vlasov.

        Script "check-inspector-strings" seems to be broken.
        Fixed it, refined search algorithm.

        * Scripts/check-inspector-strings: Fixed and refined.

2012-10-24  Dirk Pranke  <dpranke@chromium.org>

        nrwt: fix a couple of minor crashing issues under cygwin
        https://bugs.webkit.org/show_bug.cgi?id=100309

        Reviewed by Ojan Vafai.

        Cygwin was crashing on a null object reference and then
        an oserror in kill().

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.kill_process):
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess.stop):

2012-10-24  Dirk Pranke  <dpranke@chromium.org>

        nrwt: truncate meter lines properly on windows
        https://bugs.webkit.org/show_bug.cgi?id=100062

        Reviewed by Tony Chang.

        This change adds the code to figure out the terminal width
        on windows (it was already there for Unixen) and moves it
        to a platform-specific object.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.terminal_width):
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.total_bytes_memory):
        (MockPlatformInfo):
        (MockPlatformInfo.terminal_width):
        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.__init__):
        (MeteredStream.number_of_columns):
        (MeteredStream.flush):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.__init__):
        (Printer._test_status_line):

2012-10-24  Dirk Pranke  <dpranke@chromium.org>

        tweak debug logging in webkit-patch optimize-baselines
        https://bugs.webkit.org/show_bug.cgi?id=100294

        Reviewed by Ojan Vafai.

        This changes the logging to print out the baselines found
        (and their checksums) even when we don't do anything.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        (BaselineOptimizer.optimize):

2012-10-24  Sailesh Agrawal  <sail@chromium.org>

        Incorrect keycodes for numpad /, -, +, .
        https://bugs.webkit.org/show_bug.cgi?id=99188

        Reviewed by Tony Chang.

        Add key mappings for all numpad keys.

        * DumpRenderTree/mac/EventSendingController.mm:
        (KeyMappingEntry):
        (-[EventSendingController keyDown:withModifiers:withLocation:]): Added all numpad keys.

2012-10-24  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up references to Skipped files
        https://bugs.webkit.org/show_bug.cgi?id=100045

        Reviewed by Ojan Vafai.

        Since they are no longer used or needed ...

        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort._generate_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.skipped_layout_tests):
        (Port.expectations_files):
        (Port._wk2_port_name):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacTest.test_default_timeout_ms):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (test_expectations_files):
        (test_expectations_files.platform_dirs):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.__init__):

2012-10-24  Jochen Eisinger  <jochen@chromium.org>

        [chromium] Use include paths relative to Source/ in the TestRunner's public API
        https://bugs.webkit.org/show_bug.cgi?id=100079

        Reviewed by Adam Barth.

        For a inside-chromium build, we usually don't add the WebKit API paths
        as include paths, so including files by name only does not work.

        Eventually we might want to move to a model where all includes are
        relative to Source/, so we're using that here already now.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/chromium/TestRunner/public/WebEventSender.h:
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:

2012-10-24  Ojan Vafai  <ojan@chromium.org>

        Show an error when there are no completed builds in the past 20 runs
        https://bugs.webkit.org/show_bug.cgi?id=100266

        Reviewed by Dimitri Glazkov.

        Right now we get a cryptic JS error in the console when loading the gtk port. This at least gives an error in
        the notification stream. We should probably tweak this UI to make it so we can make
        errors in the notification stream stick out (e.g. make the text red).

        We should also consider making the number of runs to load dynamic (e.g. if 20 runs don't work,
        try 40).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js:

2012-10-24  Ian Vollick  <vollick@chromium.org>

        [chromium] Explicitly disable accelerated animations in DRT
        https://bugs.webkit.org/show_bug.cgi?id=100241

        Reviewed by Adrienne Walker.

        Disable accelerated animations by default in DRT.        

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::setAcceleratedAnimationEnabled):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):

2012-10-24  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Move the QQuickWebViewExperimental pointer to QQuickWebViewPrivate
        https://bugs.webkit.org/show_bug.cgi?id=100253

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        Use QQuickWebView::experimental rather than creating a new instance.

2012-10-24  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] run-webkit-tests writes garbage on stderr when running on Xvfb
        https://bugs.webkit.org/show_bug.cgi?id=100243

        Reviewed by Kenneth Rohde Christiansen.

        These errors generate noise on the reports and in some cases, like when
        running perf tests, makes the test fail. By using Xext, we can add a
        dummy handler to ignore these errors.

        We could have added this handler on the top level EWK API, but that
        would be intrusive and could override handlers defined by the user.

        * WebKitTestRunner/PlatformEfl.cmake:
        * WebKitTestRunner/efl/main.cpp:
        (dummyExtensionErrorHandler):
        (main):

2012-10-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the GTK+ build.

        * TestWebKitAPI/GNUmakefile.am: Add GTK_FLAGS to
        libTestWebKitAPIMain and webcore cflags to TestGtk.

2012-10-24  Zeno Albisser  <zeno@webkit.org>

        Implement GraphicsSurface for Windows.
        https://bugs.webkit.org/show_bug.cgi?id=98147

        Reviewed by Kenneth Rohde Christiansen.

        * qmake/mkspecs/features/features.prf:
                Activate GraphicsSurface on windows in case opengles2 (ANGLE)
                is available in QT_CONFIG.

2012-10-24  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][WK2] fast/repaint/delete-into-nested-block.html and fast/repaint/4776765.html are flaky
        https://bugs.webkit.org/show_bug.cgi?id=100010

        Reviewed by Kenneth Rohde Christiansen.

        Force the main view to receive focus even if Evas already
        considers it to be focused.

        It might happen that a different frame is focused by a page and
        the focus change notification does not reach Evas. When another
        test is run, the main frame is then not considered to be focused
        by WebCore, and things such as focus rings are not drawn as
        expected.

        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::focus):

2012-10-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132333.
        http://trac.webkit.org/changeset/132333
        https://bugs.webkit.org/show_bug.cgi?id=100234

        Crashes many tests on the EFL-WK2 bot. (Requested by rakuco on
        #webkit).

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::TestController::platformInitializeContext):

2012-10-24  Dongwoo Joshua Im  <dw.im@samsung.com>

        [GTK] Fix build break - undefined reference to 'gtk_init'
        https://bugs.webkit.org/show_bug.cgi?id=100221

        Unreviewed build fix.

        GTK_LIBS is needed for TestWTF.

        * TestWebKitAPI/GNUmakefile.am:

2012-10-24  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        WebKitTestRunner needs to turn on 'setContinuousSpellCheckingEnabled'
        https://bugs.webkit.org/show_bug.cgi?id=93611

        Reviewed by Hajime Morita.

        WebKitTestRunner enables spelling feature to pass the layout tests from editing/spelling.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        Enables spelling by WebKit2 C API.

        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::TestController::platformInitializeContext):
        Attaches WKTextChecker's client and sets default language for WebKit2-EFL port.

2012-10-24  Mario Sanchez Prada  <mario@webkit.org>

        [WK2] [GTK] TestWebKitAccessibility is not being run
        https://bugs.webkit.org/show_bug.cgi?id=100102

        Reviewed by Carlos Garcia Campos.

        Removed wrong early return in _start_accessibility_daemons().

        * Scripts/run-gtk-tests:
        (TestRunner._lookup_atspi2_binary): Removed wrong line.

2012-10-24  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] Plumb DRT WebkitShouldRespectImageOrientation through to page settings 
        https://bugs.webkit.org/show_bug.cgi?id=100197

        Reviewed by Kent Tamura.

        fast/images/exif-orientation.html and fast/images/exif-orientation-css.html require a DRT
        WebkitShouldRespectImageOrientation preference.  Add the chromium implementation for this
        preference and plumb it through to page settings.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::overridePreference): Update the tests WebkitShouldRespectImageOrientation
        setting in DRT prefs.
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset): Disable the preference before and after each test.
        (WebPreferences::applyTo): Apply the preference to the page settings of each test.
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):

2012-10-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] TestWebKitAPI/TestWebKit2 and TestWebKitAPI/TestGtk link to the installed libs
        https://bugs.webkit.org/show_bug.cgi?id=100134

        Reviewed by Martin Robinson.

        Do not share the LDADD variable among TestWTF, TestWebKit2 and
        TestGtk.

        * TestWebKitAPI/GNUmakefile.am:

2012-10-23  Kihong Kwon  <kihong.kwon@samsung.com>

        Unreviewed. Adding myself as committer.

        * Scripts/webkitpy/common/config/committers.py:

2012-10-23  Dan Bernstein  <mitz@apple.com>

        Tools changes for <rdar://problem/2966974> [mac] Kerning and ligatures are not enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=100188

        Reviewed by Sam Weinig.

        Disable kerning and ligatures by default when running the tests.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues): Set a value of NO for the
        WebKitKerningAndLigaturesEnabledByDefault user default.
        * WebKitTestRunner/mac/main.mm:
        (main): Register a value of NO for the WebKitKerningAndLigaturesEnabledByDefault user
        default.

2012-10-23  Simon Fraser  <simon.fraser@apple.com>

        Allow tests to run with a tile cache, and optionally dump the tile cache via layerTreeAsText()
        https://bugs.webkit.org/show_bug.cgi?id=100159

        Reviewed by Tim Horton.

        Make WebKitTestRunner use a WKView with a tile cache for tests run in a directory
        whose path includes "tiled-drawing". It does this by passing around a WKDictionary 
        of options, and if the current PlatformWebView doesn't support those options, it will
        create a new one.

        * WebKitTestRunner/PlatformWebView.h:
        (PlatformWebView): Add a WKDictionaryRef options dictionary argument.
        (WTR::PlatformWebView::viewSupportsOptions): Returns true if the view
        supports the options in the WKDictionaryRef.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Call createWebViewWithOptions() with
        no options in the normal case.
        (WTR::TestController::createWebViewWithOptions): Moved code into this fuction
        so we can call it in two places.
        (WTR::TestController::ensureViewSupportsOptions): If the current view
        doesn't support the given options, throw it away and makea  new one that does.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::shouldUseTiledDrawing): Return true if the directory contains "tiled-drawing".
        (WTR::updateTiledDrawingForCurrentTest): Tell the TestController to check whether
        the view supports the given options. No-op for non-Mac platforms.
        (WTR::TestInvocation::invoke): Call updateTiledDrawingForCurrentTest().
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView): New constructor parameter.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView):  New constructor parameter.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (-[TestRunnerWKView initWithFrame:contextRef:pageGroupRef:useTiledDrawing:]):
        (-[TestRunnerWKView _shouldUseTiledDrawingArea]): Subclass the WKView so we can return
        a custom value from this method.
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView): New constructor parameter.
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView): New constructor parameter.

2012-10-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132276.
        http://trac.webkit.org/changeset/132276
        https://bugs.webkit.org/show_bug.cgi?id=100189

        It broke the Qt-WK2 build intentionally (Requested by
        Ossy_night on #webkit).

        * WebKitTestRunner/PlatformWebView.h:
        (PlatformWebView):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        * WebKitTestRunner/TestController.h:
        (TestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR):
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2012-10-23  Martin Robinson  <mrobinson@igalia.com>

        [GTK][Soup] Implement the default authentication dialog via WebCoreSupport
        https://bugs.webkit.org/show_bug.cgi?id=99351

        Reviewed by Carlos Garcia Campos.

        We no longer need to turn off the soup authentication dialog soup feature,
        because it's not installed.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (setDefaultsToConsistentStateValuesForTesting): Don't turn off the feature any longer.

2012-10-23  Simon Fraser  <simon.fraser@apple.com>

        Allow tests to run with a tile cache, and optionally dump the tile cache via layerTreeAsText()
        https://bugs.webkit.org/show_bug.cgi?id=100159

        Reviewed by Tim Horton.

        Make WebKitTestRunner use a WKView with a tile cache for tests run in a directory
        whose path includes "tiled-drawing". It does this by passing around a WKDictionary 
        of options, and if the current PlatformWebView doesn't support those options, it will
        create a new one.

        * WebKitTestRunner/PlatformWebView.h:
        (PlatformWebView): Add a WKDictionaryRef options dictionary argument.
        (WTR::PlatformWebView::viewSupportsOptions): Returns true if the view
        supports the options in the WKDictionaryRef.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Call createWebViewWithOptions() with
        no options in the normal case.
        (WTR::TestController::createWebViewWithOptions): Moved code into this fuction
        so we can call it in two places.
        (WTR::TestController::ensureViewSupportsOptions): If the current view
        doesn't support the given options, throw it away and makea  new one that does.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::shouldUseTiledDrawing): Return true if the directory contains "tiled-drawing".
        (WTR::updateTiledDrawingForCurrentTest): Tell the TestController to check whether
        the view supports the given options. No-op for non-Mac platforms.
        (WTR::TestInvocation::invoke): Call updateTiledDrawingForCurrentTest().
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView): New constructor parameter.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView):  New constructor parameter.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (-[TestRunnerWKView initWithFrame:contextRef:pageGroupRef:useTiledDrawing:]):
        (-[TestRunnerWKView _shouldUseTiledDrawingArea]): Subclass the WKView so we can return
        a custom value from this method.
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView): New constructor parameter.
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView): New constructor parameter.

2012-10-23  David Barton  <dbarton@mathscribe.com>

        [MathML] Symbol font uses greek letters for roman ones on linux and Windows
        https://bugs.webkit.org/show_bug.cgi?id=99921

        Reviewed by Eric Seidel.

        Enable the STIXSizeOneSym font for testing.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:
        (WTR::allowedFontFamilySet):

2012-10-23  Tony Chang  <tony@chromium.org>

        [chromium] Chromium window build system does not rebuild correctly when enabling/disabling a feature
        https://bugs.webkit.org/show_bug.cgi?id=38926

        Reviewed by Eric Seidel.

        Remove hack for clobbering build when features.gypi changes. Now that
        Chromium requires VS2010 or newer, this bug has gone away.

        * Scripts/update-webkit:

2012-10-23  Jochen Eisinger  <jochen@chromium.org>

        [chromium] remove the const qualifier from WebTestDelegate::printMessage
        https://bugs.webkit.org/show_bug.cgi?id=100082

        Reviewed by Adam Barth.

        There's no reason the method should be const, and indeed for
        content_shell we want to send an IPC which is a non-const operation.

        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/TestDelegate.h:
        (TestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestInterfaces::Internal):
        (WebTestRunner::WebTestInterfaces::Internal::printMessage):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::printMessage):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-10-23  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Add support for resolution media query
        https://bugs.webkit.org/show_bug.cgi?id=99077

        Reviewed by Antti Koivisto.

        Add support for the RESOLUTION_MEDIA_QUERY feature flag.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2012-10-23  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        Adding myself to commiters.py
        https://bugs.webkit.org/show_bug.cgi?id=100122

        Unreviewed update to commiters.py.

        * Scripts/webkitpy/common/config/committers.py:

2012-10-23  Timothy Hatcher  <timothy@apple.com>

        Unreviewed watchlist change to monitor Inspector IDLs.

        * Scripts/webkitpy/common/config/watchlist:

2012-10-23  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] [WTR] WebKitTestRunner needs testRunner.queueForwardNavigation
        https://bugs.webkit.org/show_bug.cgi?id=99700

        Reviewed by Kenneth Rohde Christiansen.

        Implemented testRunner.queueForwardNavigation, made little refactoring in Work Queue
        to obviate code duplication.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::queueBackNavigation):
        (WTR):
        (WTR::InjectedBundle::queueForwardNavigation):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::queueForwardNavigation):
        (WTR):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/WorkQueueManager.cpp:
        (NavigationItem):
        (WTR::NavigationItem::NavigationItem):
        (WTR::NavigationItem::invoke):
        (WTR):
        (WTR::WorkQueueManager::queueBackNavigation):
        (WTR::WorkQueueManager::queueForwardNavigation):
        * WebKitTestRunner/WorkQueueManager.h:
        (WorkQueueManager):

2012-10-23  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed trivial Qt build fix: Fix build without USE_3D_GRAPHICS

        Disable USE_GRAPHICS_SURFACE if we don't have USE_3D_GRAPHICS because
        GraphicsSurface.h needs GraphicsContext3D.

        * qmake/mkspecs/features/features.prf:

2012-10-23  Simon Pena  <spena@igalia.com>

        Unreviewed. Adding myself as committer.

        * Scripts/webkitpy/common/config/committers.py:

2012-10-22  Jochen Eisinger  <jochen@chromium.org>

        [chromium] Move the call to RegisterIsolatedFileSystem to the WebTestDelegate interface
        https://bugs.webkit.org/show_bug.cgi?id=100048

        Reviewed by Adam Barth.

        The call needs to be done outside of the sandbox.

        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::beginDragWithFiles):
        * DumpRenderTree/chromium/TestRunner/src/TestDelegate.h:
        (TestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestInterfaces::Internal):
        (WebTestRunner::WebTestInterfaces::Internal::registerIsolatedFileSystem):
        (WebTestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::registerIsolatedFileSystem):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-10-22  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: remove unneeded debug messages from find_files()
        https://bugs.webkit.org/show_bug.cgi?id=100041

        Reviewed by Adam Barth.

        This routine gets called all the time when loading the virtual
        suites, and the debug messages were spamming me.

        * Scripts/webkitpy/common/find_files.py:
        (_normalized_find):

2012-10-22  Tony Chang  <tony@chromium.org>

        [chromium] Add Mac 10.7 Debug bot since it's on the waterfall
        https://bugs.webkit.org/show_bug.cgi?id=100028

        Reviewed by Eric Seidel.

        garden-o-matic can't baseline without this entry.

        * Scripts/webkitpy/layout_tests/port/builders.py:

2012-10-22  Jochen Eisinger  <jochen@chromium.org>

        [chromium] introduce WebTask to the TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=99964

        Reviewed by Adam Barth.

        I'm also removing the dependency on webkit_support, and instead go
        through the WebTestDelegate interface.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        (DRTDevToolsAgent::taskList):
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        * DumpRenderTree/chromium/DRTDevToolsClient.h:
        (DRTDevToolsClient::taskList):
        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (InvokeCallbackTask::InvokeCallbackTask):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner::taskList):
        (DRTTestRunner::WorkQueue::taskList):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (RTCSessionDescriptionRequestSuccededTask::RTCSessionDescriptionRequestSuccededTask):
        (RTCSessionDescriptionRequestFailedTask::RTCSessionDescriptionRequestFailedTask):
        (RTCStatsRequestSucceededTask::RTCStatsRequestSucceededTask):
        (RTCVoidRequestTask::RTCVoidRequestTask):
        (StringDataTask::StringDataTask):
        (CharPtrDataTask::CharPtrDataTask):
        (DataChannelReadyStateTask::DataChannelReadyStateTask):
        (RTCPeerConnectionReadyStateTask::RTCPeerConnectionReadyStateTask):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):
        (MockWebRTCPeerConnectionHandler::taskList):
        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp:
        (MockWebSpeechInputController::SpeechTask::SpeechTask):
        * DumpRenderTree/chromium/MockWebSpeechInputController.h:
        (MockWebSpeechInputController::taskList):
        (MockWebSpeechInputController):
        * DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp:
        * DumpRenderTree/chromium/MockWebSpeechRecognizer.h:
        (MockWebSpeechRecognizer::taskList):
        (MockWebSpeechRecognizer):
        (MockWebSpeechRecognizer::StepTask::StepTask):
        * DumpRenderTree/chromium/Task.cpp: Copied from Tools/DumpRenderTree/chromium/TestRunner/src/Task.cpp.
        (WebTestRunner):
        (WebTestRunner::invokeTask):
        (TaskWrapper):
        (WebTestRunner::TaskWrapper::TaskWrapper):
        (WebTestRunner::TaskWrapper::~TaskWrapper):
        (WebTestRunner::TaskWrapper::Run):
        (postTask):
        (postDelayedTask):
        * DumpRenderTree/chromium/Task.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h.
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/public/WebTask.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/src/Task.h.
        (WebTestRunner):
        (WebTask):
        (WebTaskList):
        (WebMethodTask):
        (WebTestRunner::WebMethodTask::WebMethodTask):
        (WebTestRunner::WebMethodTask::~WebMethodTask):
        (WebTestRunner::WebMethodTask::run):
        (WebTestRunner::WebMethodTask::cancel):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestRunner):
        (WebTestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::scheduleAsynchronousClick):
        (WebTestRunner::KeyDownTask::KeyDownTask):
        (WebTestRunner::EventSender::scheduleAsynchronousKeyDown):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.h:
        (WebTestRunner::EventSender::taskList):
        (EventSender):
        * DumpRenderTree/chromium/TestRunner/src/TestDelegate.h:
        (WebTestRunner):
        (TestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
        * DumpRenderTree/chromium/TestRunner/src/WebTask.cpp: Renamed from Tools/DumpRenderTree/chromium/TestRunner/src/Task.cpp.
        (WebTestRunner):
        (WebTestRunner::WebTask::WebTask):
        (WebTestRunner::WebTask::~WebTask):
        (WebTestRunner::WebTaskList::WebTaskList):
        (WebTestRunner::WebTaskList::~WebTaskList):
        (WebTestRunner::WebTaskList::registerTask):
        (WebTestRunner::WebTaskList::unregisterTask):
        (WebTestRunner::WebTaskList::revokeAll):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestInterfaces::Internal):
        (WebTestRunner::WebTestInterfaces::Internal::postTask):
        (WebTestRunner):
        (WebTestRunner::WebTestInterfaces::Internal::postDelayedTask):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        * DumpRenderTree/chromium/WebUserMediaClientMock.cpp:
        (UserMediaRequestTask::UserMediaRequestTask):
        * DumpRenderTree/chromium/WebUserMediaClientMock.h:
        (WebUserMediaClientMock::taskList):
        (WebUserMediaClientMock):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::postTask):
        (WebViewHost::postDelayedTask):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):
        (WebViewHost::taskList):
        (WebViewHost::HostMethodTask::HostMethodTask):

2012-10-22  Ojan Vafai  <ojan@chromium.org>

        Update flakiness dashboard to match the state of the builders.
        * TestResultServer/static-dashboards/builders.js:
        (isChromiumDepsGTestRunner):
        Broaden the filter since Chromium naming scheme is not consistent.
        (loadBuildersList):
        The main Chromium master now only runs builders, no tests.
        * TestResultServer/static-dashboards/dashboard_base.js:
        Remove test suites that no longer run on any of these masters.

2012-10-22  Jochen Eisinger  <jochen@chromium.org>

        [chromium] add a method for printing message to the WebTestDelegate
        https://bugs.webkit.org/show_bug.cgi?id=99960

        Reviewed by Adam Barth.

        When using the TestRunner library from the content_shell, we can't print
        message directly but need to send them to the browser process.

        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:
        (WebTestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.cpp:
        (WebTestRunner::AccessibilityController::fallbackCallback):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.h:
        (WebTestRunner::AccessibilityController::setDelegate):
        (AccessibilityController):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::EventSender::dumpFilenameBeingDragged):
        * DumpRenderTree/chromium/TestRunner/src/GamepadController.cpp:
        (GamepadController::connect):
        (GamepadController::disconnect):
        (GamepadController::setId):
        (GamepadController::setButtonCount):
        (GamepadController::setButtonData):
        (GamepadController::setAxisCount):
        (GamepadController::setAxisData):
        (GamepadController::fallbackCallback):
        * DumpRenderTree/chromium/TestRunner/src/TestDelegate.h:
        (TestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        (TestInterfaces::~TestInterfaces):
        (TestInterfaces::setDelegate):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
        (WebTestInterfaces::Internal):
        (WebTestRunner::WebTestInterfaces::Internal::printMessage):
        (WebTestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didBeginEditing):
        (WebViewHost::lastContextMenuData):
        (WebViewHost::clearContextMenuData):
        (WebViewHost::setEditCommand):
        (WebViewHost::clearEditCommand):
        (WebViewHost::fillSpellingSuggestionList):
        (WebViewHost::setGamepadData):
        (WebViewHost::printMessage):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-10-22  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        I now only watch Selectors instead of all of CSS.

        Unreviewed update of watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2012-10-22  Yury Semikhatsky  <yurys@chromium.org>

        Make sure base and derived class pointers are different in MemoryInstrumentationTest.instrumentedWithMultipleAncestors
        https://bugs.webkit.org/show_bug.cgi?id=99987

        Reviewed by Alexander Pavlov.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp: changed first parent
        class in the list so that it has virtual table as well as the second one. This
        way we may be sure that pointer to the second ancestor class will differ from
        the pointer to the derived class.

2012-10-22  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix compilation after r132059.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:

2012-10-22  Dominik Röttsches  <dominik.rottsches@intel.com>

        Adding Cairo and Harfbuzz watchlist entries

        Unreviewed watchlist update.

        Added myself to these new ones and SVG.

        * Scripts/webkitpy/common/config/watchlist:

2012-10-22  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: do not double count memory of objects with multiple ancestors
        https://bugs.webkit.org/show_bug.cgi?id=99958

        Reviewed by Alexander Pavlov.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp: Test that there
        is no double counting in case of multiple inheritance.

2012-10-22  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Basic gesture event handling
        https://bugs.webkit.org/show_bug.cgi?id=66173

        Reviewed by Simon Hausmann.

        Add support for eventSender.gestureLongPress.

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::EventSender):
        (EventSender::gestureLongPress):
        * DumpRenderTree/qt/EventSenderQt.h:
        (EventSender):

2012-10-22  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [WTR] Properly initialize TestRunner::m_dumpSelectionRect.
        https://bugs.webkit.org/show_bug.cgi?id=99970

        Reviewed by Kenneth Rohde Christiansen.

        Follow-up to r131476: actually initialize m_dumpSelectionRect to
        some value to avoid some flakyness in the tests.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):

2012-10-22  Tor Arne Vestbø  <tor.arne.vestbo@digia.com>

        [Qt] Don't build any of the tools in production_build

        Reviewed by Simon Hausmann.

        * Tools.pro:
        * qmake/mkspecs/features/configure.prf:

2012-10-22  Tor Arne Vestbø  <tor.arne.vestbo@digia.com>

        [Qt] Move OBJECTS_DIR and friends to default_pre.prf

        The introduction of load(qt_build_config) in .qmake.conf meant
        that we started loading qtmodule.pri, which in turn set both
        MOC_DIR, RCC_DIR, and OBJECTS_DIR.

        We were setting OBJECTS_DIR in default_post under a isEmpty() guard
        so that project files could override the objects dir. Instead of
        using the isEmpty() check we move it to defaul_pre, which will
        override the qtmodule.pri settings, but still allow project files
        to override it.

        Reviewed by Ossy.

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:

2012-10-22  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        WebKitTestRunner needs testRunner.queueLoadingScript and testRunner.queueNonLoadingScript
        https://bugs.webkit.org/show_bug.cgi?id=42675

        Reviewed by Kenneth Rohde Christiansen.

        Added implementation of testRunner.queueLoadingScript and testRunner.queueNonLoadingScript.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::queueLoadingScript):
        (WTR):
        (WTR::InjectedBundle::queueNonLoadingScript):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::queueLoadingScript):
        (WTR):
        (WTR::TestRunner::queueNonLoadingScript):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/WorkQueueManager.cpp:
        (WTR):
        (WTR::runJavaScriptFunction):
        (ScriptItem):
        (WTR::ScriptItem::ScriptItem):
        (WTR::ScriptItem::invoke):
        (WTR::WorkQueueManager::queueBackNavigation):
        (WTR::WorkQueueManager::queueLoadingScript):
        (WTR::WorkQueueManager::queueNonLoadingScript):
        * WebKitTestRunner/WorkQueueManager.h:
        (WorkQueueManager):

2012-10-22  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed, a follow-up to r132034 where I forgot to address
        Ojan's review comment about the race condition in handleLocationChange.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (handleLocationChange):

2012-10-22  Zan Dobersek  <zandobersek@gmail.com>

        [TestResultServer] Move the resource loading into a dedicated class
        https://bugs.webkit.org/show_bug.cgi?id=99246

        Reviewed by Ojan Vafai.

        A new 'loader' namespace is created, containing the request method (previously located in dashboard_base.js)
        and the new Loader object, which handles the loading of all the necessary data the dashboard might require.

        * TestResultServer/static-dashboards/aggregate_results.html: Include the loader.js source file.
        * TestResultServer/static-dashboards/builders.js:
        (requestBuilderList): Use the request method located in the loader namespace instead of the removed doXHR method.
        (onBuilderListLoad): Now parses the response text of the passed-in XHR. When all the builder lists are loaded the
        resource loader object is notified appropriately.
        (onErrorLoadingBuilderList): The partial function that calls this function also adds an XHR parameter.
        * TestResultServer/static-dashboards/dashboard_base.js: Much of the resource loading-related code is moved to loader.js.
        The Loader object is now used to load all the required resources.
        (parseParameters): Don't push the 'builder' parameter into the current state if the unit tests are being run.
        (resourceLoadingComplete): This method gets called when all the resources are loaded and the dashboard should
        proceed with generating the page.
        (handleLocationChange):
        * TestResultServer/static-dashboards/flakiness_dashboard.html: Include the loader.js source file.
        * TestResultServer/static-dashboards/flakiness_dashboard.js: The request method has been relocated to the loader namespace.
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js: The affected test cases are modified appropriately.
        (test):
        * TestResultServer/static-dashboards/loader.js: Added.
        (.): A new namespace is introduced, publicly exporting the request method that performs an XHR operation and a Loader object
        which oversees resource loading. The loading is done in steps, first loading the builders list, after that the results files
        the current dashboard needs, and lastly the TestExpectations files if they are required by the dashboard. When done the loader
        calls the resourceLoadingComplete method located in dashboard_base.js. This signals the dashboard all resources are available
        and it can proceed with generating the dashboard page.
        * TestResultServer/static-dashboards/loader_unittests.js: Added. Contains unit tests for the Loader object, covering the
        incremental loading and the loading of results files and TestExpectations files. The builders list loading is currently not
        tested as the unit tests page overrides related methods that possibly affect other tests' behavior.
        * TestResultServer/static-dashboards/run-unittests.html: Now includes the loader.js and loader_unittests.js source file.
        Refactors the code a bit due to changes in how onBuilderListLoad behaves.
        * TestResultServer/static-dashboards/timeline_explorer.html: Now includes the loader.js source file.
        * TestResultServer/static-dashboards/treemap.html: Ditto. Also refactors the code to take into account
        that all the test files are now loaded before generating the dashboard page.

2012-10-21  Jochen Eisinger  <jochen@chromium.org>

        [chromium] introduce a public API for the TestRunner library
        https://bugs.webkit.org/show_bug.cgi?id=99904

        Reviewed by Adam Barth.

        The API decouples the public API from the underlying implementation, so
        embedders can depend on it. I'm also changing DRT to consume the
        TestRunner API through the public API, except for DRTTestRunner and all
        places that require Task.h. These two will be migrated in later changes.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/DRTDevToolsClient.h:
        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        (MockSpellCheck::fillSuggestionList):
        * DumpRenderTree/chromium/MockSpellCheck.h:
        (MockSpellCheck):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        * DumpRenderTree/chromium/MockWebSpeechInputController.h:
        * DumpRenderTree/chromium/MockWebSpeechRecognizer.h:
        * DumpRenderTree/chromium/TestRunner/public/WebAccessibilityController.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/src/TestDelegate.h.
        (WebKit):
        (WebTestRunner):
        (WebAccessibilityController):
        * DumpRenderTree/chromium/TestRunner/public/WebEventSender.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/src/TestDelegate.h.
        (WebKit):
        (WebTestRunner):
        (WebEventSender):
        * DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/src/TestDelegate.h.
        (WebKit):
        (WebTestRunner):
        (WebTestDelegate):
        * DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h.
        (WebKit):
        (WebTestRunner):
        (WebTestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.cpp:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.h:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
        (WebTestRunner):
        (WebTestRunner::makeMenuItemStringsFor):
        * DumpRenderTree/chromium/TestRunner/src/EventSender.h:
        (WebTestRunner):
        * DumpRenderTree/chromium/TestRunner/src/TestDelegate.h:
        (TestDelegate):
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestRunner/src/WebAccessibilityController.cpp: Copied from Tools/DumpRenderTree/chromium/TestRunner/src/TestDelegate.h.
        (WebTestRunner):
        (WebTestRunner::WebAccessibilityController::WebAccessibilityController):
        (WebTestRunner::WebAccessibilityController::setFocusedElement):
        (WebTestRunner::WebAccessibilityController::notificationReceived):
        (WebTestRunner::WebAccessibilityController::shouldLogAccessibilityEvents):
        * DumpRenderTree/chromium/TestRunner/src/WebEventSender.cpp: Copied from Tools/DumpRenderTree/chromium/TestRunner/src/TestDelegate.h.
        (WebTestRunner):
        (WebTestRunner::WebEventSender::WebEventSender):
        (WebTestRunner::WebEventSender::doDragDrop):
        * DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp: Added.
        (WebTestRunner):
        (WebTestInterfaces::Internal):
        (WebTestRunner::WebTestInterfaces::Internal::testInterfaces):
        (WebTestRunner::WebTestInterfaces::Internal::accessibilityController):
        (WebTestRunner::WebTestInterfaces::Internal::eventSender):
        (WebTestRunner::WebTestInterfaces::Internal::Internal):
        (WebTestRunner::WebTestInterfaces::Internal::~Internal):
        (WebTestRunner::WebTestInterfaces::Internal::setDelegate):
        (WebTestRunner::WebTestInterfaces::Internal::clearContextMenuData):
        (WebTestRunner::WebTestInterfaces::Internal::clearEditCommand):
        (WebTestRunner::WebTestInterfaces::Internal::fillSpellingSuggestionList):
        (WebTestRunner::WebTestInterfaces::Internal::setEditCommand):
        (WebTestRunner::WebTestInterfaces::Internal::lastContextMenuData):
        (WebTestRunner::WebTestInterfaces::Internal::setGamepadData):
        (WebTestRunner::WebTestInterfaces::WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::~WebTestInterfaces):
        (WebTestRunner::WebTestInterfaces::setWebView):
        (WebTestRunner::WebTestInterfaces::setDelegate):
        (WebTestRunner::WebTestInterfaces::bindTo):
        (WebTestRunner::WebTestInterfaces::resetAll):
        (WebTestRunner::WebTestInterfaces::accessibilityController):
        (WebTestRunner::WebTestInterfaces::eventSender):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::eventSender):
        (TestShell::accessibilityController):
        (TestShell):
        * DumpRenderTree/chromium/WebUserMediaClientMock.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::finishLastTextCheck):
        (WebViewHost::fillSpellingSuggestionList):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-10-21  Viatcheslav Ostapenko  <v.ostapenko@samsung.com>

        Unreviewed. Updating my emails.

        * Scripts/webkitpy/common/config/committers.py:

2012-10-20  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][DRT] Implement tracking and painting repaint rectangles.
        https://bugs.webkit.org/show_bug.cgi?id=99838

        Reviewed by Gyuyoung Kim.

        Implement displayWebView() and start tracking/painting the repaint
        rectangles for the repaint tests that rely on it.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (displayWebView):
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:
        (createBitmapContextFromWebView):

2012-10-19  Dan Bernstein  <mitz@apple.com>

        Add bundle API for hit-testing
        https://bugs.webkit.org/show_bug.cgi?id=99907

        Reviewed by Sam Weinig.

        Added an API test for WKBundleFrameCreateHitTest().

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added InjectedBundleFrameHitTest.cpp,
        InjectedBundleFrameHitTest_bundle.cpp, and link-with-title.html.

        * TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest.cpp: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle): Checks that the message contains the
        title of the link in link-with-title.html.
        (TestWebKitAPI::setInjectedBundleClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest_Bundle.cpp: Added.
        (TestWebKitAPI::InjectedBundleFrameHitTestTest::InjectedBundleFrameHitTestTest):
        (TestWebKitAPI::didFinishLoadForFrameCallback): Hit tests at (50, 50) and sends the link title
        from the result back to the UI process.
        (TestWebKitAPI::InjectedBundleFrameHitTestTest::didCreatePage):
        (TestWebKitAPI::InjectedBundleFrameHitTestTest::frameLoadFinished):
        * TestWebKitAPI/Tests/WebKit2/link-with-title.html: Added.

2012-10-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131944.
        http://trac.webkit.org/changeset/131944
        https://bugs.webkit.org/show_bug.cgi?id=99891

        On second thoughts, not such a great idea (Requested by jamesr
        on #webkit).

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::createNewWindow):

2012-10-19  Alexandre Elias  <aelias@chromium.org>

        [chromium] API to pass impl thread via WebLayerTreeView
        https://bugs.webkit.org/show_bug.cgi?id=99863

        Reviewed by James Robinson.

        This adds an API to pass the compositor impl thread via WebView and
        WebLayerTreeView. This is currently a no-op change, but in the future
        this codepath will supercede WebCompositor. The goal is to avoid statics
        in compositor initialization.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::createNewWindow):

2012-10-19  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [Cairo][WTR] Implement the painting of repaint rectangles.
        https://bugs.webkit.org/show_bug.cgi?id=99839

        Reviewed by Martin Robinson.

        Implement the required code to paint the gray overlay with
        transparent regions for the repaint rectangles, as other ports
        already do and as is already done in most WK1 ports.

        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::paintRepaintRectOverlay):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2012-09-08  Alpha Lam  <hclam@chromium.org>

        [chromium] Implement deferred image decoding
        https://bugs.webkit.org/show_bug.cgi?id=94240

        Reviewed by Stephen White.

        Add --enable-deferred-image-decoding to DRT.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setDeferredImageDecodingEnabled):
        (TestShell):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.virtual_test_suites):

2012-10-19  Dongwoo Joshua Im  <dw.im@samsung.com>

        Rename ENABLE_CSS3_TEXT_DECORATION to ENABLE_CSS3_TEXT
        https://bugs.webkit.org/show_bug.cgi?id=99804

        Reviewed by Julien Chaffraix.

        CSS3 text related properties will be implemented under this flag,
        including text decoration, text-align-last, and text-justify.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2012-10-19  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WTR] renderToOffscreenBuffer should not be set if the real render loop is active
        https://bugs.webkit.org/show_bug.cgi?id=99831

        Reviewed by Jocelyn Turcotte.

        Do not set renderToOffscreenBuffer if we have called setRenderWithoutShowing.
        We do not need it in this case and these things are actually conflicting.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::windowShapshotEnabled): Added a comment
        describing why this workaround is needed.

2012-10-19  Zan Dobersek  <zandobersek@gmail.com>

        [WK2][GTK] Fullscreen tests timing out in bots
        https://bugs.webkit.org/show_bug.cgi?id=93973

        Reviewed by Philippe Normand.

        Add webcore_cppflags to the CPPFLAGS for WebKitTestRunner and the
        injected bundle library. webcore_cppflags contains all the feature
        defines' macros so the ENABE(*) compilation guards should now work
        properly (i.e. enable the code behind them when the feature is enabled).

        * WebKitTestRunner/GNUmakefile.am:

2012-10-19  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed, rolling out r131734.
        http://trac.webkit.org/changeset/131734

        Broke ANGLE build where we end up with @echo foo && @echo -n

        * qmake/mkspecs/features/default_post.prf:

2012-10-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION (r130640 - r130644): TestCookieManager API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=98738

        Reviewed by Philippe Normand.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip /webkit2/WebKitCookieManager/accept-policy.

2012-10-19  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Update the RuntimeEnabledFeatures flags
        https://bugs.webkit.org/show_bug.cgi?id=99714

        Reviewed by Adam Barth.

        Enabling the DeprecatedPeerConnection so that all tests still run.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2012-10-18  Dominic Mazzoni  <dmazzoni@google.com>

        AX: labelForElement is slow when there are a lot of DOM elements
        https://bugs.webkit.org/show_bug.cgi?id=97825

        Reviewed by Ryosuke Niwa.

        Implement titleUIElement in the chromium port of DRT, and
        fix getAccessibleElementById so that it ensures the backing store
        is up-to-date.

        * DumpRenderTree/chromium/TestRunner/AccessibilityControllerChromium.cpp:
        (AccessibilityController::getAccessibleElementById):
        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
        (AccessibilityUIElement::titleUIElementCallback):

2012-10-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI provide data for mixing with tcmalloc heap dumps.
        https://bugs.webkit.org/show_bug.cgi?id=99457

        Reviewed by Yury Semikhatsky.

        countObjectSize now requires pointer to object as the first argument.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:

2012-10-18  Dirk Pranke  <dpranke@chromium.org>

        make move_overwritten_baselines_to work again while rebaselining
        https://bugs.webkit.org/show_bug.cgi?id=99793

        Reviewed by Ojan Vafai.

        We used to have code that would help when rebaselining results
        for new ports (e.g., when moving from Lion to Mountain Lion) but
        it appears that code bitrotted during all the refactoring since
        the last time we needed this. This patch makes things work
        again, adds more tests that will hopefully make clearer what
        is supposed to work, and renames various parameters to be
        consistent.

        * Scripts/webkitpy/layout_tests/port/builders.py:
        (move_overwritten_baselines_to):
        (builder_path_for_port_name):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest.__init__):
        (RebaselineTest._copy_existing_baseline):
        (RebaselineTest._rebaseline_test):
        (RebaselineTest.execute):
        (AbstractParallelRebaselineCommand._rebaseline_commands):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_rebaseline_json_with_move_overwritten_baselines_to):
        (test_rebaseline_test_internal_with_move_overwritten_baselines_to):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (GardeningServerTest.test_rebaselineall):

2012-10-18  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Skip really old flaky failing jscore date test. 
        There's a bug tracking it here: https://bugs.webkit.org/show_bug.cgi?id=53712.

        * Scripts/run-javascriptcore-tests:

2012-10-18  Byungwoo Lee  <bw80.lee@samsung.com>

        Fix build warning.
        https://bugs.webkit.org/show_bug.cgi?id=99788

        Reviewed by Kentaro Hara.

        Use return value of mktemp() for removing -Wunused-result.

        * MiniBrowser/efl/main.c:
        (on_download_request):

2012-10-18  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] WebKit2 does not build without PLUGIN_PROCESS on Mac
        https://bugs.webkit.org/show_bug.cgi?id=99771

        Reviewed by Anders Carlsson.

        * DumpRenderTree/mac/MockWebNotificationProvider.mm: The file was not including config.h,
        effectively breaking feature flags.

2012-10-18  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][DRT] Make textareas resizable by default.
        https://bugs.webkit.org/show_bug.cgi?id=99719

        Reviewed by Gyuyoung Kim.

        Enable painting the textarea resizer at the corner by default,
        just as it already is the case for WK2. This eases the work needed
        to get the pixel tests in shape and run by the bots, as both the
        WK1 and WK2 ports will have more similar results.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):

2012-10-18  Jochen Eisinger  <jochen@chromium.org>

        [chromium] Add a webkit_test_support target that WebTestingSupport
        https://bugs.webkit.org/show_bug.cgi?id=99772

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-10-18  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move TestRunner files into a src/ sub directory
        https://bugs.webkit.org/show_bug.cgi?id=99776

        Reviewed by Adam Barth.

        This is in preparation of adding a public API to the TestRunner library.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DRTTestRunner.h:
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.cpp: Renamed from Tools/DumpRenderTree/chromium/TestRunner/AccessibilityControllerChromium.cpp.
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/AccessibilityControllerChromium.h.
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp: Renamed from Tools/DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp.
        * DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.h.
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp: Renamed from Tools/DumpRenderTree/chromium/TestRunner/CppBoundClass.cpp.
        * DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/CppBoundClass.h.
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp: Renamed from Tools/DumpRenderTree/chromium/TestRunner/CppVariant.cpp.
        * DumpRenderTree/chromium/TestRunner/src/CppVariant.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/CppVariant.h.
        * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp: Renamed from Tools/DumpRenderTree/chromium/TestRunner/EventSender.cpp.
        * DumpRenderTree/chromium/TestRunner/src/EventSender.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/EventSender.h.
        * DumpRenderTree/chromium/TestRunner/src/GamepadController.cpp: Renamed from Tools/DumpRenderTree/chromium/TestRunner/GamepadController.cpp.
        * DumpRenderTree/chromium/TestRunner/src/GamepadController.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/GamepadController.h.
        * DumpRenderTree/chromium/TestRunner/src/Task.cpp: Renamed from Tools/DumpRenderTree/chromium/TestRunner/Task.cpp.
        * DumpRenderTree/chromium/TestRunner/src/Task.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/Task.h.
        * DumpRenderTree/chromium/TestRunner/src/TestDelegate.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/TestDelegate.h.
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp: Renamed from Tools/DumpRenderTree/chromium/TestRunner/TestInterfaces.cpp.
        * DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/TestInterfaces.h.
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp: Renamed from Tools/DumpRenderTree/chromium/TestRunner/TestRunner.cpp.
        * DumpRenderTree/chromium/TestRunner/src/TestRunner.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/TestRunner.h.
        * DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp: Renamed from Tools/DumpRenderTree/chromium/TestRunner/TextInputController.cpp.
        * DumpRenderTree/chromium/TestRunner/src/TextInputController.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/TextInputController.h.

2012-10-18  Dirk Pranke  <dpranke@chromium.org>

        [chromium] garden-o-matic should ignore the 10.8 Tests bot
        https://bugs.webkit.org/show_bug.cgi?id=99765

        Reviewed by Adam Barth.

        It's really more of an FYI bot at this point and can be safely
        ignored like the Content Shell bots.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        (.):

2012-10-18  Jochen Eisinger  <jochen@chromium.org>

        [chromium] Simplify TestInterfaces, as this class won't be directly exposed in the TestRunner library's interface
        https://bugs.webkit.org/show_bug.cgi?id=99766

        Reviewed by Adam Barth.

        This reverts http://trac.webkit.org/changeset/123240

        * DumpRenderTree/chromium/TestRunner/TestInterfaces.cpp:
        (TestInterfaces::TestInterfaces):
        (TestInterfaces::~TestInterfaces):
        (TestInterfaces::setWebView):
        (TestInterfaces::setDelegate):
        (TestInterfaces::bindTo):
        (TestInterfaces::resetAll):
        (TestInterfaces::accessibilityController):
        (TestInterfaces::eventSender):
        * DumpRenderTree/chromium/TestRunner/TestInterfaces.h:
        (TestInterfaces):

2012-10-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131810.
        http://trac.webkit.org/changeset/131810
        https://bugs.webkit.org/show_bug.cgi?id=99762

        Broke linux debug webkit_unit_tests (Requested by
        danakj|gardening on #webkit).

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.virtual_test_suites):

2012-10-18  Alpha Lam  <hclam@chromium.org>

        [chromium] Implement deferred image decoding
        https://bugs.webkit.org/show_bug.cgi?id=94240

        Reviewed by Stephen White.

        Add --enable-deferred-image-decoding to DRT.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setDeferredImageDecodingEnabled):
        (TestShell):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.virtual_test_suites):

2012-10-18  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: fix chromium bot configs in builders.py
        https://bugs.webkit.org/show_bug.cgi?id=99638

        Reviewed by Ojan Vafai.

        Updating after the great bot-renaming and deleting a test case
        that is no longer needed.

        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (BuildCoverageExtrapolatorTest.test_extrapolate):

2012-10-18  Dirk Pranke  <dpranke@chromium.org>

        [chromium] Add 10.8 bot into fallback path, make work with garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=99748

        Reviewed by Ryosuke Niwa.

        Subject pretty much says it all ...

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_versions):
        (ChromiumMacPortTest.test_baseline_path):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_baseline_directory):
        (test_rebaseline_and_copy_test_with_lion_result):
        (test_rebaseline_expectations):

2012-10-18  Timothy Hatcher  <timothy@apple.com>

        Teach prepare-ChangeLog how to handle non-function properties in JavaScript prototypes.

        https://bugs.webkit.org/show_bug.cgi?id=99747

        Reviewed by Joseph Pecoraro.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_javascript): Clear currentIdentifiers when comma is encountered
        so it does not tack those identifiers onto the next changed function.

2012-10-18  James Simonsen  <simonjam@chromium.org>

        Add a script for exporting http/tests/w3c/webperf/submission to W3C
        https://bugs.webkit.org/show_bug.cgi?id=99675

        Reviewed by Tony Gentilcore.

        This does the inverse of Scripts/import-w3c-performance-wg-tests.

        * Scripts/export-w3c-performance-wg-tests: Added.

2012-10-18  Pablo Flouret  <pablof@motorola.com>

        Implement css3-conditional's @supports rule
        https://bugs.webkit.org/show_bug.cgi?id=86146

        Reviewed by Antti Koivisto.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:
            Add an ENABLE_CSS3_CONDITIONAL_RULES flag.

2012-10-18  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] Dump DRT output to stdout if test is passed as command line argument
        https://bugs.webkit.org/show_bug.cgi?id=99150

        Reviewed by Rob Buis.

        Fixed some code style errors as well.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::runTest):
        (BlackBerry::WebKit::DumpRenderTree::runRemainingTests):
        (BlackBerry::WebKit::DumpRenderTree::runTests):
        (BlackBerry::WebKit::DumpRenderTree::isHTTPTest):
        (BlackBerry::WebKit::DumpRenderTree::dump):
        (BlackBerry::WebKit::DumpRenderTree::addMessageToConsole):
        * DumpRenderTree/blackberry/DumpRenderTreeBlackBerry.h:
        (DumpRenderTree):

2012-10-18  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Improved support for silent builds

        Reviewed by Tor Arne Vestbø.

        Silence our extra compilers when CONFIG+=silent is set.

        * qmake/mkspecs/features/default_post.prf:

2012-10-18  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Reduce memory pressure at link time with less compromise on speed of linking

        Reviewed by Csaba Osztrogonác.

        Revert r131718 that made us pass -fno-keep-memory to the linker for any
        i386 builds. The downside of passing that option is that it slows down
        the process of linking and as Ossy determined, release builds do _not_
        take as much memory (2.x GB) for linking but much less (~350MB).

        However there is one condition where even release builds do take up too
        much memory, and that is when Qt is configured with
        -separate-debug-info, because it adds a -g next to -O2. The recent
        introduction of loading qt_build_config enabled us to read qmodule.pri,
        which adds the -g if Qt is configured with -separate-debug-info. So
        instead of playing with -fno-keep-memory (which is a last resort
        measure for debug builds) we should tweak our existing mechanism of
        dealing with the debug info:

        production_build.prf tries to ensure that we use -g only in static
        libraries that contain API facing code, so that we get nice backtraces
        at least into the API layer. For other static libraries such as WebCore
        we skip -g via CONFIG += no_debug_info. One of the conditions for
        enabling this tweak is CONFIG(debug, debug|release). This patch adds
        contains(QT_CONFIG,separate_debug_info) to the conditions.

        The patch also extend the CONFIG += no_debug_info part with the removal
        of no_separate_debug_info. There is no point in running an extra
        build step to strip out debug info into a separate file if at the same
        time we tell the compiler to not generate any debug info altogether.

        * qmake/mkspecs/features/production_build.prf:
        * qmake/mkspecs/features/unix/default_post.prf:

2012-10-18  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] OpenGL rendering is not possible on bots using Xvfb
        https://bugs.webkit.org/show_bug.cgi?id=99463

        Reviewed by Jocelyn Turcotte.

        Added a workaround to be able to disallow UI side OpenGL rendering
        if the environment is not suitable because it can be extremely slow
        with a software backend.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.setup_environ_for_server): Let the environment variable
        QT_WEBKIT_DISABLE_UIPROCESS_DUMPPIXELS reach the driver. This variable
        should be defined on bots that don't have a suitable OpenGL environment.
        * WebKitTestRunner/PlatformWebView.h:
        (PlatformWebView):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged): Don't try to create an OpenGL
        surface and set the setRenderWithoutShowing flag on the window if the
        variable is set.
        (WTR::PlatformWebView::windowSnapshotImage):
        (WTR::PlatformWebView::windowShapshotEnabled):
        (WTR):
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Use the old method
        of evaluating pixel results if the snapshot is not supported, that is to check
        the image we got from the web process. This is necessary for the bots to be able
        to run ref tests.

2012-10-15  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Implement pixel snapshot generation in WTR
        https://bugs.webkit.org/show_bug.cgi?id=95992

        Reviewed by Jocelyn Turcotte.

        Switch the Qt implementation of the PlatformWebView to use
        QQuickWindow::grabWindow to generate the pixel results. This way
        we will go through the scenegraph and test the actual rendering backend.
        We use QQuickWindowPrivate::setRenderWithoutShowing to avoid the need of
        showing the window.

        * WebKitTestRunner/Target.pri: Had to added a bunch
        of modules to be able to use QQuickWindowPrivate.
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        (WTR::PlatformWebView::windowSnapshotImage):

2012-10-15  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WTR] Do a forced repaint before generating pixel results
        https://bugs.webkit.org/show_bug.cgi?id=98654

        Reviewed by Jocelyn Turcotte.

        Do a forced repaint before grabbing the pixel snapshot. This extra
        synchronisation is necessary with the CoordinatedGraphics rendering
        backend because it has a fully asynchronous nature. This patch make
        us using the window snapshot for pixel results which is necessary to
        capture animations and other dynamic content. The actual grabbing of
        the window has not been implemented in this patch. It will come in
        a follow-up.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::dump): Store results in member variables.
        Don't close output channels yet.
        (WTR::TestInvocation::dumpResults): Added. This is where we dump
        the results if no error happened.
        (WTR):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:
        (TestInvocation):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::windowSnapshotImage):
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::forceRepaintDoneCallback):
        (WTR):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2012-10-18  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Clean up variables controlling Qt module creation/handling

        Reviewed by Tor Arne Vestbø.

        We now depend on a Qt 5 version that is new enough to allow us to
        clean this up. Qt's default_pre.prf uses MODULE_QMAKE_OUTDIR, but
        the other MODULE_BASE_* variables are onl used in qmodule.prf.

        * qmake/mkspecs/features/default_pre.prf:

2012-10-18  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Reduce memory pressure during link time

        Reviewed by Tor Arne Vestbø.

        If possible always pass -fkeep-memory to the linker on i386. The
        library has grown so big that we need this not only for i386 debug
        builds but at least also for release.

        * qmake/mkspecs/features/unix/default_post.prf:

2012-10-17  Tor Arne Vestbø  <tor.arne.vestbo@digia.com>

        [Qt] Modularize documentation for QtWebKit

        Running 'make docs' would fail unless 'make qmake_all' was ran first,
        but qmake_all involved generating all the derived sources, which seems
        overly complex just for building documentation.

        We solve this by preventing all subdirs except QtWebKit from having a
        docs target. This would normally work fine on its own, but since we
        use CONFIG += ordered, there's now a missing doc target for the
        immediate dependency of the QtWebKit subdir. We solve this by adding
        a dummy-target ourselves.

        Finally, we clean up the qdocconf file to match the rest of the Qt
        documentation modularization efforts.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:

2012-10-17  Zoltan Horvath  <zoltan@webkit.org>

        Remove the JSHeap memory measurement of the PageLoad performacetests since it creates bogus JSGlobalDatas
        https://bugs.webkit.org/show_bug.cgi?id=99609 

        Reviewed by Ryosuke Niwa.

        Remove the implementation since it creates bogus JSGlobalDatas in the layout tests.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):

2012-10-17  Dirk Pranke  <dpranke@chromium.org>

        [chromium] stop falling back to platform/mac for LayoutTest results
        https://bugs.webkit.org/show_bug.cgi?id=99666

        Reviewed by James Robinson.

        Previously the Chromium ports would fall back to results in
        platform/mac if a result was not found in platform/chromium-*.
        This allowed us to share a lot of results w/ the Apple Mac port,
        but often surprised people (especially at Apple ;) when changing
        something in that directory would break a Chromium build.

        The tests that are deleted in baselineoptimizer were for cases
        that are no longer relevant or possible in the current fallback
        graph.

        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        (BaselineOptimizerTest.test_move_baselines):
        (BaselineOptimizerTest.test_chromium_covers_mac_win_linux):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort):
        * TestResultServer/static-dashboards/flakiness_dashboard.js:

2012-10-17  Shashi Shekhar  <shashishekhar@google.com>

        Remove redundant sdk_build parameter.
        https://bugs.webkit.org/show_bug.cgi?id=99648

        Reviewed by Adam Barth.

        sdk_build parameter is no longer needed.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2012-10-17  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] AccessibilityUIElement::role() should be consistent across platforms wherever possible
        https://bugs.webkit.org/show_bug.cgi?id=99640

        Reviewed by Chris Fleizach.

        Convert AtkRole instances to the Mac/Safari-style AXRole string.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (roleToString): New method to convert AtkRole instances to the Mac/Safari-style AXRole string
        (AccessibilityUIElement::role): Output the Mac/Safair-style AXRole string rather than the AtkRole's name

2012-10-17  Anders Carlsson  <andersca@apple.com>

        Clean up Vector.h
        https://bugs.webkit.org/show_bug.cgi?id=99622

        Reviewed by Benjamin Poulain.

        Remove ReversedProxy test.

        * TestWebKitAPI/Tests/WTF/Vector.cpp:

2012-10-17  Scott Graham  <scottmg@chromium.org>

        Integer overflows/underflows in all Gamepad controller api calls.
        https://bugs.webkit.org/show_bug.cgi?id=97262

        Reviewed by Abhishek Arya.

        Range check controller inputs. This code is not exposed to the web,
        but makes fuzzers try less hard to break uninteresting code.

        * DumpRenderTree/chromium/TestRunner/GamepadController.cpp:
        (GamepadController::setButtonCount):
        (GamepadController::setButtonData):
        (GamepadController::setAxisCount):
        (GamepadController::setAxisData):

2012-10-17  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed watchlist email change.

        * Scripts/webkitpy/common/config/watchlist:

2012-10-17  Dan Carney  <dcarney@google.com>

        Bind isolatedWorldSecurityOrigin to world
        https://bugs.webkit.org/show_bug.cgi?id=99582

        Reviewed by Adam Barth.

        Added ability to unset isolatedWorldSecurityOrigin.

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::setIsolatedWorldSecurityOrigin):

2012-10-17  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed watchlist addition.

        * Scripts/webkitpy/common/config/watchlist:

2012-10-17  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        plugins: Allow a plugin to dictate whether it can receive drag events or not.
        https://bugs.webkit.org/show_bug.cgi?id=99355

        Reviewed by Tony Chang.

        Update the TestWebPlugin to implement the new |canProcessDrag| interface.

        * DumpRenderTree/chromium/TestWebPlugin.h:
        (TestWebPlugin::canProcessDrag):

2012-10-17  Dominic Mazzoni  <dmazzoni@google.com>

        Unreviewed. Create an accessibility watchlist.

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/watchlist:

2012-10-17  Jochen Eisinger  <jochen@chromium.org>

        [gyp] fix bundle resources for DumpRenderTree on mac
        https://bugs.webkit.org/show_bug.cgi?id=99558

        Reviewed by Adam Barth.

        mac_bundle_resources doesn't propagate to targets that depend on it,
        so I'm wrapping it in an all_dependent_settings block.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-10-17  Harald Alvestrand  <hta@google.com>

        Add myself to the MediaStream watchlist
        https://bugs.webkit.org/show_bug.cgi?id=99589

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/watchlist:

2012-10-17  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][WTR] InjectedBundlePage::decidePolicyForNavigationAction() should print only filename part of local URLs
        https://bugs.webkit.org/show_bug.cgi?id=99581

        Reviewed by Kenneth Rohde Christiansen.

        Now InjectedBundlePage::decidePolicyForNavigationAction() prints only filename part of local URLs (URLs where scheme
        equals to 'file').

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction):

2012-10-17  Harald Alvestrand  <hta@google.com>

        Implement the Selector argument to RTCPeerConnection.getStats
        https://bugs.webkit.org/show_bug.cgi?id=99460

        Reviewed by Adam Barth.

        The MockWebRTCPeerConnectionHandler will return one object only
        when it gets a selector, and an even number when there is no selector.
        This allows to verify that the argument is passed, but not its value.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::getStats):

2012-10-17  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        WebKitTestRunner needs layoutTestController.queueReload
        https://bugs.webkit.org/show_bug.cgi?id=42672

        Reviewed by Kenneth Rohde Christiansen.

        Added implementation of testRunner.queueReload().

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::queueReload):
        (WTR):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::queueReload):
        (WTR):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/WorkQueueManager.cpp:
        (WTR::WorkQueueManager::queueReload):
        (WTR):
        * WebKitTestRunner/WorkQueueManager.h:
        (WorkQueueManager):

2012-10-17  Mark Rowe  <mrowe@apple.com>

        Fix the build with a newer version of clang.

        Reviewed by Dan Bernstein.

        Update to accommodate the renamed methods in WebCoreStatistics.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createPagedBitmapContext):

2012-10-17  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        WebKitTestRunner needs testRunner.queueLoad
        https://bugs.webkit.org/show_bug.cgi?id=42674

        Reviewed by Kenneth Rohde Christiansen.

        Added testRunner.queueLoad() and testRunner.queueBackNavigation() implementation to WTR including
        Work Queue implementation. Work Queue is managed by WorkQueueManager which belongs to UI process
        (as the needed functionality, like loading initiation, has to be invoked from UI process) and
        exchanges messages with Injected bundle.

        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::InjectedBundle):
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::done):
        (WTR::InjectedBundle::shouldProcessWorkQueue):
        (WTR):
        (WTR::InjectedBundle::processWorkQueue):
        (WTR::InjectedBundle::queueBackNavigation):
        (WTR::InjectedBundle::queueLoad):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didFailProvisionalLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didFinishLoadForFrame):
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::locationChangeForFrame):
        (WTR):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        (InjectedBundlePage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::queueBackNavigation):
        (WTR):
        (WTR::TestRunner::queueLoad):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):
        * WebKitTestRunner/Target.pri:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::workQueueManager):
        (TestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WorkQueueManager.cpp: Added.
        (WTR):
        (WTR::mainPage):
        (WTR::goToItemAtIndex):
        (WTR::WorkQueueManager::WorkQueueManager):
        (WTR::WorkQueueManager::clearWorkQueue):
        (WTR::WorkQueueManager::processWorkQueue):
        (WTR::WorkQueueManager::queueLoad):
        (WTR::WorkQueueManager::queueBackNavigation):
        (WTR::WorkQueueManager::enqueue):
        * WebKitTestRunner/WorkQueueManager.h: Added.
        (WTR):
        (WorkQueueManager):
        (WTR::WorkQueueManager::isWorkQueueEmpty):
        (WorkQueueItem):
        (WTR::WorkQueueManager::WorkQueueItem::~WorkQueueItem):
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:

2012-10-16  Andy Estes  <aestes@apple.com>

        [WebKit2] Create Objective-C API for adding and removing user scripts
        https://bugs.webkit.org/show_bug.cgi?id=99528

        Reviewed by Anders Carlsson.

        Add three new API tests.

        * TestWebKitAPI/Tests/WebKit2ObjC/UserContentTest.mm:
        (expectScriptValueIsString):
        (expectScriptValueIsBoolean):
        (expectScriptValueIsUndefined):

2012-10-16  Dirk Pranke  <dpranke@chromium.org>

        [chromium] add Mountain Lion baselines
        https://bugs.webkit.org/show_bug.cgi?id=99505

        Reviewed by Ojan Vafai.

        This change adds a temporary 10.8/MountainLion-specific
        expectations file for Chromium so that the bot can be green
        while we are updating all the baselines and triaging failures.

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.expectations_files):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_ml_expectations):

2012-10-16  Dima Gorbik  <dgorbik@apple.com>

        Remove Platform.h include from the header files.
        https://bugs.webkit.org/show_bug.cgi?id=98665

        Reviewed by Eric Seidel.

        We don't want other clients that include WebKit headers to know about Platform.h.

        * DumpRenderTree/mac/MockGeolocationProvider.mm:

2012-10-16  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Add the chromium API for RTCDataChannel
        https://bugs.webkit.org/show_bug.cgi?id=99435

        Reviewed by Adam Barth.

        Adding mock support for WebRTCDataChannel.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (StringDataTask):
        (StringDataTask::StringDataTask):
        (CharPtrDataTask):
        (CharPtrDataTask::CharPtrDataTask):
        (DataChannelReadyStateTask):
        (DataChannelReadyStateTask::DataChannelReadyStateTask):
        (RTCPeerConnectionReadyStateTask):
        (RTCPeerConnectionReadyStateTask::RTCPeerConnectionReadyStateTask):
        (MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler):
        (MockWebRTCPeerConnectionHandler::initialize):
        (MockWebRTCPeerConnectionHandler::stop):
        (MockWebRTCPeerConnectionHandler::openDataChannel):
        (MockWebRTCPeerConnectionHandler::closeDataChannel):
        (MockWebRTCPeerConnectionHandler::sendStringData):
        (MockWebRTCPeerConnectionHandler::sendRawData):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):

2012-10-16  Chris Rogers  <crogers@google.com>

        Rename some AudioNodes
        https://bugs.webkit.org/show_bug.cgi?id=99358

        Reviewed by Daniel Bates.

        * Scripts/do-webcore-rename:

2012-10-16  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Implement testRunner.dumpSelectionRect() in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=69545

        Reviewed by Simon Fraser.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump): Set the
        kWKSnapshotOptionsPaintSelectionRectangle option if
        testRunner.dumpSelectionRect() is called.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::dumpSelectionRect):
        (WTR::TestRunner::shouldDumpSelectionRect):
        (TestRunner):

2012-10-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131461.
        http://trac.webkit.org/changeset/131461
        https://bugs.webkit.org/show_bug.cgi?id=99474

        Broke win7 bots (Requested by danakj|gardening on #webkit).

        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        * DumpRenderTree/chromium/TestEventPrinter.h:
        (TestEventPrinter):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dump):

2012-10-16  Zoltan Horvath  <zoltan@webkit.org>

        [chromium] Provide used JSHeap size in chromium's DRT for pageloadtest memory measurements
        https://bugs.webkit.org/show_bug.cgi?id=99288

        Reviewed by Ryosuke Niwa.

        Provide used JSHeap size as we did it for the Apple port.

        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (TestEventPrinter::handleDumpMemoryHeader): Add new function to print the JSHeap memory result.
        * DumpRenderTree/chromium/TestEventPrinter.h:
        (TestEventPrinter): handleDumpMemoryHeader declaration.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dump): Dump JSHeap value.

2012-10-16  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix nmake wipeclean on Windows

        Reviewed by Tor Arne Vestbø.

        Delete all subdirectories and no files instead of ".".

        * qmake/mkspecs/features/configure.prf:

2012-10-16  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix wipeclean on Windows

        Reviewed by Csaba Osztrogonác.

        Make sure to close the .qmake.cache file after opening it, otherwise it cannot be deleted on
        a clean build because this process (build-webkit) is still using it due to Windows' exclusive
        way of opening files.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-10-16  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix determination of changed files from SVN revisions

        Reviewed by Csaba Osztrogonác.

        isSVN() doesn't work from within the build directory, so change to the source directory before
        doing any VCS operations.

        * Scripts/VCSUtils.pm:
        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-10-16  Simon Hausmann  <simon.hausmann@digia.com>

        Fix build-webkit bailing out of !isSVN() and !isGit()

        Reviewed by Tor Arne Vestbø.

        Added missing else case with early return.

        * Scripts/VCSUtils.pm:

2012-10-16  Simon Hausmann  <simon.hausmann@digia.com>, Tor Arne Vestbø <tor.arne.vestbo@digia.com>

        [Qt] Add logic for triggering clean builds on changes to build system files

        Reviewed by Csaba Osztrogonác.

        Re-use the existing logic that gives us a range between old and new SVN revision and
        parse the summarized output of diff to see if any of the changed files include files
        that are part of the Qt build system. If they change we likely need a clean build and
        trigger it just to be on the safe side and reduce the amount of manual intervention
        needed on the Qt build bots.

        * Scripts/VCSUtils.pm:
        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-10-16  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Fix the paths for QtGraphics related WebKit2 files.

        Unreviewed update of watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2012-10-16  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        CSS and TouchAdjustment - I am watching you!

        Unreviewed update of watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2012-10-16  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Silence C++11 warnings with older versions of clang

        Rubber-stamped by Tor Arne Vestbø.

        Some clang versions support -Wno-c++11-extensions and some use -Wno-c++0x-extensions.
        We cater both :)

        * qmake/mkspecs/features/unix/default_post.prf:

2012-10-16  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] Provide WKURL API for resolving the relative URL with the given base URL
        https://bugs.webkit.org/show_bug.cgi?id=99317

        Reviewed by Kenneth Rohde Christiansen.

        Added API test for newly added WKURLCreateWithBaseURL().

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/Tests/WebKit2/WKURL.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2012-10-16  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Decrease the Cario jhbuild dep version back to 1.10.2
        https://bugs.webkit.org/show_bug.cgi?id=99443

        Reviewed by Philippe Normand.

        Crashes started to occur after the Cairo version in the JHBuild dependencies
        was bumped up to 1.12.4. This change brings it back down to 1.10.2, which
        worked fine.

        * gtk/jhbuild.modules:

2012-10-16  Szilard Ledan  <szledan@inf.u-szeged.hu>

        Separate WebKit2 instances use the same local storage
        https://bugs.webkit.org/show_bug.cgi?id=89666

        Reviewed by Simon Hausmann.

        TestController has been modified to get the local storage from
        DUMPRENDERTREE_TEMP environment variable. If it's undefined
        then it works with the default directory. The aim is for the parallelly
        started WTRs to use separate directories. It was implemented for WK1
        long time ago and it works fine.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2012-10-15  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Display page favicons in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=99265

        Reviewed by Gyuyoung Kim.

        Display current page favicon in the URL bar.
        This uses the new favicon database API in
        EFL WebKit2.

        * MiniBrowser/efl/main.c:
        (on_favicon_received):
        (on_view_icon_changed):
        (window_create):

2012-10-15  Simon Fraser  <simon.fraser@apple.com>

        Update the url bar in MiniBrowser when getting the committed URL
        https://bugs.webkit.org/show_bug.cgi?id=99388

        Reviewed by Sam Weinig.

        Fix both WK1 and WK2 window controllers to update the URL in the 
        text field when transitioning to the committed URL. This fixes
        the URL when dragging local files into the window.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController webView:didCommitLoadForFrame:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController updateTextFieldFromURL:]):
        (-[WK2BrowserWindowController updateProvisionalURLForFrame:]):
        (-[WK2BrowserWindowController updateCommittedURLForFrame:]):
        (-[WK2BrowserWindowController didCommitLoadForFrame:]):

2012-10-15  Ojan Vafai  <ojan@chromium.org>

        Don't show the content shell and android test bots for webkit ToT
        https://bugs.webkit.org/show_bug.cgi?id=99380

        Reviewed by Dirk Pranke.

        Content shell used to coincidentally be skipped because it spelled WebKit correctly.
        Now skip it explicitly. The Android bot is up and running, but only has a stub for
        running tests. Skip it so we don't show a false error.
        * TestResultServer/static-dashboards/builders.js:
        (isChromiumWebkitTipOfTreeTestRunner):

2012-10-15  Zoltan Horvath  <zoltan@webkit.org>

        Add MountainLion Performance-bot to the Performance bots waterfall link
        https://bugs.webkit.org/show_bug.cgi?id=99378

        Reviewed by Dirk Pranke.

        Add MountainLion Performance-bot to the Performance bots waterfall link on the buildbots frontpage.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2012-10-15  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2] Cannot set evas engine from command line
        https://bugs.webkit.org/show_bug.cgi?id=99286

        Reviewed by Kenneth Rohde Christiansen.

        If an engine name is passed on the command line, pass it along to evas.

        * MiniBrowser/efl/main.c:
        (elm_main):

2012-10-15  Ojan Vafai  <ojan@chromium.org>

        Lower the minimum time required to keep a test in the test results json
        https://bugs.webkit.org/show_bug.cgi?id=99346

        Reviewed by Eric Seidel.

        On the run-webkit-tests side, we floor the time. So, 5 seconds is too close to
        the 6 second timeout. Lower the time so that we can get a better sense of tests
        that are close to timing out.

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:
        (JsonResultsTest.test_merge_keep_test_with_all_pass_but_slow_time):

2012-10-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131306 and r131307.
        http://trac.webkit.org/changeset/131306
        http://trac.webkit.org/changeset/131307
        https://bugs.webkit.org/show_bug.cgi?id=99354

        It made layout testing extremely slow again (Requested by
        Ossy_night on #webkit).

        * WebKitTestRunner/Target.pri:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:
        (TestInvocation):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        (WTR::PlatformWebView::windowSnapshotImage):
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2012-10-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131327.
        http://trac.webkit.org/changeset/131327
        https://bugs.webkit.org/show_bug.cgi?id=99353

        broke the build (Requested by danakj|gardening on #webkit).

        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        * DumpRenderTree/chromium/TestEventPrinter.h:
        (TestEventPrinter):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dump):

2012-10-15  Kenichi Ishibashi  <bashi@chromium.org>

        [WebSocket] Update pywebsocket to 0.7.8
        https://bugs.webkit.org/show_bug.cgi?id=99293

        Reviewed by Yuta Kitamura.

        Version 0.7.8 supports WebSocket frames and messages compression
        with blocks in which BFINAL bit is set to 1.
        We need this feature to add a test case of compression extension.

        * Scripts/webkitpy/thirdparty/mod_pywebsocket/extensions.py:
        (DeflateFrameExtensionProcessor.__init__):
        (DeflateFrameExtensionProcessor.set_bfinal):
        (DeflateFrameExtensionProcessor._outgoing_filter):
        (DeflateMessageProcessor.__init__):
        (DeflateMessageProcessor.set_bfinal):
        (DeflateMessageProcessor._process_outgoing_message):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/util.py:
        (_Deflater.compress_and_finish):
        (_RFC1979Deflater.filter):

2012-10-15  Zan Dobersek  <zandobersek@gmail.com>

        [TestResultServer] TestExpectations should only be loaded for the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=99245

        Reviewed by Ojan Vafai.

        Only load the TestExpectations when using the flakiness dashboard. Other dashboards
        don't need them so there's no reason to load them.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (isFlakinessDashboard):
        (appendJSONScriptElements):

2012-10-15  Zoltan Horvath  <zoltan@webkit.org>

        [chromium] Provide used JSHeap size in chromium's DRT for pageloadtest memory measurements 
        https://bugs.webkit.org/show_bug.cgi?id=99288

        Reviewed by Ryosuke Niwa.

        Provide used JSHeap size as we did it for the Apple port.

        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (TestEventPrinter::handleDumpMemoryHeader): Add new function to print the JSHeap memory result.
        * DumpRenderTree/chromium/TestEventPrinter.h:
        (TestEventPrinter): handleDumpMemoryHeader declaration.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dump): Dump JSHeap value.

2012-10-15  George Staikos  <staikos@webkit.org>

        [BlackBerry] Adapt to Platform API changes in string handling
        https://bugs.webkit.org/show_bug.cgi?id=99248

        Reviewed by Yong Li.

        Convert usage of WebString, char* and std::string to BlackBerry::Platform::String.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::runTest):
        * DumpRenderTree/blackberry/WorkQueueItemBlackBerry.cpp:
        (LoadHTMLStringItem::invoke):
        (ScriptItem::invoke):

2012-10-15  Kangil Han  <kangil.han@samsung.com>

        [EFL][EWebLauncher] Add encoding detector option.
        https://bugs.webkit.org/show_bug.cgi?id=98726

        Reviewed by Gyuyoung Kim.

        Added an option to test WebCore's encoding detector functionality on EWebLauncher.
        With this patch, EWebLauncher would display text correctly even if web page wouldn't specify charset information.

        * EWebLauncher/main.c:
        (_User_Arguments):
        (windowCreate):
        (parseUserArguments):

2012-10-15  Ilya Tikhonovsky  <loislo@chromium.org>

        Build fix for Mac debug build.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:

2012-10-15  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Implement pixel snapshot generation in WTR
        https://bugs.webkit.org/show_bug.cgi?id=95992

        Reviewed by Jocelyn Turcotte.

        Switch the Qt implementation of the PlatformWebView to use
        QQuickWindow::grabWindow to generate the pixel results. This way
        we will go through the scenegraph and test the actual rendering backend.
        We use QQuickWindowPrivate::setRenderWithoutShowing to avoid the need of
        showing the window.

        * WebKitTestRunner/Target.pri: Had to added a bunch
        of modules to be able to use QQuickWindowPrivate.
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        (WTR::PlatformWebView::windowSnapshotImage):

2012-10-15  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WTR] Do a forced repaint before generating pixel results
        https://bugs.webkit.org/show_bug.cgi?id=98654

        Reviewed by Jocelyn Turcotte.

        Do a forced repaint before grabbing the pixel snapshot. This extra
        synchronisation is necessary with the CoordinatedGraphics rendering
        backend because it has a fully asynchronous nature. This patch make
        us using the window snapshot for pixel results which is necessary to
        capture animations and other dynamic content. The actual grabbing of
        the window has not been implemented in this patch. It will come in
        a follow-up.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::dump): Store results in member variables.
        Don't close output channels yet.
        (WTR::TestInvocation::dumpResults): Added. This is where we dump
        the results if no error happened.
        (WTR):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:
        (TestInvocation):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::windowSnapshotImage):
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::forceRepaintDoneCallback):
        (WTR):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2012-10-15  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Separate Qt WebKit into Qt WebKit and Qt WebKit Widgets
        https://bugs.webkit.org/show_bug.cgi?id=88162

        Reviewed by Kenneth Rohde Christiansen.

        Rename the QtWebKit module to QtWebKitWidgets.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/raw/Target.pri:
        * QtTestBrowser/QtTestBrowser.pro:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._path_to_webcore_library):
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/Target.pri:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/webkit_modules.prf:
        * qmake/mkspecs/features/win32/default_post.prf:

2012-10-11  Kinuko Yasuda  <kinuko@chromium.org>

        [chromium] Removes unnecessary dependencies in DumpRenderTree.gyp
        https://bugs.webkit.org/show_bug.cgi?id=99132

        Reviewed by Kent Tamura.

        Removing webkit_support:blob dependency for DumpRenderTree target as it doesn't seem necessary.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-10-15  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Buildfix for newer Qt5.
        https://bugs.webkit.org/show_bug.cgi?id=99303

        Reviewed by Simon Hausmann.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::resizeTo):

2012-10-14  Jon Lee  <jonlee@apple.com>

        Allow notification origin permission request when no js callback is provided
        https://bugs.webkit.org/show_bug.cgi?id=63615
        <rdar://problem/11059590>

        Reviewed by Sam Weinig.

        Teach DRT to look at the existing entries in the permission hash map when permission is requested.

        * DumpRenderTree/mac/MockWebNotificationProvider.h: Expose policyForOrigin.
        * DumpRenderTree/mac/MockWebNotificationProvider.mm:
        (-[MockWebNotificationProvider setWebNotificationOrigin:permission:]):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:decidePolicyForNotificationRequestFromOrigin:listener:]): Look at whether a
        policy for the origin already exists. If so, accept or deny the request as appropriate. Otherwise,
        accept by default.

2012-10-13  Zan Dobersek  <zandobersek@gmail.com>

        [TestResultServer] Unit tests require an update after r131239
        https://bugs.webkit.org/show_bug.cgi?id=99236

        Reviewed by Ojan Vafai.

        Replacing 'Webkit' with 'WebKit' in builder names througout the unit tests
        after the Chromium builders have been renamed recently.

        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:

2012-10-12  Zan Dobersek  <zandobersek@gmail.com>

        [TestResultServer] Add support for non-Chromium TestExpectations files
        https://bugs.webkit.org/show_bug.cgi?id=98422

        Reviewed by Ojan Vafai.

        Loads TestExpectations files for several other non-Chromium ports, parses them and
        properly distributes them per various platforms.

        * TestResultServer/static-dashboards/dashboard_base.js: g_expectations is replaced by
        g_expectationsByPlatform, an object that holds raw TestExpectations file contents for
        various platforms.
        (requestExpectationsFiles): First traverses through the platforms tree to gather all
        the TestExpectations files that should be loaded, then loads them in parallel.
        (appendJSONScriptElements):
        * TestResultServer/static-dashboards/flakiness_dashboard.js: The platforms tree is reorganized
        to describe each platform and possible subplatforms plainly yet in detail. The PLATFORM_FALLBACKS
        object is removed as it's not used anywhere. g_allTestsByPlatformAndBuildType is now filled by
        traversing the platforms tree.
        (traversePlatformsTree.traverse):
        (traversePlatformsTree): A helper function that traverses the platforms tree, invoking
        callback on each leaf node.
        (determineWKPlatform): A helper function to determine whether the builder is running WebKit1 or
        WebKit2 layer of a given platform.
        (chromiumPlatform): Chromium-specific platforms are now properly prefixed with 'CHROMIUM_'.
        (TestTrie): A new class that holds all the tests in a trie. The trie is constructed by iterating
        through the tests for each builder, adding each test to the trie.
        (TestTrie.prototype.forEach.traverse):
        (TestTrie.prototype.forEach): A helper function that traverses the tests trie, invoking callback on each leaf.
        (TestTrie.prototype._addTest): Aligns the test into the specified trie based on the test's path.
        (getAllTestsTrie): Instead of in list, the problematic tests from each builder are now stored in a trie.
        (individualTestsForSubstringList): Modified to traverse the trie instead of iterating the list.
        (allTestsWithResult): Ditto.
        (platformObjectForName): Splits the platform name by underscores and finds the appropriate platform object.
        (getParsedExpectations): Now operates on the passed-in parameter rather than on a global variable.
        (addTestToAllExpectationsForPlatform): Links expectations and modifiers to the test on the specified platform
        and any build type the modifiers might apply to (or all build types if there are no such modifiers).
        (processExpectationsForPlatform): Determines if the expectation should actually be processed for the given
        platform by checking if any platform's fallback platforms support platform modifier unions and if any modifiers
        represent such an union. If so, the expectation is then only processed if the given platform is in the union
        the modifier presents or there are no such modifiers.
        (processExpectations): Processes all acquired expectations by traversing the platforms tree and taking into
        account possible fallback platforms.
        (processTestRunsForBuilder):
        (realModifiers.return.modifiers.filter):
        (realModifiers): Modifiers other than build configurations and bug handles are now filtered out only if they
        are present in the platform's platform modifier unions or represent subplatforms of a platform that supports
        platform modifier unions.
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js: The test cases are updated and expanded
        where necessary to cover the changes.
        (resetGlobals):
        (test): Added a TestTrie test.

2012-10-12  Dirk Pranke  <dpranke@chromium.org>

        Update chromium bot names in garden-o-matic.

        Unreviewed, build fix.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:

2012-10-12  Ojan Vafai  <ojan@chromium.org>

        Fix bot name filters now that the Chromium bots have been renamed.
        * TestResultServer/static-dashboards/builders.js:
        (isChromiumWebkitTipOfTreeTestRunner):
        (isChromiumWebkitDepsTestRunner):
        (isChromiumTipOfTreeGTestRunner):

2012-10-12  Dirk Pranke  <dpranke@chromium.org>

        [chromium] add ML bot and update bot names
        https://bugs.webkit.org/show_bug.cgi?id=99209

        Reviewed by Eric Seidel.

        This change adds proper baseline support for Mac10.8 (Mountain
        Lion or ML) to chromium and updates the bot names from "Webkit" 
        to "WebKit" and ensures that all the bots have the OS version in
        the name on Mac and Win.

        We don't yet include a ML bot in garden-o-matic since it isn't
        green yet.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:
        (.):
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.test_get_from_builder_name):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_baseline_directory):
        (TestRebaseline.test_rebaseline_updates_expectations_file_noop):
        (test_rebaseline_updates_expectations_file):
        (test_rebaseline_does_not_include_overrides):
        (test_rebaseline_test):
        (test_rebaseline_test_and_print_scm_changes):
        (test_rebaseline_and_copy_test):
        (test_rebaseline_and_copy_test_with_lion_result):
        (test_rebaseline_and_copy_no_overwrite_test):
        (test_rebaseline_expectations):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (BuildCoverageExtrapolatorTest.test_extrapolate):

2012-10-12  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [Qt][WK2] REGRESSION(r131057): It made plugins/plugin-document-back-forward.html timeout
        https://bugs.webkit.org/show_bug.cgi?id=99152

        Reviewed by Simon Fraser.

        Even though Response was already checked in WTR WKBundlePagePolicyClient decidePolicyForResponse callback,
        this check did not take plugins into consideration when deciding whether we can show the given MIME type or not
        so added another check in WTR UI process which also includes plugins.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::decidePolicyForResponse):
        * WebKitTestRunner/TestController.h:
        (TestController):

2012-10-12  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Add tests of WebSocketEnabled preference
        https://bugs.webkit.org/show_bug.cgi?id=84982

        Reviewed by Yong Li.

        PR 209265.

        Allow WebSocketsEnabled preference setting.

        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        (TestRunner::overridePreference):

2012-10-12  Tommy Widenflycht  <tommyw@google.com>

        Creating a MediaStream subscription in watchlist
        https://bugs.webkit.org/show_bug.cgi?id=99172

        Reviewed by Yuta Kitamura.

        * Scripts/webkitpy/common/config/watchlist:

2012-10-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131160.
        http://trac.webkit.org/changeset/131160
        https://bugs.webkit.org/show_bug.cgi?id=99163

        "It should not be landed without it's follow-up because it
        break pixal and ref tests without it." (Requested by kbalazs
        on #webkit).

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:
        (TestInvocation):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::windowSnapshotImage):
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2012-10-12  Jochen Eisinger  <jochen@chromium.org>

        Create a separate gyp target for dependencies of DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=99023

        Reviewed by Tony Chang.

        This allows for pulling in the fonts and helpers required to run layout
        tests in the content_shell without depending on DumpRenderTree.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-10-12  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WTR] Do a forced repaint before generating pixel results
        https://bugs.webkit.org/show_bug.cgi?id=98654

        Reviewed by Jocelyn Turcotte.

        Do a forced repaint before grabbing the pixel snapshot. This extra
        synchronisation is necessary with the CoordinatedGraphics rendering
        backend because it has a fully asynchronous nature. This patch make
        us using the window snapshot for pixel results which is necessary to
        capture animations and other dynamic content. The actual grabbing of
        the window has not been implemented in this patch. It will come in
        a follow-up.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::dump): Store results in member variables.
        Don't close output channels yet.
        (WTR::TestInvocation::dumpResults): Added. This is where we dump
        the results if no error happened.
        (WTR):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:
        (TestInvocation):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::windowSnapshotImage):
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::forceRepaintDoneCallback):
        (WTR):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2012-10-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed compile error fix for chromium windows bot.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:

2012-10-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Another unreviewed fix for clang builders.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:

2012-10-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed compile error fix for clang builders.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:

2012-10-11  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI move instrumentation tests from chromium test set to the cross platform test set.
        https://bugs.webkit.org/show_bug.cgi?id=99046

        Reviewed by Yury Semikhatsky.

        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:

2012-10-11  Takashi Sakamoto  <tasak@google.com>

        [WebKit IDL] remove all module from idl files.
        https://bugs.webkit.org/show_bug.cgi?id=99007

        Reviewed by Kentaro Hara.

        Since current WebIDL spec doesn't support "module", remove
        module from all idl files.

        No new tests. I ran run-bindings-tests and no error was reported.

        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityTextMarker.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityTextMarkerRange.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/GCController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/TextInputController.idl:
        Removed "module".

2012-10-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131107.
        http://trac.webkit.org/changeset/131107
        https://bugs.webkit.org/show_bug.cgi?id=99126

        Causes an ASSERT (Requested by abarth|gardening on #webkit).

        * DumpRenderTree/chromium/TestRunner/AccessibilityControllerChromium.cpp:
        (AccessibilityController::getAccessibleElementById):
        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
        (AccessibilityUIElement::titleUIElementCallback):

2012-10-11  Seokju Kwon  <seokju.kwon@samsung.com>

        [EFL][WK2] Add support for Inspector
        https://bugs.webkit.org/show_bug.cgi?id=98639

        Reviewed by Kenneth Rohde Christiansen.

        Enable developer extensions when browser is created.
        And Inspector can be opened by pressing Ctrl+i on browser.

        * MiniBrowser/efl/main.c:
        (on_key_down):
        (window_create):

2012-10-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Remove "web" word in web inspector
        https://bugs.webkit.org/show_bug.cgi?id=98724

        Reviewed by Laszlo Gombos.

        *web* word is redundant in web inspector. Beside r130494 and r130479 removed *web* from EFL WK2.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createInspectorView):
        (DumpRenderTreeChrome::removeInspectorView):
        (DumpRenderTreeChrome::waitInspectorLoadFinished):
        (DumpRenderTreeChrome::onInspectorViewCreate):
        (DumpRenderTreeChrome::onInspectorViewClose):
        (DumpRenderTreeChrome::onInspectorFrameLoadFinished):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::showWebInspector):
        (TestRunner::closeWebInspector):
        * EWebLauncher/main.c:
        (on_inspector_ecore_evas_resize):
        (on_key_down):
        (on_inspector_view_create):
        (on_inspector_view_close):
        (on_inspector_view_destroyed):
        (browserCreate):
        (webInspectorCreate):
        (closeWindow):
        (main_signal_exit):

2012-10-11  Timothy Hatcher  <timothy@apple.com>

        Unreviewed watch list addition for Inspector.json.

        * Scripts/webkitpy/common/config/watchlist:

2012-10-11  Dominic Mazzoni  <dmazzoni@google.com>

        AX: labelForElement is slow when there are a lot of DOM elements
        https://bugs.webkit.org/show_bug.cgi?id=97825

        Reviewed by Ryosuke Niwa.

        Implement titleUIElement in the chromium port of DRT, and
        fix getAccessibleElementById so that it ensures the backing store
        is up-to-date.

        * DumpRenderTree/chromium/TestRunner/AccessibilityControllerChromium.cpp:
        (AccessibilityController::getAccessibleElementById):
        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
        (AccessibilityUIElement::titleUIElementCallback):

2012-10-11  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy runs individual tests twice
        https://bugs.webkit.org/show_bug.cgi?id=99098

        Reviewed by Adam Barth.

        If you were to run 'test-webkitpy webkitpy.test.main_unittests.TesterTests.test_no_tests_found',
        it would actually run the test twice. This fixes that.

        * Scripts/webkitpy/test/main.py:
        (Tester._parse_args):
        (Tester._test_names):
        * Scripts/webkitpy/test/main_unittest.py:
        (TesterTest.test_no_tests_found):
        (TesterTest):
        (TesterTest.test_individual_names_are_not_run_twice):

2012-10-11  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Exception when the layout test driver is stopped
        https://bugs.webkit.org/show_bug.cgi?id=99084

        Reviewed by Dirk Pranke.

        On chromium-android, the process is killed directly in ServerProcess.stop() as the pipes are closed first.
        Should not try to read data from the pipes after the process is killed.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess.stop): Don't read data after the process is killed.

2012-10-11  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] REGRESSION(r131033): Favicons don't work in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=99019

        Reviewed by Carlos Garcia Campos.

        Enable the favicons database by specifying the default path for
        the directory where the actual data will be stored.

        * MiniBrowser/gtk/main.c:
        (main): Set the default directory for the favicon database calling
        webkit_web_context_set_favicon_database_directory().

2012-10-11  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] NWTR should launch MiniBrowser instead of EWebLauncher after test run
        https://bugs.webkit.org/show_bug.cgi?id=99075

        Reviewed by Kenneth Rohde Christiansen.

        Pass the '-2' flag when executing run-launcher script after
        testing with WebKitTestRunner.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort.show_results_html_file):

2012-10-11  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add support for Javascript popup boxes to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=99021

        Reviewed by Kenneth Rohde Christiansen.

        Add support for JavaScript popups (alert, confirm, prompt)
        to MiniBrowser.

        * MiniBrowser/efl/main.c:
        (miniBrowserViewSmartClass):
        (browser_view_find):
        (quit_event_loop):
        (on_ok_clicked):
        (on_javascript_alert):
        (on_javascript_confirm):
        (on_javascript_prompt):
        (window_create):
        (elm_main):

2012-10-11  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][jhbuild] Disable elm-web in elementary
        https://bugs.webkit.org/show_bug.cgi?id=99005

        Reviewed by Laszlo Gombos.

        * efl/jhbuild.modules: Added --disable-web to elementary.

2012-10-11  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        REGRESSION (r129478-r129480): http/tests/loading/text-content-type-with-binary-extension.html failing on Apple MountainLion Debug WK2 (Tests)
        https://bugs.webkit.org/show_bug.cgi?id=98527

        Reviewed by Kenneth Rohde Christiansen.

        Added decidePolicyForResponse callback for WTR PagePolicyClient.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::decidePolicyForResponse):
        (WTR):
        * WebKitTestRunner/TestController.h:
        (TestController):

2012-10-11  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Make sure that -Wno-c++0x-compat is set even with production_build

        Reviewed by Simon Hausmann.

        This makes sure that QtWebKit can be built inside Qt without nullptr
        and narrowing warnings producing noise during compilation.

        * qmake/mkspecs/features/unix/default_post.prf:

2012-10-11  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Revisit setting API names and documentation
        https://bugs.webkit.org/show_bug.cgi?id=98793

        Reviewed by Kenneth Rohde Christiansen.

        Make frame flattening setting APIs to be consistent with others.

        * MiniBrowser/efl/main.c:
        (window_create):

2012-10-11 Vivek Galatage <vivekgalatage@gmail.com>

        Fix committers.py for the names of contributors to appear on webkit.org/team.html
        https://bugs.webkit.org/show_bug.cgi?id=99004

        Reviewed by Yuta Kitamura

        Some of the nicknames in the committers.py file are using the single quotes (')
        but while parsing these, JSON throws an error: Single quotes (') are not allowed in JSON
        Hence coverting these single quotes to (") so as the contributor names appear properly
        on http://www.webkit.org/team.html

        * Scripts/webkitpy/common/config/committers.py:

2012-10-10  Lucas Forschler  <lforschler@apple.com>

        Remove Apple Mac Snow Leopard bots.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2012-10-10  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add toolbar buttons to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=98883

        Reviewed by Kenneth Rohde Christiansen.

        Add toolbar buttons to MiniBrowser to support
        navigation back / forward, refresh and go
        to home page.

        * MiniBrowser/efl/main.c:
        (_Browser_Window):
        (on_back_forward_list_changed):
        (on_back_button_clicked):
        (on_forward_button_clicked):
        (on_refresh_button_clicked):
        (on_home_button_clicked):
        (create_toolbar_button):
        (window_create):

2012-10-10  Andy Estes  <aestes@apple.com>

        Fix the Lion build after r130948.

        * TestWebKitAPI/Tests/WebKit2ObjC/UserContentTest.mm:

2012-10-10  Andy Estes  <aestes@apple.com>

        Speculative build fix for Snow Leopard after r130948.

        * TestWebKitAPI/Tests/WebKit2ObjC/UserContentTest.mm: Pull the
        declaration of backgroundColorQuery out of a block to appease GCC.

2012-10-10  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][WTR] WebKitTestRunner UI process should be aware of Custom Policy Delegate
        https://bugs.webkit.org/show_bug.cgi?id=95974

        Reviewed by Kenneth Rohde Christiansen.

        Added TestController::decidePolicyForNavigationAction() function as a 'decidePolicyForNavigationAction' WKPagePolicyClient callback
        for WTR UI process. WTR bundle client notifies UI process about Custom Policy Delegate via newly added message,
        so that TestController is aware of whether Custom Policy Delegate as enabled and
        permissive. This data is used then in TestController::decidePolicyForNavigationAction for making policy decision.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setCustomPolicyDelegate):
        (WTR):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setCustomPolicyDelegate):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::setCustomPolicyDelegate):
        (WTR):
        (WTR::TestController::decidePolicyForNavigationAction):
        * WebKitTestRunner/TestController.h:
        (TestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2012-10-10  Zoltan Horvath  <zoltan@webkit.org>

        Pageload tests should measure memory usage
        https://bugs.webkit.org/show_bug.cgi?id=93958

        Reviewed by Ryosuke Niwa.

        Add JS Heap and Heap memory measurement to PageLoad tests.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump): Print memory results with DRT.
        * Scripts/old-run-webkit-tests:
        (readFromDumpToolWithTimer): Hadle memory results.
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverOutput.__init__): Add new parameter for the results.
        (Driver.__init__): Initialize the new parameter.
        (Driver.run_test):
        (Driver._read_first_block): Add support for the new headers.
        (Driver._process_stdout_line):
        (ContentBlock.__init__):
        * Scripts/webkitpy/performance_tests/perftest.py:
        (PageLoadingPerfTest.calculate_statistics): Move statistics calculation into a function.
        (PageLoadingPerfTest.run): Handle the new memory results.
        (PageLoadingPerfTest.run.in):
        (PageLoadingPerfTest):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py: Add test for memory results of pageloadtests.
        (TestPageLoadingPerfTest.MockDriver.__init__):
        (TestPageLoadingPerfTest.MockDriver.run_test):
        (TestPageLoadingPerfTest.test_run_with_memory_output):

2012-10-04  Andy Estes  <aestes@apple.com>

        [WebKit2] Create an API for adding and removing user stylesheets from a page group
        https://bugs.webkit.org/show_bug.cgi?id=98432

        Reviewed by Sam Weinig.

        Add three new API tests:

        - Test adding a user stylesheet before a page is created. This tests
        the code path where the sheet is sent to the web process as part of
        the new page's WebPageCreationParameters.
        - Test adding a user stylesheet after a page is created. This tests the
        code patch where the sheet is sent as a separate message to all
        processes containing the given page group.
        - Test removing all user stylesheets.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2ObjC/UserContentTest.mm: Added.
        (-[UserContentTestLoadDelegate initWithBlockToRunOnLoad:]):
        (-[UserContentTestLoadDelegate browsingContextControllerDidFinishLoad:]):
        (expectScriptValue):
        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextGroupTest.mm:

2012-10-10  Dan Bernstein  <mitz@apple.com>

        Changed debug-safari, debug-minibrowser and debug-test-runner to use LLDB by default when
        using Xcode 4.5 or later.

        Reviewed by Anders Carlsson.

        * Scripts/webkitdirs.pm:
        (determineDebugger): Changed the default debugger from GDB to LLDB when the Xcode version
        is 4.5 or later. Added a --use-gdb switch for overriding this.
        (printHelpAndExitForRunAndDebugWebKitAppIfNeeded): Updated to mention --use-gdb and the
        how the default debugger choice depends on the Xcode version. Also changed the description
        of --no-saved-state to use the same terminology Xcode’s scheme editor uses to describe this
        option, and clarified to which OS X versions it applies.

2012-10-10  Antonio Gomes  <agomes@rim.com>

        Unreviewed watch list addition.

        * Scripts/webkitpy/common/config/watchlist:

2012-10-10  Dirk Pranke  <dpranke@chromium.org>

        NRWT crashes on too many timeouts
        https://bugs.webkit.org/show_bug.cgi?id=97047

        Reviewed by Tony Chang.

        Apparently if you kill a subprocess directly python doesn't
        auto-close the file descriptors.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess._reset):
        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:

2012-10-10  Zan Dobersek  <zandobersek@gmail.com>

        [TestResultServer] Enable CORS for test files
        https://bugs.webkit.org/show_bug.cgi?id=98918

        Reviewed by Dirk Pranke.

        Serve the JSON test files with the Access-Control-Allow-Origin
        response header to enable cross-origin sharing of these files.
        This eases up hacking on TestResultServer.

        * TestResultServer/handlers/testfilehandler.py:
        (GetFile._serve_json):

2012-10-10  Andreas Kling  <kling@webkit.org>

        Future-proof the WTF.DoubleHashCollisions test.
        <http://webkit.org/b/98853>

        Reviewed by Anders Carlsson.

        Add a check that the two keys that are supposed to clobber each other actually end up
        in the same bucket with the DefaultHash<double> hash function.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::bucketForKey):
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2012-10-10  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Test drivers should handle repaint rects
        https://bugs.webkit.org/show_bug.cgi?id=68870

        Reviewed by Zoltan Herczeg.

        Implemented masking the area not covered by repaint rects.
        This is equivalent with the implementation for Mac.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::display):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2012-10-10  Vivek Galatage  <vivekgalatage@gmail.com>

        [Qt]QtTestBrowser should have default url(google.com) when no command line args
        https://bugs.webkit.org/show_bug.cgi?id=98880

        Reviewed by Simon Hausmann.

        Making QtTestBrowser use www.google.com as default url when no arguments are passed

        * QtTestBrowser/qttestbrowser.cpp:
        (main):

2012-10-10  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Port MiniBrowser to Elementary
        https://bugs.webkit.org/show_bug.cgi?id=98748

        Reviewed by Kenneth Rohde Christiansen.

        Port MiniBrowser to Elementary to simplify the
        code and make future improvements easier. The
        URL bar is now an Elementary Entry widget and
        supports additional functionality like copy /
        paste.

        * CMakeLists.txt:
        * EWebLauncher/url_bar.c:
        (on_urlbar_key_down): Remove WK2-specific code
        now that this file is no longer used by MiniBrowser.
        * MiniBrowser/efl/CMakeLists.txt:
        * MiniBrowser/efl/main.c:
        (_Browser_Window):
        (window_free):
        (window_close):
        (view_focus_set):
        (on_mouse_down):
        (title_set):
        (on_title_changed):
        (on_url_changed):
        (on_close_window):
        (on_progress):
        (quit):
        (on_url_bar_activated):
        (on_url_bar_clicked):
        (on_window_deletion):
        (window_create):
        (elm_main):
        * efl/jhbuild.modules: Add Elementary to jhbuild and bump
        EFL dependencies to 1.7.

2012-10-10  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][SOUP] ResourceError.isCancellation() is not carried over IPC
        https://bugs.webkit.org/show_bug.cgi?id=98882

        Reviewed by Kenneth Rohde Christiansen.

        Do not display the error page in MiniBrowser if the loading
        error corresponds to a cancellation.

        * MiniBrowser/efl/main.c:
        (on_error):

2012-10-09  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] WTR: Fix an assert triggered by EventSenderProxy::touchEnd
        https://bugs.webkit.org/show_bug.cgi?id=98735

        Reviewed by Kenneth Rohde Christiansen.

        ASSERT: "itemForTouchPointId.isEmpty()" in file qt5/qtdeclarative/src/quick/items/qquickwindow.cpp, line 1563
        This assert is caused by QQuickWindow not registering our TouchPointReleased
        since it expects QTouchEvent::touchPointStates() to be filled by the event's sender.

        This patch calculates the touchPointStates like QQuickWindowPrivate::touchEventWithPoints does.

        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::sendTouchEvent):

2012-10-10  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] DumpRenderTree needs a beginDragWithFiles implementation
        https://bugs.webkit.org/show_bug.cgi?id=50902

        Reviewed by Simon Hausmann.

        Implement support for beginDragWithFiles. This function similates dragging without going
        though regular event handling. Which allows us to test effects of dropping files on
        different elements.

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::EventSender):
        (EventSender::mouseUp):
        (EventSender::mouseMoveTo):
        (EventSender::beginDragWithFiles):
        * DumpRenderTree/qt/EventSenderQt.h:
        (EventSender):

2012-10-10  KwangYong Choi  <ky0.choi@samsung.com>

        [EFL][WTR][CMake] Add a missing TestNetscapePlugin file
        https://bugs.webkit.org/show_bug.cgi?id=98637

        Reviewed by Kenneth Rohde Christiansen.

        PluginScriptableObjectOverridesAllProperties.cpp is used during
        plugins/npruntime/overrides-all-properties.html test introduced by r123936.

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:

2012-10-10  Kenichi Ishibashi  <bashi@chromium.org>

        Update pywebsocket to 0.7.7
        https://bugs.webkit.org/show_bug.cgi?id=98872

        Reviewed by Yuta Kitamura.

        This version contains server-side permessage-compress extension support.
        We need this version to add tests for permessage-compress extension.

        I confirmed all tests under http/tests/websocket passed.

        * Scripts/webkitpy/thirdparty/mod_pywebsocket/__init__.py:
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/_stream_hixie75.py:
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/_stream_hybi.py:
        (parse_frame):
        (FragmentedFrameBuilder.__init__):
        (FragmentedFrameBuilder.build):
        (create_closing_handshake_body):
        (StreamOptions.__init__):
        (Stream.__init__):
        (Stream._receive_frame._receive_bytes):
        (Stream._receive_frame):
        (Stream.receive_filtered_frame):
        (Stream.send_message):
        (Stream._get_message_from_frame):
        (Stream):
        (Stream._process_close_message):
        (Stream._process_ping_message):
        (Stream._process_pong_message):
        (Stream.receive_message):
        (Stream._send_closing_handshake):
        (Stream.get_last_received_opcode):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/common.py:
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/dispatch.py:
        (Dispatcher.transfer_data):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/extensions.py:
        (ExtensionProcessorInterface.name):
        (DeflateStreamExtensionProcessor):
        (DeflateStreamExtensionProcessor.name):
        (_log_compression_ratio):
        (_log_decompression_ratio):
        (DeflateFrameExtensionProcessor):
        (DeflateFrameExtensionProcessor.name):
        (DeflateFrameExtensionProcessor._outgoing_filter):
        (DeflateFrameExtensionProcessor._incoming_filter):
        (CompressionExtensionProcessorBase):
        (CompressionExtensionProcessorBase.for):
        (CompressionExtensionProcessorBase.__init__):
        (CompressionExtensionProcessorBase.name):
        (CompressionExtensionProcessorBase._get_compression_processor_response):
        (CompressionExtensionProcessorBase.set_compression_processor_hook):
        (PerFrameCompressionExtensionProcessor):
        (PerFrameCompressionExtensionProcessor.__init__):
        (PerFrameCompressionExtensionProcessor.name):
        (PerFrameCompressionExtensionProcessor._lookup_compression_processor):
        (DeflateMessageProcessor):
        (DeflateMessageProcessor.__init__):
        (DeflateMessageProcessor.name):
        (DeflateMessageProcessor.get_extension_response):
        (DeflateMessageProcessor.setup_stream_options):
        (DeflateMessageProcessor.setup_stream_options._OutgoingMessageFilter):
        (DeflateMessageProcessor.setup_stream_options._OutgoingMessageFilter.__init__):
        (DeflateMessageProcessor.setup_stream_options._OutgoingMessageFilter.filter):
        (DeflateMessageProcessor.setup_stream_options._IncomingMessageFilter):
        (DeflateMessageProcessor.setup_stream_options._IncomingMessageFilter.__init__):
        (DeflateMessageProcessor.setup_stream_options._IncomingMessageFilter.decompress_next_message):
        (DeflateMessageProcessor.setup_stream_options._IncomingMessageFilter.filter):
        (DeflateMessageProcessor.setup_stream_options._OutgoingFrameFilter):
        (DeflateMessageProcessor.setup_stream_options._OutgoingFrameFilter.__init__):
        (DeflateMessageProcessor.setup_stream_options._OutgoingFrameFilter.set_compression_bit):
        (DeflateMessageProcessor.setup_stream_options._OutgoingFrameFilter.filter):
        (DeflateMessageProcessor.setup_stream_options._IncomingFrameFilter):
        (DeflateMessageProcessor.setup_stream_options._IncomingFrameFilter.__init__):
        (DeflateMessageProcessor.setup_stream_options._IncomingFrameFilter.filter):
        (DeflateMessageProcessor.set_c2s_max_window_bits):
        (DeflateMessageProcessor.set_c2s_no_context_takeover):
        (DeflateMessageProcessor.enable_outgoing_compression):
        (DeflateMessageProcessor.disable_outgoing_compression):
        (DeflateMessageProcessor._process_incoming_message):
        (DeflateMessageProcessor._process_outgoing_message):
        (DeflateMessageProcessor._process_incoming_frame):
        (DeflateMessageProcessor._process_outgoing_frame):
        (PerMessageCompressionExtensionProcessor):
        (PerMessageCompressionExtensionProcessor.__init__):
        (PerMessageCompressionExtensionProcessor.name):
        (PerMessageCompressionExtensionProcessor._lookup_compression_processor):
        (MuxExtensionProcessor):
        (MuxExtensionProcessor.__init__):
        (MuxExtensionProcessor.name):
        (MuxExtensionProcessor.get_extension_response):
        (MuxExtensionProcessor.setup_stream_options):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/__init__.py:
        (do_handshake):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/_base.py:
        (validate_subprotocol):
        (check_request_line):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/draft75.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/hybi.py:
        (Handshaker.do_handshake):
        (Handshaker._set_protocol):
        (Handshaker._create_stream):
        (Handshaker):
        (Handshaker._create_handshake_response):
        (Handshaker._send_handshake):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/headerparserhandler.py:
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/msgutil.py:
        (send_message):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/mux.py: Added.
        (MuxUnexpectedException):
        (MuxNotImplementedException):
        (LogicalConnectionClosedException):
        (PhysicalConnectionError):
        (PhysicalConnectionError.__init__):
        (LogicalChannelError):
        (LogicalChannelError.__init__):
        (_encode_channel_id):
        (_encode_number):
        (_create_add_channel_response):
        (_create_drop_channel):
        (_create_flow_control):
        (_create_new_channel_slot):
        (_create_fallback_new_channel_slot):
        (_parse_request_text):
        (_ControlBlock):
        (_ControlBlock.__init__):
        (_MuxFramePayloadParser):
        (_MuxFramePayloadParser.that):
        (_MuxFramePayloadParser.__init__):
        (_MuxFramePayloadParser.read_channel_id):
        (_MuxFramePayloadParser.read_inner_frame):
        (_MuxFramePayloadParser._read_number):
        (_MuxFramePayloadParser._read_size_and_contents):
        (_MuxFramePayloadParser._read_add_channel_request):
        (_MuxFramePayloadParser._read_add_channel_response):
        (_MuxFramePayloadParser._read_flow_control):
        (_MuxFramePayloadParser._read_drop_channel):
        (_MuxFramePayloadParser._read_new_channel_slot):
        (_MuxFramePayloadParser.read_control_blocks):
        (_MuxFramePayloadParser.remaining_data):
        (_LogicalRequest):
        (_LogicalRequest.__init__):
        (_LogicalRequest.is_https):
        (_LogicalConnection):
        (_LogicalConnection.__init__):
        (_LogicalConnection.get_local_addr):
        (_LogicalConnection.get_remote_addr):
        (_LogicalConnection.get_memorized_lines):
        (_LogicalConnection.write):
        (_LogicalConnection.write_control_data):
        (_LogicalConnection.notify_write_done):
        (_LogicalConnection.append_frame_data):
        (_LogicalConnection.read):
        (_LogicalConnection.set_read_state):
        (_LogicalStream):
        (_LogicalStream.interprets):
        (_LogicalStream.__init__):
        (_LogicalStream._create_inner_frame):
        (_LogicalStream._write_inner_frame):
        (_LogicalStream.replenish_send_quota):
        (_LogicalStream.consume_receive_quota):
        (_LogicalStream.send_message):
        (_LogicalStream._receive_frame):
        (_LogicalStream.receive_message):
        (_LogicalStream._send_closing_handshake):
        (_LogicalStream.send_ping):
        (_LogicalStream._send_pong):
        (_LogicalStream.close_connection):
        (_LogicalStream._drain_received_data):
        (_OutgoingData):
        (_OutgoingData.__init__):
        (_PhysicalConnectionWriter):
        (_PhysicalConnectionWriter.__init__):
        (_PhysicalConnectionWriter.put_outgoing_data):
        (_PhysicalConnectionWriter._write_data):
        (_PhysicalConnectionWriter.run):
        (_PhysicalConnectionWriter.stop):
        (_PhysicalConnectionReader):
        (_PhysicalConnectionReader.__init__):
        (_PhysicalConnectionReader.run):
        (_Worker):
        (_Worker.__init__):
        (_Worker.run):
        (_MuxHandshaker):
        (_MuxHandshaker.__init__):
        (_MuxHandshaker._create_stream):
        (_MuxHandshaker._create_handshake_response):
        (_MuxHandshaker._send_handshake):
        (_LogicalChannelData):
        (_LogicalChannelData.__init__):
        (_HandshakeDeltaBase):
        (_HandshakeDeltaBase.that):
        (_HandshakeDeltaBase.__init__):
        (_HandshakeDeltaBase.create_headers):
        (_MuxHandler):
        (_MuxHandler.are):
        (_MuxHandler.__init__):
        (_MuxHandler.start):
        (_MuxHandler.add_channel_slots):
        (_MuxHandler.wait_until_done):
        (_MuxHandler.notify_write_done):
        (_MuxHandler.send_control_data):
        (_MuxHandler.send_data):
        (_MuxHandler._send_drop_channel):
        (_MuxHandler._send_error_add_channel_response):
        (_MuxHandler._create_logical_request):
        (_MuxHandler._do_handshake_for_logical_request):
        (_MuxHandler._add_logical_channel):
        (_MuxHandler._process_add_channel_request):
        (_MuxHandler._process_flow_control):
        (_MuxHandler._process_drop_channel):
        (_MuxHandler._process_control_blocks):
        (_MuxHandler._process_logical_frame):
        (_MuxHandler.dispatch_message):
        (_MuxHandler.notify_worker_done):
        (_MuxHandler.notify_reader_done):
        (_MuxHandler.fail_physical_connection):
        (_MuxHandler.fail_logical_channel):
        (use_mux):
        (start):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/standalone.py:
        (_StandaloneRequest.get_protocol):
        (_StandaloneRequest):
        (_alias_handlers):
        (WebSocketServer.__init__):
        (WebSocketServer._create_sockets):
        (WebSocketServer.server_bind):
        (WebSocketServer.server_activate):
        (WebSocketRequestHandler.parse_request):
        (_configure_logging):
        (_build_option_parser):
        (_main):
        (_main.if):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/stream.py:
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/util.py:
        (_Deflater.compress):
        (_RFC1979Deflater.filter):

2012-10-09  Damian Kaleta  <dkaleta@apple.com>

        extract-localizable-strings script should be able to handle paths to files containing whitespaces.
        https://bugs.webkit.org/show_bug.cgi?id=98844

        Reviewed by Dan Bernstein.

        * Scripts/extract-localizable-strings: Added ability to handle whitespace.

2012-10-09  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [Cairo] Bump Cairo to fix more canvas/philip tests
        https://bugs.webkit.org/show_bug.cgi?id=97658

        Reviewed by Martin Robinson.

        Bumping cairo to version 1.12.4 which fixes more canvas/philip tests.

        * efl/jhbuild.modules:
        * gtk/jhbuild.modules:

2012-10-09  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed Chromium Windows build fix after r130823.

        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
        (roleToString): Re-added the 'default' label as some cases are not handled.

2012-10-09  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        [chromium] Add drop event for plugins.
        https://bugs.webkit.org/show_bug.cgi?id=98827

        Reviewed by Adam Barth.

        Update the test plugin to receive drop events.

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (TestWebPlugin::handleDragStatusUpdate):

2012-10-09  Dominic Mazzoni  <dmazzoni@google.com>

        AX: 5 accessibility tests just need minor tweaks to pass on chromium
        https://bugs.webkit.org/show_bug.cgi?id=98311

        Reviewed by Chris Fleizach.

        Update roleToString on Chromium to include all missing roles,
        which enables some layout tests to pass.

        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
        (roleToString):

2012-10-09  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch rebaseline-expectations doesn't work w/o failures specified
        https://bugs.webkit.org/show_bug.cgi?id=98810

        Reviewed by Ojan Vafai.

        If you try to mark a test as foo.html [ Rebaseline ] it wasn't
        getting picked up for rebaselining; we needed to think the test
        was failing.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.get_rebaselining_failures):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (RebaseliningTest.test_get_rebaselining_failures):

2012-10-09  Daniel Bates  <dbates@webkit.org>

        VCSUtils.pm doesn't support SVN 1.7 diff files
        <https://bugs.webkit.org/show_bug.cgi?id=80762>

        Reviewed by Eric Seidel.

        Implement support for the SVN 1.7 diff format.

        * Scripts/VCSUtils.pm:
        (parseChunkRange): Modified to support parsing an SVN 1.7 chunk range
        that begins and ends with "##" (e.g. ## -0,0 +1,7 ##). For comparison,
        earlier versions of SVN parsed chunk ranges of the form "@@ -0,0 +1,7 @@".

        (parseSvnDiffHeader): Modified to parse an SVN 1.7 binary diff; SVN 1.7
        has an unusual display format for a binary diff. It repeats the first
        two lines of the diff header.

        (parseSvnProperty): Modified to ignore both an SVN 1.7 chunk range and
        lines of the form "\ No newline at end of property". SVN 1.7 emits the latter
        message after a property value that doesn't end in a newline.

        (parseSvnPropertyValue): Stop parsing an SVN property value when we encounter
        a line of the form "\ No newline at end of property" (emitted by svn diff as of
        SVN 1.7).

        * Scripts/webkitperl/VCSUtils_unittest/parseChunkRange.pl:
          - Added the following unit tests:
          "Line count is 0"
          "New line count is 1"

        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffFooter.pl:
          - Added the following unit tests:
          "svn:executable followed by custom property using SVN 1.7 syntax"
          "svn:executable followed by custom property without newline using SVN 1.7 syntax"

        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffHeader.pl:
          - Updated test results for test "binary file".
          - Added unit test "binary file using SVN 1.7 syntax".

        * Scripts/webkitperl/VCSUtils_unittest/parseSvnProperty.pl:
          - Added the following unit tests:
          "simple: add svn:executable using SVN 1.7 syntax"
          "simple: delete svn:executable using SVN 1.7 syntax"
          "add svn:mime-type and add svn:executable using SVN 1.7 syntax"

        * Scripts/webkitperl/VCSUtils_unittest/parseSvnPropertyValue.pl:
          - Added the following unit tests:
          "singe-line '+' change using SVN 1.7 syntax"
          "single-line '-' change using SVN 1.7 syntax"

2012-10-09  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r128488.
        http://trac.webkit.org/changeset/128488
        https://bugs.webkit.org/show_bug.cgi?id=96678

        The bot is fixed now

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        (.):

2012-10-09  Zan Dobersek  <zandobersek@gmail.com>

        XvfbDriver unit test is flaky on Linux builders
        https://bugs.webkit.org/show_bug.cgi?id=98346

        Reviewed by Adam Barth.

        Temporarily skip the XvfbDriver test case that tests
        the display number of the next free display. The test
        is flaky on Linux builders.

        * Scripts/webkitpy/layout_tests/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.disabled_test_next_free_display):

2012-10-09  Ojan Vafai  <ojan@chromium.org>

        Don't duplicated build numbers when merging flakiness dashboard JSON
        https://bugs.webkit.org/show_bug.cgi?id=98812

        Reviewed by Dirk Pranke.

        In general, build numbers are not unique, but we should basically never
        get the same build number uploaded twice in a row. This is a workaround
        for https://bugs.webkit.org/show_bug.cgi?id=97643, which frequently hits this
        because we update results_small.json and timeout updating results.json and then
        we retry the whole request.

        * TestResultServer/model/jsonresults.py:
        (JsonResults.merge):
        * TestResultServer/model/jsonresults_unittest.py:
        (JsonResultsTest.test_merge_duplicate_build_number):

2012-10-09  Alexis Menard  <alexis@webkit.org>

        [GTK] Shadow builds are not working anymore.
        https://bugs.webkit.org/show_bug.cgi?id=98785

        Reviewed by Martin Robinson.

        When setting WEBKITOUTPUTDIR the build was failing with a python
        error : the os.execve expect three arguments. Also the condition
        to check whether we build the GTK port with jhbuild or not was buggy
        as it was always assuming an in source build. We can use now jhbuildutils
        which has a convenient function to locate the directory where 
        the dependencies built with jhbuild are and take into account WEBKITOUTPUTDIR.
        If the Dependencies path does not exist then the build was not done using
        jhbuild so we can fallback to a regular build against system libraries.

        * gtk/run-with-jhbuild:

2012-10-08  Simon Fraser  <simon.fraser@apple.com>

        Remove DRT/WTR implementations of layerTreeAsText
        https://bugs.webkit.org/show_bug.cgi?id=98697

        Reviewed by Tim Horton, James Robinson, Alexey Proskuryakov.

        Remove code related to layerTreeAsText(), which is now on window.internals.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/wx/TestRunnerWx.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2012-10-09  Zoltan Horvath  <zoltan@webkit.org>

        Unreviewed. Remove myself from QtWebKit2 subscriptions.

        * Scripts/webkitpy/common/config/watchlist:

2012-10-09  Harald Alvestrand  <hta@google.com>

        Change PeerConnection getStats function to single value local / remote
        elements in RTCStatsReport.
        https://bugs.webkit.org/show_bug.cgi?id=98753

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::getStats):

2012-10-09  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        [chromium] Make sure events are transformed correctly for plugins.
        https://bugs.webkit.org/show_bug.cgi?id=89250

        Reviewed by Tony Chang.

        Update the test plugin to print event details for mouse and gesture events.

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (printEventDetails):

2012-10-09  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed trivial Qt build fix: Remove stray closing braces from r130758.

        * qmake/mkspecs/features/features.prf:

2012-10-09  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Clean up Qt module detection

        Reviewed by Tor Arne Vestbø.

        Replace the use of MOBILITY_CONFIG (not supported anymore) with modern use of haveQtModule.

        * qmake/mkspecs/features/features.prf:

2012-10-09  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [GTK] Respect WEBKITOUTPUTDIR in run-with-jhbuild.
        https://bugs.webkit.org/show_bug.cgi?id=98732

        Reviewed by Gustavo Noronha Silva.

        Follow-up to r113066: if the WEBKITOUTPUTDIR environment variable
        was used when running update-webkitgtk-libs,
        WebKitBuild/Dependencies will not exist, so we now check its
        contents first and then fall back to WebKitBuild/.

        * gtk/run-with-jhbuild:

2012-10-09  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed GTK gardening.

        Skipping the accept-policy test in TestCookieManager API test that's
        currently failing. The test failure is covered by
        https://bugs.webkit.org/show_bug.cgi?id=98738.

        * Scripts/run-gtk-tests:
        (TestRunner):

2012-10-09  Laszlo Gombos  <l.gombos@samsung.com>

        [Qt] Remove redundant JAVASCRIPTCORE_JIT variable
        https://bugs.webkit.org/show_bug.cgi?id=50000

        Reviewed by Simon Hausmann.

        Use ENABLE_JIT instead.

        * qmake/mkspecs/features/valgrind.prf:

2012-10-08  Kiran Muppala  <cmuppala@apple.com>

        Throttle DOM timers on hidden pages.
        https://bugs.webkit.org/show_bug.cgi?id=98474

        Reviewed by Maciej Stachowiak.

        Implement testRunner.setPageVisibility on mac for testing throttling
        of timers on hidden pages using DumpRenderTree.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        Fix build error on mac-ews bot.  Add JSC copy of ICU headers to search path.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::resetPageVisibility):
        (TestRunner::setPageVisibility):

2012-10-08  Dirk Pranke  <dpranke@chromium.org>

        results.html and garden-o-matic are ignoring IMAGE failures when expected to FAIL
        https://bugs.webkit.org/show_bug.cgi?id=98706

        Reviewed by Ojan Vafai.

        FAIL is supposed to map onto Failure which is supposed to map
        onto the old [ TEXT, IMAGE_PLUS_TEXT, AUDIO ] mapping.
        results.html was including IMAGE in this and garden-o-matic was
        including CRASH and TIMEOUT as well :(.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js:

2012-10-08  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Build ControlTheme only when necessary
        https://bugs.webkit.org/show_bug.cgi?id=98519

        Reviewed by Eric Seidel.

        * EWebLauncher/ControlTheme/CMakeLists.txt:
        Added custom command keyword not to build ControlTheme every time.
        In addition, removed `ALL` keyword because targets, which use ControlTheme,
        already have dependency.

2012-10-08  Peter Rybin  <peter.rybin@gmail.com>

        Do not swallow fatal messages in qt/DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=98211

        Reviewed by Eric Seidel.

        Fix condition in message type filtering.

        * DumpRenderTree/qt/DumpRenderTreeMain.cpp:
        (messageHandler):

2012-10-08  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Unreviewed. Moving myself from Committer to Reviewer list.
        http://lists.webkit.org/pipermail/webkit-dev/2012-October/022460.html

        * Scripts/webkitpy/common/config/committers.py:

2012-10-08  Dirk Pranke  <dpranke@chromium.org>

        nrwt: [chromium] run http tests in parallel on bigger machines
        https://bugs.webkit.org/show_bug.cgi?id=98562

        Reviewed by Eric Seidel.

        The "locked tests" shard (which includes the http tests and the
        perf tests) is the long pole on machines where we have 4 or more
        workers, so we should start making sure that
        we can run http tests in parallel, following the normal sharding
        rules (all tests in the same directory are in the same shard by
        default). We should still probably limit the number of workers
        hitting the web server in parallel where we can; a heuristic of
        no more than 25% of them seems okay for a start. This will
        likely only affect developer workstations and a couple of bots
        at first, so should be low risk and a good reward.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.default_max_locked_shards):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.default_max_locked_shards):
        * Scripts/webkitpy/layout_tests/port/chromium_port_testcase.py:
        (ChromiumPortTestCase.test_default_max_locked_shards):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_default_max_locked_shards):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        (parse_args):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_max_locked_shards):

2012-10-08  Zan Dobersek  <zandobersek@gmail.com>

        GTK port should warn if bug modifier is missing in TestExpectations
        https://bugs.webkit.org/show_bug.cgi?id=98678

        Reviewed by Dirk Pranke.

        Reimplement the warn_if_bug_missing_in_test_expectations method in
        GtkPort, returning True for producing a warning in such cases.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.warn_if_bug_missing_in_test_expectations):

2012-10-08  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][DRT] Switch default backing store to single
        https://bugs.webkit.org/show_bug.cgi?id=98591

        Reviewed by Eric Seidel.

        There are two backing stores for WebKit/Efl, Single Backing Store(SBS) and
        Tiled Backing Store(TBS), and DRT/Efl has used TBS.
        But, TBS is not suitable to run pixel tests because it does not have a good way
        to render mock scrollbars well.

        So, this patch changes the default backing store to SBS.
        In addition, this changes the environment variable from DRT_USE_SINGLE_BACKING_STORE
        to DRT_USE_TILED_BACKING_STORE.

        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (shouldUseTiledBackingStore):
        (chooseAndInitializeAppropriateSmartClass):

2012-10-08  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [WK2][WTR] WebKitTestRunner needs testRunner.dispatchPendingLoadRequests
        https://bugs.webkit.org/show_bug.cgi?id=98638

        Reviewed by Eric Seidel.

        Add implementation for testRunner.dispatchPendingLoadRequests in
        WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::dispatchPendingLoadRequests):
        (WTR):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2012-10-08  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add support for window.close in Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=98667

        Reviewed by Laszlo Gombos.

        When calling window.close() from JavaScript, MiniBrowser
        now closes the given window.

        * MiniBrowser/efl/main.c:
        (window_close):
        (on_ecore_evas_delete):
        (on_close_window):
        (window_create):

2012-10-08  Ojan Vafai  <ojan@chromium.org>

        Properly strip new tests from the test results json if they are pass/nodata/skip.
        https://bugs.webkit.org/show_bug.cgi?id=98669

        Reviewed by Eric Seidel.

        In _merge_json, we had a codepath that didn't call _normalize_results_json
        for tests that aren't already in the aggregated results.
        Instead, now do all the merging first and then normalize the aggregated results.

        * TestResultServer/model/jsonresults.py:
        (JsonResults._merge_json):
        (JsonResults._merge_tests):
        (JsonResults._normalize_results):
        (JsonResults):
        (JsonResults._should_delete_leaf):
        * TestResultServer/model/jsonresults_unittest.py:
        Removed test_merge_build_directory_hierarchy_old_version since there is
        no longer any version 3 json to support.
        (JsonResultsTest.test_merge_remove_new_test):
        (JsonResultsTest.test_merge_prune_extra_results_with_new_result_of_same_type):

2012-10-08  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Simplify frame flattening support in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=98657

        Reviewed by Kenneth Rohde Christiansen.

        Simplify frame flattening support code in MiniBrowser to
        avoid passing the setting around to window_create()
        function().

        * MiniBrowser/efl/main.c:
        (on_key_down):
        (on_new_window):
        (window_create):
        (main):

2012-10-08  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Use Ctrl+n shortcut to create a new window in MiniBrowser / EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=98655

        Reviewed by Kenneth Rohde Christiansen.

        Use "Ctrl+n" shortcut instead of "F9" to open a new window in
        MiniBrowser and EWebLauncher. This is the shortcut that is
        commonly used for this action.

        * EWebLauncher/main.c:
        (on_key_down):
        * MiniBrowser/efl/main.c:
        (on_key_down):

2012-10-08  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add support for window.create in Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=98649

        Reviewed by Kenneth Rohde Christiansen.

        Calling window.create() from JavaScript now creates a
        new window in Minibrowser, as directed.

        * MiniBrowser/efl/main.c:
        (on_new_window):
        (window_create):

2012-10-08  Andreas Kling  <kling@webkit.org>

        Using float/double as WTF hash table key is unreliable.
        <http://webkit.org/b/98627>

        Reviewed by Geoffrey Garen.

        Add a test case checking that using double as the hash table key type won't
        have problems distinguishing between keys that are considered equal by operator==
        but have different binary representations.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestDoubleHashTraits):

2012-10-08  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Use URL instead of URI in the API
        https://bugs.webkit.org/show_bug.cgi?id=98643

        Reviewed by Kenneth Rohde Christiansen.

        Update Minibrowser to reflect API changes. We now
        use URL instead of URI in WK2 EFL API.

        * EWebLauncher/url_bar.c:
        (on_urlbar_key_down):
        * MiniBrowser/efl/CMakeLists.txt:
        * MiniBrowser/efl/main.c:
        (on_url_changed):
        (window_create):

2012-10-08  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Reenable plugin tests
        https://bugs.webkit.org/show_bug.cgi?id=98528

        Reviewed by Csaba Osztrogonác.

        Uncomment this function so we can pick up the test plugin.
        It was commented out because of https://bugs.webkit.org/show_bug.cgi?id=86620
        and that bug seems to be fixed now.

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::initializeTestPluginDirectory):

2012-10-08  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Support multiple window creation for MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=97884

        Reviewed by Kenneth Rohde Christiansen.

        Implement the multiple window creation for MiniBrowser and bind the 'F9' key for opening a new window.
        Also, refactored MiniBrowser codes according to EFL coding style.

        * MiniBrowser/efl/main.c:
        (_Browser_Window):
        (window_free):
        (main_signal_exit):
        (on_ecore_evas_delete):
        (on_ecore_evas_resize):
        (on_key_down):
        (on_title_changed):
        (on_url_changed):
        (on_progress):
        (window_create):
        (main):

2012-10-07  Seokju Kwon  <seokju.kwon@samsung.com>

        [EFL] Add Web Inspector to EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=91718

        Reviewed by Gyuyoung Kim.

        Implementation of Web Inspector in EWebLauncher.
        The Web Inspector can be opened or closed by pressing ctrl+i on web page.

        * EWebLauncher/main.c:
        (on_browser_ecore_evas_resize):
        (on_web_inspector_ecore_evas_resize):
        (on_key_down):
        (on_web_inspector_view_create):
        (on_web_inspector_view_close):
        (on_web_inspector_view_destroyed):
        (browserCreate):
        (webInspectorCreate):
        (windowCreate):
        (closeWindow):
        (main_signal_exit):
        (parseUserArguments):

2012-10-07  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Rename first/second to key/value in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=82784

        Reviewed by Eric Seidel.

        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp:
        (MockWebSpeechInputController::addMockRecognitionResult):
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::simulateClick):
        (NotificationPresenter::show):
        * DumpRenderTree/chromium/TestRunner/CppBoundClass.cpp:
        (CppBoundClass::~CppBoundClass):
        (CppBoundClass::invoke):
        (CppBoundClass::getProperty):
        (CppBoundClass::setProperty):
        (CppBoundClass::bindCallback):
        (CppBoundClass::bindProperty):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (applyFontMap):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::printResourceDescription):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (worldIDForWorld):
        (TestRunner::evaluateScriptInIsolatedWorld):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::~AccessibilityController):
        (AccessibilityController::winNotificationReceived):
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::descriptionSuitableForTestResult):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (worldIDForWorld):
        (TestRunner::evaluateScriptInIsolatedWorld):
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionBasic::willDestroyPage):
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionNoCache::willDestroyPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::worldIDForWorld):
        (WTR::TestRunner::evaluateScriptInIsolatedWorld):

2012-10-07  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Unreviewed, rolling out r130596.
        http://trac.webkit.org/changeset/130596
        https://bugs.webkit.org/show_bug.cgi?id=98616

        Broke build bots without IPV6 support

        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.is_cygwin):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.baseline_version_dir):
        (Port.to.start_websocket_server):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_operating_system):
        (PortTest.test_build_path):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd):
        (LayoutTestApacheHttpd.__init__):

2012-10-07  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        webkitpy: Pass the `Listen' Apache directive from Apache, not the httpd.conf files.
        https://bugs.webkit.org/show_bug.cgi?id=98602

        Reviewed by Eric Seidel.

        Unify all the different `Listen' directives present in the several
        httpd.conf files we have in LayoutTests/http/conf. For one, we
        were already passing `Listen 127.0.0.1:8000' via webkitpy before,
        and opening the other ports from the conf files.

        The configuration files differed mostly in the way they handled
        IPV6 ports. Some of them did not listen to IPV6 ports because the
        systems which used them sometimes did not have IPV6 support. The
        `http_server_supports_ipv6' method has been added to Port to
        address that. cygwin, on its turn, still seems to use Apache 1.3,
        which does not support IPV6 at all; the newly-added method has a
        special case for that.

        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.is_cygwin):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.baseline_version_dir):
        (Port.to.start_websocket_server):
        (Port.to):
        (Port.to.http_server_supports_ipv6):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_http_server_supports_ipv6):
        (PortTest.test_build_path):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd):
        (LayoutTestApacheHttpd.__init__):

2012-10-05  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix the SnowLeopard build to making the implementation of
        -isPaginated come before its use.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController reload:]):
        (-[WK1BrowserWindowController forceRepaint:]):
        (-[WK1BrowserWindowController goBack:]):
        (-[WK1BrowserWindowController goForward:]):
        (-[WK1BrowserWindowController isPaginated]):

2012-10-05  Simon Fraser  <simon.fraser@apple.com>

        Provide a way to run WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=98568

        Reviewed by Tim Horton.

        Make it possible to create both WebKit1 and WebKit2 windows in MiniBrowser.
        
        Turn BrowserWindowController into a base class; subclassed by
        WK1BrowserWindowController and WK2BrowserWindowController, each of
        which implement the BrowserController protocol.
        
        Use Command-N to get a WebKit1 window, and Command-Option-N to
        get a WK2 window. Also add "Open Location" to focus the URL bar,
        and code to add an http:// if missing.
        
        Hook up window title callbacks; append " [WK1/2]" to window title
        as appropriate.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate newWindow:]):
        (-[BrowserAppDelegate openPanelDidEnd:returnCode:contextInfo:]):
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController initWithWindow:]):
        (-[BrowserWindowController windowDidLoad]):
        (-[BrowserWindowController openLocation:]):
        (-[BrowserWindowController loadURLString:]):
        (-[BrowserWindowController applicationTerminating]):
        (-[BrowserWindowController addProtocolIfNecessary:]):
        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/WK1BrowserWindowController.h: Copied from Tools/MiniBrowser/mac/BrowserWindowController.h.
        (WebView):
        * MiniBrowser/mac/WK1BrowserWindowController.m: Added.
        (-[WK1BrowserWindowController awakeFromNib]):
        (-[WK1BrowserWindowController dealloc]):
        (-[WK1BrowserWindowController loadURLString:]):
        (-[WK1BrowserWindowController fetch:]):
        (-[WK1BrowserWindowController showHideWebView:]):
        (-[WK1BrowserWindowController removeReinsertWebView:]):
        (-[WK1BrowserWindowController validateMenuItem:]):
        (-[WK1BrowserWindowController reload:]):
        (-[WK1BrowserWindowController forceRepaint:]):
        (-[WK1BrowserWindowController goBack:]):
        (-[WK1BrowserWindowController goForward:]):
        (-[WK1BrowserWindowController validateUserInterfaceItem:]):
        (-[WK1BrowserWindowController validateToolbar]):
        (-[WK1BrowserWindowController windowShouldClose:]):
        (-[WK1BrowserWindowController windowWillClose:]):
        (-[WK1BrowserWindowController applicationTerminating]):
        (-[WK1BrowserWindowController currentZoomFactor]):
        (-[WK1BrowserWindowController canZoomIn]):
        (-[WK1BrowserWindowController zoomIn:]):
        (-[WK1BrowserWindowController canZoomOut]):
        (-[WK1BrowserWindowController zoomOut:]):
        (-[WK1BrowserWindowController canResetZoom]):
        (-[WK1BrowserWindowController resetZoom:]):
        (-[WK1BrowserWindowController toggleZoomMode:]):
        (-[WK1BrowserWindowController isPaginated]):
        (-[WK1BrowserWindowController togglePaginationMode:]):
        (-[WK1BrowserWindowController find:]):
        (-[WK1BrowserWindowController dumpSourceToConsole:]):
        (-[WK1BrowserWindowController webView:didStartProvisionalLoadForFrame:]):
        (-[WK1BrowserWindowController webView:didReceiveTitle:forFrame:]):
        * MiniBrowser/mac/WK2BrowserWindowController.h: Copied from Tools/MiniBrowser/mac/BrowserWindowController.h.
        * MiniBrowser/mac/WK2BrowserWindowController.m: Copied from Tools/MiniBrowser/mac/BrowserWindowController.m.
        (-[WK2BrowserWindowController initWithContext:pageGroup:]):
        (-[WK2BrowserWindowController dealloc]):
        (-[WK2BrowserWindowController fetch:]):
        (-[WK2BrowserWindowController showHideWebView:]):
        (-[WK2BrowserWindowController removeReinsertWebView:]):
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController reload:]):
        (-[WK2BrowserWindowController forceRepaint:]):
        (-[WK2BrowserWindowController goBack:]):
        (-[WK2BrowserWindowController goForward:]):
        (-[WK2BrowserWindowController validateUserInterfaceItem:]):
        (-[WK2BrowserWindowController validateToolbar]):
        (-[WK2BrowserWindowController windowShouldClose:]):
        (-[WK2BrowserWindowController windowWillClose:]):
        (-[WK2BrowserWindowController applicationTerminating]):
        (-[WK2BrowserWindowController currentZoomFactor]):
        (-[WK2BrowserWindowController setCurrentZoomFactor:]):
        (-[WK2BrowserWindowController canZoomIn]):
        (-[WK2BrowserWindowController zoomIn:]):
        (-[WK2BrowserWindowController canZoomOut]):
        (-[WK2BrowserWindowController zoomOut:]):
        (-[WK2BrowserWindowController canResetZoom]):
        (-[WK2BrowserWindowController resetZoom:]):
        (-[WK2BrowserWindowController toggleZoomMode:]):
        (-[WK2BrowserWindowController isPaginated]):
        (-[WK2BrowserWindowController togglePaginationMode:]):
        (-[WK2BrowserWindowController dumpSourceToConsole:]):
        (didStartProvisionalLoadForFrame):
        (didReceiveServerRedirectForProvisionalLoadForFrame):
        (didFailProvisionalLoadWithErrorForFrame):
        (didCommitLoadForFrame):
        (didFinishDocumentLoadForFrame):
        (didFinishLoadForFrame):
        (didFailLoadWithErrorForFrame):
        (didSameDocumentNavigationForFrame):
        (didReceiveTitleForFrame):
        (didFirstLayoutForFrame):
        (didFirstVisuallyNonEmptyLayoutForFrame):
        (didRemoveFrameFromHierarchy):
        (didDisplayInsecureContentForFrame):
        (didRunInsecureContentForFrame):
        (didDetectXSSForFrame):
        (didStartProgress):
        (didChangeProgress):
        (didFinishProgress):
        (didBecomeUnresponsive):
        (didBecomeResponsive):
        (processDidExit):
        (didChangeBackForwardList):
        (decidePolicyForNavigationAction):
        (decidePolicyForNewWindowAction):
        (decidePolicyForResponse):
        (createNewPage):
        (showPage):
        (closePage):
        (runJavaScriptAlert):
        (runJavaScriptConfirm):
        (runJavaScriptPrompt):
        (setStatusText):
        (mouseDidMoveOverElement):
        (getWindowFrame):
        (setWindowFrame):
        (runBeforeUnloadConfirmPanel):
        (runOpenPanel):
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController didStartProgress]):
        (-[WK2BrowserWindowController didChangeProgress:]):
        (-[WK2BrowserWindowController didFinishProgress]):
        (-[WK2BrowserWindowController updateProvisionalURLForFrame:]):
        (-[WK2BrowserWindowController didStartProvisionalLoadForFrame:]):
        (-[WK2BrowserWindowController didReceiveServerRedirectForProvisionalLoadForFrame:]):
        (-[WK2BrowserWindowController didFailProvisionalLoadWithErrorForFrame:]):
        (-[WK2BrowserWindowController didFailLoadWithErrorForFrame:]):
        (-[WK2BrowserWindowController didSameDocumentNavigationForFrame:]):
        (-[WK2BrowserWindowController didCommitLoadForFrame:]):
        (-[WK2BrowserWindowController loadURLString:]):
        (-[WK2BrowserWindowController performFindPanelAction:]):
        (-[WK2BrowserWindowController find:]):

2012-10-05  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [WK2][WTR] WebKitTestRunner needs testRunner.setSerializeHTTPLoads
        https://bugs.webkit.org/show_bug.cgi?id=98524

        Reviewed by Alexey Proskuryakov.

        Add implementation for testRunner.setSerializeHTTPLoads in
        WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setSerializeHTTPLoads):
        (WTR):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2012-10-05  Richard Larocque  <rlarocque@chromium.org>

        TestResultsServer does not display sync_integration_tests results
        https://bugs.webkit.org/show_bug.cgi?id=98551

        Reviewed by Ojan Vafai.

        Allow builders whose name contains "Sync" to pass through the
        isChromiumWebkitDepsTestRunner filter.

        The test expectations in flakiness_dashboard_unittests.js have been
        updated to match the new behaviour.

        * TestResultServer/static-dashboards/builders.js:
        (isChromiumDepsGTestRunner):

2012-10-05  Roger Fong  <roger_fong@apple.com>

        Tests in webkitpy involving child processes are flaky. 
        Skipping run_webkit_tests_integrationtest.py.
        https://bugs.webkit.org/show_bug.cgi?id=98559

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_verbose_in_child_processes):

2012-10-05  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] fast/xsl/xslt-missing-namespace-in-xslt.xml is failing on the 64-bit Debug builder
        https://bugs.webkit.org/show_bug.cgi?id=91009

        Reviewed by Martin Robinson.

        Include libxml2 into the jhbuild module. Version 2.8.0 introduces
        a more correct (but not completely correct) behavior in the
        fast/xsl/xslt-missing-namespace-in-xslt.html test.

        * gtk/jhbuild.modules:

2012-10-05  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Implement TestRunner.setMockDeviceOrientation
        https://bugs.webkit.org/show_bug.cgi?id=98542

        Reviewed by Antonio Gomes.

        PR 120681

        This fixes tests in fast/dom/DeviceOrientation.

        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        (TestRunner::setMockDeviceOrientation):

2012-10-05  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] Implement UIClient focus callbacks in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=98256

        Reviewed by Kenneth Rohde Christiansen.

        Implement UIClient's focus callbacks for the main page in
        WebKitTestRunner.

        * WebKitTestRunner/TestController.cpp:
        (WTR::focus):
        (WTR::TestController::initialize):

2012-10-05  Mark Hahnenberg  <mhahnenberg@apple.com>

        JSC should have a way to gather and log Heap memory use and pause times
        https://bugs.webkit.org/show_bug.cgi?id=98431

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (main): Added a check as to whether we should dump our JSC Heap statistics on exit.

2012-10-05  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Fix mktemp() compilation warning in Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=98493

        Reviewed by Kenneth Rohde Christiansen.

        Fix wrong mktemp usage causing a compilation warning
        in MiniBrowser.

        * MiniBrowser/efl/main.c:
        (on_download_request):

2012-10-05  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] Avoid duplication of UIClient callbacks for main page and other pages
        https://bugs.webkit.org/show_bug.cgi?id=98503

        Reviewed by Kenneth Rohde Christiansen.

        Avoid the need for duplicating UIClient callbacks for main page
        and other pages by passing the view as clientInfo
        for those callbacks.

        Previously, callbacks for the main page were passed the
        TestController as clientInfo while the callbacks for other pages
        were passed the PlatformWebView as clientInfo. This was error prone
        and leads to useless code duplication.

        * WebKitTestRunner/TestController.cpp:
        (WTR::getWindowFrame):
        (WTR::setWindowFrame):
        (WTR::runBeforeUnloadConfirmPanel):
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):
        (WTR::TestController::decidePolicyForNotificationPermissionRequest):

2012-10-05  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        [chromium] Allow dragging into plugins.
        https://bugs.webkit.org/show_bug.cgi?id=98277

        Reviewed by Tony Chang.

        Update the TestWebPlugin to receive drag events and print them out.

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (TestWebPlugin::handleDragStatusUpdate):
        * DumpRenderTree/chromium/TestWebPlugin.h:
        (TestWebPlugin):

2012-10-05  Jongseok Yang  <js45.yang@samsung.com>

        [EFL][WK2] Remove "web" word from ewk_web_error APIs
        https://bugs.webkit.org/show_bug.cgi?id=97886

        Reviewed by Gyuyoung Kim.

        Remove "web" word from ewk_web_error APIs.
        "web" word was redundant because "ewk" means "EFL WebKit" and WK APIs for error does not have "web" word.

        * MiniBrowser/efl/main.c:
        (on_error):

2012-10-05  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Enable CSS compositing by default
        https://bugs.webkit.org/show_bug.cgi?id=98490

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/features.pri:

2012-10-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130466.
        http://trac.webkit.org/changeset/130466
        https://bugs.webkit.org/show_bug.cgi?id=98495

        It made 12 tests crash on Qt-WK2 (Requested by Ossy on
        #webkit).

        * WebKitTestRunner/TestController.cpp:
        (WTR::focus):
        (WTR::TestController::initialize):

2012-10-05  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Fix window resizing / moving in WK1 and WKTR
        https://bugs.webkit.org/show_bug.cgi?id=98486

        Reviewed by Gyuyoung Kim.

        Fix PlatformWebView::windowFrame() and
        PlatformWebView::setWindowFrame() in EFL's WKTR so
        that it resizes / moves the window, not the view.

        The new code matches the implementation in EwkView's
        UIClient.

        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):

2012-10-04  KyungTae Kim  <ktf.kim@samsung.com>

        [EFL][WK2] Fix destination path when download with suggested filename on the Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=98334

        Reviewed by Gyuyoung Kim.

        Add callback functions for download requests to Minibrowser to set the destination path for download.
        Set the destination path with suggested file name as (destination folder) + (suggested file name).
        The 'destination folder' should be a specific folder user selected, but is set to '/tmp' for now.

        Additionally, for printing out the download status, 
        use the info macro and set the verbose variable to 1 to enable it.

        * MiniBrowser/efl/main.c:
        (on_download_request):
        (on_download_finished):
        (on_download_failed):
        (browserCreate):

2012-10-04  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] Implement UIClient focus callbacks in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=98256

        Reviewed by Kenneth Rohde Christiansen.

        Implement UIClient's focus callbacks in WebKitTestRunner.

        * WebKitTestRunner/TestController.cpp:
        (WTR::focus):
        (WTR::TestController::initialize):

2012-10-04  Rik Cabanier  <cabanier@adobe.com>

        Turn Compositing on by default in WebKit build
        https://bugs.webkit.org/show_bug.cgi?id=98315

        Reviewed by Simon Fraser.

        enable -webkit-blend-mode on trunk.

        * Scripts/webkitperl/FeatureList.pm:

2012-10-04  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Add APIs to get/set the frame flattening.
        https://bugs.webkit.org/show_bug.cgi?id=95982

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c: Added frame flattening option to test.
        (browserCreate):
        (main):

2012-10-04  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Add libxml 2.8.0 to jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=98418

        Reviewed by Laszlo Gombos.

        Add libxml 2.8.0 to EFL's jhbuild for consistency.

        * efl/jhbuild.modules:

2012-10-03  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Support all attributes of GeolocationPosition
        https://bugs.webkit.org/show_bug.cgi?id=98212

        Reviewed by Sam Weinig.

        Expand WebKitTestRunner and DumpRenderTree to test all the attributes
        of GeolocationPosition.

        * DumpRenderTree/TestRunner.cpp:
        (setMockGeolocationPositionCallback):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::setMockGeolocationPosition):
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        (TestRunner::setMockGeolocationPosition):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setMockGeolocationPosition):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setMockGeolocationPosition):
        * DumpRenderTree/wx/TestRunnerWx.cpp:
        (TestRunner::setMockGeolocationPosition):
        * WebKitTestRunner/GeolocationProviderMock.cpp:
        (WTR::GeolocationProviderMock::setPosition):
        * WebKitTestRunner/GeolocationProviderMock.h:
        (GeolocationProviderMock):
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (_platformTypeVariableDeclaration):
        Use a proper constructor for the JSValueRef, it is an opaque type, we are not supposed
        to build the pointer outself.
        This is necessary to support optional JSValueRef properly.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setMockGeolocationPosition):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setMockGeolocationPosition):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setMockGeolocationPosition):
        * WebKitTestRunner/TestController.h:
        (TestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2012-10-04  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Make the Xvfb driver recognize `X' as a valid X server binary.
        https://bugs.webkit.org/show_bug.cgi?id=98434

        Reviewed by Dirk Pranke.

        The X server binary can also be called `X', so account for that
        possibility in the _next_free_display regexp.

        Additionally, make the regular expression require at least one
        space character after the `ps comm' part.

        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        (XvfbDriver._next_free_display):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.test_next_free_display):

2012-10-04  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        webkitpy: Accept WEBKITOUTPUTDIR in Port._setup_environ_for_server.
        https://bugs.webkit.org/show_bug.cgi?id=98436

        Reviewed by Dirk Pranke.

        The Xvfb driver (ab)uses Port._setup_environ_for_server() to set
        the environment for the server process, and the WEBKITOUTPUTDIR
        environment variable was not being passed through, causing the
        build directory to be wrongfully set to WebKitBuild/ all the time.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.to.setup_environ_for_server):

2012-10-04  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add setting to allow file access from file:// URLs
        https://bugs.webkit.org/show_bug.cgi?id=98121

        Reviewed by Laszlo Gombos.

        Allow file access from file:// URLs by default in Minibrowser
        to facilitate testing.

        * MiniBrowser/efl/main.c:
        (browserCreate):

2012-10-04  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Run unit tests with Xvfb
        https://bugs.webkit.org/show_bug.cgi?id=98389

        Reviewed by Laszlo Gombos.

        Run EFL unit tests with Xvfb, similarly to GTK port.

        * Scripts/run-efl-tests:

2012-10-04  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Enable inspector by default in GtkLauncher/MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=98333

        Reviewed by Xan Lopez.

        Both MiniBrowser and GtkLauncher are tools for testing, so in
        the end every time we want to test the inspector we have to
        manually enable enable the “developer extras” setting when using
        them. It make sense to have this setting enabled by default.

        * GtkLauncher/main.c:
        (main):
        * MiniBrowser/gtk/main.c:
        (main):

2012-10-04  Harald Alvestrand  <hta@google.com>

        Change RTCPeerConnection GetStats to use Date timestamp format
        https://bugs.webkit.org/show_bug.cgi?id=98263

        Reviewed by Yury Semikhatsky.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::getStats):

2012-10-04  Dirk Pranke  <dpranke@chromium.org>

        [NRWT] --skipped option is ignored when --test-list is used
        https://bugs.webkit.org/show_bug.cgi?id=98260

        Reviewed by Ojan Vafai.

        Adds a --skipped=always flag that will skip any tests listed in
        TestExpectations even if they're listed explicitly on the
        command line.

        This is most useful if you are using --test-list to specify a
        long list of files but you still want to skip some of them
        depending on what's in TestExpectations.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder.skip_tests):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_skipped_flag):

2012-10-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130377.
        http://trac.webkit.org/changeset/130377
        https://bugs.webkit.org/show_bug.cgi?id=98392

        Chromium Win compilation is broken (Requested by yurys on
        #webkit).

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::getStats):

2012-10-04  Harald Alvestrand  <hta@google.com>

        Change RTCPeerConnection GetStats to use Date timestamp format
        https://bugs.webkit.org/show_bug.cgi?id=98263

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::getStats):

2012-10-04  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Unreviewed, remove unused $legacyWebKitBlobBuilderSupport variable after r130343.

        * Scripts/webkitperl/FeatureList.pm:

2012-10-03  Philip Rogers  <pdr@google.com>

        Force GC between PageLoad tests.
        https://bugs.webkit.org/show_bug.cgi?id=98203

        Reviewed by Ryosuke Niwa.

        Previously, our PageLoad PerfTests had multi-modal distributions,
        typically with a small cluster at 1-2x the median. This turned out
        to be caused by not garbage collecting between tests!

        This patch adds a new file, force-gc.html, and loads this file between
        PageLoad tests to force a GC. I manually verified that this cleans up
        our perf test outliers.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PageLoadingPerfTest.__init__):
        (PageLoadingPerfTest):
        (PageLoadingPerfTest.run_single):

            This function now loads two pages: one to force a gc and
            then the test to run.

        * Scripts/webkitpy/performance_tests/perftest_unittest.py:

            Modified several existing tests to show that the force-gc file
            is loaded.

        (MockPort):
        (MockPort.__init__):
        (MockPort.perf_tests_dir):
        (TestPageLoadingPerfTest.MockDriver.__init__):
        (TestPageLoadingPerfTest.MockDriver.run_test):
        (TestPageLoadingPerfTest.test_run):
        (TestPageLoadingPerfTest.test_run_with_bad_output):
        (TestReplayPerfTest.ReplayTestPort):
        (TestReplayPerfTest.ReplayTestPort.__init__):
        (TestReplayPerfTest.test_run_single.run_test):
        (TestReplayPerfTest.test_run_single):
        (TestReplayPerfTest.test_run_single_fails_when_output_has_error):
        (TestPerfTestFactory.test_regular_test):
        (TestPerfTestFactory.test_inspector_test):
        (TestPerfTestFactory.test_page_loading_test):

2012-10-03  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Enable use of X11 in DumpRenderTree / WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=98231

        Reviewed by Gyuyoung Kim.

        Enable use of X11 in DumpRenderTree / WebKitTestRunner.
        Call ecore_evas_new() instead of ecore_evas_buffer_new()
        in EFL's DumpRenderTree and WebKitTestRunner.
        It is safe to do this now that we are using XvfbDriver
        for the layout tests.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (parseCommandLineOptions):
        (initEcoreEvas):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::initEcoreEvas):
        * WebKitTestRunner/efl/main.cpp:
        (main):

2012-10-03  Dirk Pranke  <dpranke@chromium.org>

        run-webkit-tests tests on win32 after r127302
        https://bugs.webkit.org/show_bug.cgi?id=98323

        Reviewed by Eric Seidel.

        run-webkit-tests tests on win32 after r127302
        https://bugs.webkit.org/show_bug.cgi?id=98323

        Reviewed by Eric Seidel.

        Looks like when we converted the json-building logic to use scm
        to try and get the svn revision, we missed a win32-ism and
        didn't check to make sure had initialized the scm subsystem.

        This change fixes that and renames _initialize_scm to be a public method.

        * Scripts/webkitpy/common/host.py:
        (Host.initialize_scm):
        * Scripts/webkitpy/common/host_mock.py:
        (MockHost.__init__):
        (MockHost.initialize_scm):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (summarize_results):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGeneratorBase.get_json):
        (JSONResultsGeneratorBase._get_result_char):
        (JSONResultsGeneratorBase._get_svn_revision):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__):
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.__init__):
        * Scripts/webkitpy/style/main.py:
        (CheckWebKitStyle.main):
        * Scripts/webkitpy/tool/main.py:
        (WebKitPatch.handle_global_options):
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        (get_test_baselines):

2012-10-03  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Make inspector directly useable in GtkLauncher/MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=98310

        Reviewed by Martin Robinson.

        Make MiniBrowser/GtkLauncher define the path to the inspector
        resources by setting the WEBKIT_INSPECTOR_PATH environment
        variable pointing to the copy of the inspector resources in
        the build directory. If the environment variable is already
        defined, its value is not overwritten. The path is derived
        from the WEBKIT_EXEC_PATH macro defined in the makefiles.

        * GNUmakefile.am:
        * GtkLauncher/main.c:
        (main):
        * MiniBrowser/gtk/main.c:
        (main):

2012-10-03  Benjamin Poulain  <bpoulain@apple.com>

        Fix Geolocation/window-close-crash.html and harden WebKitTestRunner for Geolocation
        https://bugs.webkit.org/show_bug.cgi?id=97608

        Reviewed by Sam Weinig.

        The test fast/dom/Geolocation/window-close-crash.html was crashing because
        handleGeolocationPermissionRequest() was executed on the wrong pointer. Depending on how
        the page was created, the void* clientInfo can either be a PlatformWebView or
        a TestController.

        Using the global TestController fixes the issue.

        * WebKitTestRunner/GeolocationProviderMock.cpp:
        (WTR::GeolocationProviderMock::setPosition):
        (WTR::GeolocationProviderMock::setPositionUnavailableError):
        To be reliable, the test fast/dom/Geolocation/maximum-age.html needs the setting the position
        to clear the error and vice versa.
        This is the same behavior as GeolocationClientMock and MockGeolocationProvider of WebKit1.

        (WTR::GeolocationProviderMock::sendPositionIfNeeded):
        (WTR::GeolocationProviderMock::sendErrorIfNeeded):
        Some tests expect the position/error cant be sent multiple time,
        just keep the position after sending.

        * WebKitTestRunner/TestController.cpp:
        (WTR::decidePolicyForGeolocationPermissionRequest):
        (WTR::TestController::decidePolicyForGeolocationPermissionRequestIfPossible):
        * WebKitTestRunner/TestController.h:
        Let's play as if we did not know what is in GeolocationPermissionRequestManagerProxy like a real
        client would have to do.

2012-10-03  Otto Derek Cheung  <otcheung@rim.com>

        [BlackBerry] Implementing the NetworkInfo API for BB port
        https://bugs.webkit.org/show_bug.cgi?id=98273

        Reviewed by Rob Buis.

        Enabling NetworkInfo API for the BlackBerry port.

        * Scripts/webkitperl/FeatureList.pm:

2012-10-03  Anders Carlsson  <andersca@apple.com>

        Exception thrown when running accessibility/container-node-delete-causes-crash.html test
        https://bugs.webkit.org/show_bug.cgi?id=98291

        Reviewed by Andreas Kling.

        The accessibility/container-node-delete-causes-crash.html test will cause a full accessibility tree
        to be created by trying to look up an element with a non-existent ID. This caused an exception to be thrown
        when trying to access the children of an element that didn't have any children. Fix this by adding
        BEGIN_AX_OBJC_EXCEPTIONS/END_AX_OBJC_EXCEPTIONS around the call to get the children.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (findAccessibleObjectById):

2012-10-03  Ojan Vafai  <ojan@chromium.org>

        Make partytime work when loading garden-o-matic from trac.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=98283

        Reviewed by Adam Barth.

        CSP was blocking the reqest for partytime.gif because 'self' wasn't on the img-src directive.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:

2012-10-03  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Adding sys.platform check to skip a failing assert on the Apple Windows platform.
        https://bugs.webkit.org/show_bug.cgi?id=98288

        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidDriverTest.test_command_from_driver_input):

2012-10-03  Ojan Vafai  <ojan@chromium.org>

        Get rid of warning about non-existant platform name when loading garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=98282

        Reviewed by Adam Barth.

        If you loaded without a platform query parameter we'd return "null" as the platform name
        instead of null.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:

2012-10-03  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Enable mock scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=98011

        Reviewed by Csaba Osztrogonác.

        Enable mock scrollbars for the Qt port. This patch will require a huge rebaseline.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2012-10-03  Alberto Garcia  <agarcia@igalia.com>

        [GTK] [WK2] Add favicon support to the MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=98063

        Reviewed by Carlos Garcia Campos.

        Set the icon in the URI text entry using the favicon property of
        the WebKitWebView.

        * MiniBrowser/gtk/BrowserWindow.c:
        (_BrowserWindow):
        (updateUriEntryIcon):
        (uriEntryTextChanged):
        (faviconChanged):
        (browserWindowFinalize):
        (browser_window_init):
        (browserWindowConstructed):

2012-10-03  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [Qt][DRT] Add support for overriding the "WebKitDisplayImagesKey" preference.
        https://bugs.webkit.org/show_bug.cgi?id=98200

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::overridePreference):

2012-10-03  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Qt][WRT] Fix build error with MSVC on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=97697

        Reviewed by Simon Hausmann.

        WTR build is failing when WebKit directory is located on a longer path.
        This seems to caused by source files that has the same name in
        WTR and DRT directories. The solution is removing referencies 
        from Target.pri to DRT directory and adding an alternate version of
        the required files to WTR. Those files simply include the real ones from DRT.

        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/InjectedBundle/qt/QtInitializeTestFonts.cpp: Added.
        * WebKitTestRunner/InjectedBundle/qt/QtInitializeTestFonts.h: Added.

2012-10-03  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] TestRunner.setAlwaysAcceptCookies() causes flakiness
        https://bugs.webkit.org/show_bug.cgi?id=98238

        Reviewed by Csaba Osztrogonác.

        Reset AlwaysAcceptCookies setting between tests to avoid
        flakiness due to TestRunner.setAlwaysAcceptCookies().

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):

2012-10-03  Harald Alvestrand  <hta@google.com>

        Add data passing to the GetStats interface of RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=98003

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (RTCStatsRequestSucceededTask::RTCStatsRequestSucceededTask):
        (MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler):
        (MockWebRTCPeerConnectionHandler::addStream):
        (MockWebRTCPeerConnectionHandler::removeStream):
        (MockWebRTCPeerConnectionHandler::getStats):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):

== Rolled over to ChangeLog-2012-10-02 ==
