2012-05-21  Gavin Barraclough  <barraclough@apple.com>

        Disable private names by default in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=87088

        Reviewed by Geoff Garen.

        r117859 introduced a preliminary implementation of ES6-like private name objects to JSC.
        These are probably not yet ready to be web-facing, so disabling by default in WebCore.
        Opting-in for JSC & DumpRenderTree so that we can still run the fast/js/names.html test.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
            - Enable private name support in DRT.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
            - Enable private name support in WKTR.

2012-05-22  Martin Robinson  <mrobinson@igalia.com>

        Fix a small syntax error in the GTK+ API test runner.

        Reviewed by Gustavo Noronha Silva.

        * gtk/run-api-tests:
        (TestRunner._setup_testing_environment): When reporting the error use
        the correct Python format string syntax.

2012-05-22  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [GTK][DRT] Wrong cache model is taken in LayoutTestController's setCacheModel()
        https://bugs.webkit.org/show_bug.cgi?id=86962

        Reviewed by Gustavo Noronha Silva.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setCacheModel): Sets WEBKIT_CACHE_MODEL_WEB_BROWSER if argument is 2.

2012-05-22  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][DRT] Key modifier bit flags have enum type.
        https://bugs.webkit.org/show_bug.cgi?id=86838

        Reviewed by Antonio Gomes.

        Refactoring. Key modifier flags are unsigned int.
        Key modifier bit flags used have enum type. It caused problems as a key can have several modifiers 
        at the same time and the union of modifiers (i.e. EvasKeyModifierControl | EvasKeyModifierShift) 
        would have been out of EvasKeyModifier enum.

        * DumpRenderTree/efl/EventSender.cpp:
        (KeyEventInfo::KeyEventInfo):
        (KeyEventInfo):
        (MouseEventInfo::MouseEventInfo):
        (MouseEventInfo):
        (setEvasModifiers):
        (modifiersFromJSValue):
        (mouseDownCallback):
        (mouseUpCallback):
        (keyPadNameFromJSValue):
        (keyNameFromJSValue):
        (createKeyEventInfo):
        (sendKeyDown):

2012-05-22  Takashi Sakamoto  <tasak@google.com>

        Implement DOM_KEY_LOCATION_LEFT and RIGHT of KeyboardEvent's location property
        https://bugs.webkit.org/show_bug.cgi?id=86694

        Modify keyDown to create left- and right- control, shift, and alt
        keyevent for a test to check that keyLocation property can have
        DOM_KEY_LOCATION_LEFT for left-control, shift, and alt, and
        DOM_KEY_LOCATION_RIGHT for right-control, shift, and alt.

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::keyDown):
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]):

2012-05-22  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] EFL's DRT needs to print information about received Web Intents
        https://bugs.webkit.org/show_bug.cgi?id=86864

        Reviewed by Adam Barth.

        Catch "intent,new" signal in EFL's DumpRenderTree and dump information
        about the intent. This output is expected by several webintents test
        cases.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::onFrameCreated):
        (DumpRenderTreeChrome::onFrameIntentNew):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):

2012-05-22  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] Add support to enable/disable DOM paste 
        https://bugs.webkit.org/show_bug.cgi?id=85040

        Reviewed by Gustavo Noronha Silva.

        Enable JavascriptCanAccessClipboard setting on each test startup so
        that test cases which rely on clipboard can be unskipped.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):

2012-05-22  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [Qt][WK2] EventSenderProxy::keyDown doesn't use the helper functions to send events
        https://bugs.webkit.org/show_bug.cgi?id=87044

        Reviewed by Alexis Menard.

        Use sendOrQueueEvent instead of m_testController->mainWebView()->sendEvent

        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::keyDown):

2012-05-22  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk][LayoutTests] Repaint the complete WebKitWebView before dumping pixel results
        https://bugs.webkit.org/show_bug.cgi?id=86284

        Reviewed by Martin Robinson.

        Paint the current dirty regions of the web view once more before
        dumping pixel results.

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

2012-05-22  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        GCC 4.7 and C++11 support.
        https://bugs.webkit.org/show_bug.cgi?id=86465

        Reviewed by Darin Adler.

        Update detection of C++11 mode in GCC.

        * qmake/mkspecs/features/unix/default_post.prf:

2012-05-22  Hao Zheng  <zhenghao@chromium.org>

        [chromium] WebViewHost should use ENABLE guards for some features.
        https://bugs.webkit.org/show_bug.cgi?id=87087

        Reviewed by Kent Tamura.

        These features are disabled on OS(ANDROID) and so shouldn't be
        compiled when the feature is off.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::reset):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-05-21  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] EFL's DumpRenderTree does not print didReceiveTitle messages
        https://bugs.webkit.org/show_bug.cgi?id=85971

        Reviewed by Antonio Gomes.

        Listen for the "title,changed" signal on the frames instead of the
        view so that we get notified for other frame than the main one.
        Print out the didReceiveTitle messages which are expected if
        LayoutTestController's dumpFrameLoadCallbacks() returns true.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::onFrameTitleChanged):
        (DumpRenderTreeChrome::onFrameCreated):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):

2012-05-21  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL] Unreviewed, reverting r116461.

        r116461 caused a regression in the pixel tests, as scrollbars
        stopped being rendered in the PNGs.

        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:
        (createBitmapContextFromWebView):

2012-05-21  Brady Eidson  <beidson@apple.com>

        <rdar://problem/11460336> and https://bugs.webkit.org/show_bug.cgi?id=87061
        WKPageGetScaleFactor can return 0.0 after a session is restored

        Reviewed by Beth Dakin.

        Loads a simple page, creates a session from it, restores that session, then
        queries the page scale factor for the appropriate value of 1.0.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKPageGetScaleFactorNotZero.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::createSessionState):
        (TestWebKitAPI::TEST):

2012-05-21  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [WK2] Remove a useless #if on Tools/WebKitTestRunner/TestController.cpp
        https://bugs.webkit.org/show_bug.cgi?id=87047

        Reviewed by Alexis Menard.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):

2012-05-21  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up the TestExpectations constructor
        https://bugs.webkit.org/show_bug.cgi?id=86926

        Reviewed by Ojan Vafai.

        The TestExpectations constructor was attempting to pretend
        it didn't need to get stuff from the Port, and as a result we
        had a complicated constructor with a bunch of arguments, and
        calling it was too complicated (although it made testing a
        little easier and simplified the style checker).

        This patch has the constructor pull all the data it needs from
        the port directly, and allows us to delete a bunch of code.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.parse_expectations):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_update_summary_with_result):
        (ResultSummaryTest.get_result_summary):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (parse_exp):
        (SkippedTests.check):
        (RemoveConfigurationsTest.test_remove):
        (test_remove_line):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (lint):
        (run):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (LintTest.test_all_configurations.FakePort.__init__):
        (LintTest.test_all_configurations.FakePort.test_expectations):
        (LintTest.test_all_configurations.FakePort.skipped_layout_tests):
        (LintTest.test_all_configurations.FakePort):
        (LintTest.test_all_configurations.FakePort.all_test_configurations):
        (LintTest.test_all_configurations.FakePort.configuration_specifier_macros):
        (LintTest.test_all_configurations.FakePort.path_from_webkit_base):
        (LintTest.test_all_configurations.FakePort.get_option):
        (LintTest.test_all_configurations.FakeFactory.__init__):
        (LintTest.test_all_configurations.FakeFactory.all_port_names):
        (LintTest.test_all_configurations):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.get_result_summary):
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.check_test_expectations):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintExpectations._model):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._update_expectations_file):
        (RebaselineExpectations._expectations):

2012-05-21  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [GTK] DRT support for layoutTestController.setSerializeHTTPLoads
        https://bugs.webkit.org/show_bug.cgi?id=86653

        Reviewed by Gustavo Noronha Silva.

        Add missing implementation setSerializeHTTPLoads to allow
        testing resource load order.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setSerializeHTTPLoads):

2012-05-21  Elliot Poger  <epoger@chromium.org>

        add skia_test_expectations override file to chromium NRWT
        https://bugs.webkit.org/show_bug.cgi?id=86749

        Reviewed by Dirk Pranke

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.test_expectations_overrides):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.test_expectations_overrides):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_overrides_and_builder_names):

2012-05-21  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        webkitdirs.pm: Fix undefined CXXFLAGS variable
        https://bugs.webkit.org/show_bug.cgi?id=87000

        Reviewed by Martin Robinson.

        Fixes a warning on Autotools and CMake buildsystem when
        CXXFLAGS is not defined.

        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProjectIfNecessary):
        (generateBuildSystemFromCMakeProject):

2012-05-21  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Move setEditingBehavior() from layoutTestController to window.internals
        https://bugs.webkit.org/show_bug.cgi?id=42689

        Reviewed by Hajime Morita and Kenneth Rohde Christiansen.

        Remove code that implements setEditingBehavior() for each platform. Note that
        During the InternalsObject reset the behavior is changed back to the platform
        default.

        Qt and Chromium ports set a default editing behavior for running tests different
        from the platform default, so they still keep code for resetting to the desired
        editing behavior. Other ports use the their defaults, that are restored by
        internals object.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:

2012-05-21  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL] PlatformKeyboardEventEfl is missing ESC key handling.
        https://bugs.webkit.org/show_bug.cgi?id=86837

        Reviewed by Kenneth Rohde Christiansen.

        * DumpRenderTree/efl/EventSender.cpp:
        (keyNameFromJSValue): Added ESC key handling.

2012-05-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add GCancellable parameter to all methods using gio async pattern
        https://bugs.webkit.org/show_bug.cgi?id=86843

        Reviewed by Gustavo Noronha Silva.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_load_uri):

2012-05-20  Daniel Bates  <dbates@webkit.org>

        svn-apply cannot apply patches to files that contain space
        characters in their path
        https://bugs.webkit.org/show_bug.cgi?id=85742

        Reviewed by Eric Seidel.

        Fixes an issue where svn-apply cannot apply a patch to a file
        if there is a space in its file path.

        The regular expression we were using to fix up +++/--- lines
        was too strict; it only matched file paths that contained non-
        whitespace characters. Instead, it's sufficient to match file
        paths whose characters aren't in the set {\t, \n, \r}.

        * Scripts/VCSUtils.pm:
        (parseSvnDiffHeader):
        (runCommand): Added.
        * Scripts/svn-apply:
        (scmWillDeleteFile): Modified to call runCommand() so as to
        handle querying git for a file whose path may contain a space
        character.
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffHeader.pl:
          - Added test case "new file with spaces in its name".
        * Scripts/webkitperl/VCSUtils_unittest/runCommand.pl: Added.

2012-05-20  Daniel Bates  <dbates@webkit.org>

        svn-apply fails to apply a patch that moves files from directory A to A/B
        https://bugs.webkit.org/show_bug.cgi?id=86973

        Reviewed by Eric Seidel.

        Fixes an issue where svn-apply fails to apply a patch that moves files in a
        directory A to some sub-directory B in A with a Git checkout of WebKit.

        Currently, svn-apply only creates new directories along a file system path that
        it hasn't already processed. That is, if svn-apply creates/traverses all the
        intermediate directories along the path A/B then it will assume the directory A/B
        exists for all subsequent requests to create sub-directories in A/B (e.g. A/B/C).
        When moving a file F in directory A to directory A/B using a Git checkout, Git
        may remove directory A if F is the last file in A. Therefore, svn-apply will fail
        to create sub-directory B in A (since A no longer exists).

        * Scripts/svn-apply:
        (addDirectoriesIfNeeded):

2012-05-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [Chromium] Print layout test result on buildbot
        https://bugs.webkit.org/show_bug.cgi?id=86965

        Reviewed by Eric Seidel.

        * Scripts/run-webkit-tests: Add chrome-bot to buildbot user list.
        (runningOnBuildBot):

2012-05-19  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Don't stop the build if a build system update check fails.
        
        * waf/build/build_utils.py:
        (download_if_newer):

2012-05-19  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. Sometimes --suffixes isn't supplied.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler.rebaseline):
        (GardeningHTTPRequestHandler.optimizebaselines):

2012-05-19  Ryosuke Niwa  <rniwa@webkit.org>

        Add "Lion" -> "mac-lion" to the builder port map.

        * Scripts/webkitpy/layout_tests/port/builders.py:

2012-05-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r117675.
        http://trac.webkit.org/changeset/117675
        https://bugs.webkit.org/show_bug.cgi?id=86938

        Broke builds. You can't initialize members by members
        themselves (Requested by rniwa on #webkit).

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::numberOfPages):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::printPage):

2012-05-18  Kausalya Madhusudhanan  <kmadhusu@chromium.org>

        [chromium] User overloaded printBegin() webkit API to support auto fit to page functionality.
        https://bugs.webkit.org/show_bug.cgi?id=86684

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::numberOfPages):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::printPage):

2012-05-18  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL][DRT] Make it possible to enable CSS Grid Layout.
        https://bugs.webkit.org/show_bug.cgi?id=86921

        Reviewed by Tony Chang.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::overridePreference):

2012-05-18  Dirk Pranke  <dpranke@chromium.org>

        scm.add() doesn't work properly with svn 1.7
        https://bugs.webkit.org/show_bug.cgi?id=86779

        Reviewed by Eric Seidel.

        Re-land the change in r117526 with a fix to maintain
        compatibility with SVN 1.4.4 (yay Leopard!); turns out
        that "svn info foo" works correctly in 1.4.4 but
        "svn info" from the directory "foo" doesn't if foo is
        not part of a checkout. in_working_directory() and
        value_from_svn_info() were using the arguments inconsistently,
        leading to weird errors.

        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM):
        (SCM.in_working_directory):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN):
        (SVN.in_working_directory):

2012-05-18  Levi Weintraub  <leviw@chromium.org>

        Unreviewed. Moving myself from committer to reviewer.

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

2012-05-18  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Buildbot output does not print result stats anymore
        https://bugs.webkit.org/show_bug.cgi?id=85366

        Reviewed by Ryosuke Niwa.

        Make run-webkit-tests pass --verbose to new-run-webkit-tests
        on EFL Debug bot.

        * Scripts/run-webkit-tests:
        (runningOnBuildBot):

2012-05-18  Tony Chang  <tony@chromium.org>

        remove the CSS_GRID_LAYOUT compiler define, but default grid layout to off
        https://bugs.webkit.org/show_bug.cgi?id=86767

        Reviewed by Ojan Vafai.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):
        * Scripts/webkitperl/FeatureList.pm:

2012-05-18  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [Qt][WK2] fast/events/page-visibility-iframe-move-test.html fails
        https://bugs.webkit.org/show_bug.cgi?id=86731

        Reviewed by Simon Hausmann.

        Set the page visibility on a single page instead of on all pages
        from the page group.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setPageVisibility):
        (WTR::LayoutTestController::resetPageVisibility):

2012-05-18  Yi Shen  <yi.4.shen@nokia.com>

        REGRESSION (r102553): Smart links do not work
        https://bugs.webkit.org/show_bug.cgi?id=85463

        Reviewed by Ryosuke Niwa.

        Add LayoutTestController::setAutomaticLinkDetectionEnabled().

        * DumpRenderTree/LayoutTestController.cpp:
        (setAutomaticLinkDetectionEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        (LayoutTestController::setAutomaticLinkDetectionEnabled): Not implemented.
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setAutomaticLinkDetectionEnabled): Not implemented.
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setAutomaticLinkDetectionEnabled): Not implemented.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setAutomaticLinkDetectionEnabled): Not implemented.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setAutomaticLinkDetectionEnabled): Set automatic link detection enabled.
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setAutomaticLinkDetectionEnabled): Not implemented.
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setAutomaticLinkDetectionEnabled): Not implemented.
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setAutomaticLinkDetectionEnabled): Not implemented.

2012-05-18  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Add shortcut to dump Security Origin and Web Database information
        https://bugs.webkit.org/show_bug.cgi?id=86521

        Reviewed by Gustavo Noronha Silva.

        Added key combination (CTRL+s) to dump information about the
        security origin and databases of the main frame. Useful for API
        testing and debugging.

        * EWebLauncher/main.c:
        (on_key_down):

2012-05-18  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] DRT needs an implementation of layoutTestController.setSerializeHTTPLoads
        https://bugs.webkit.org/show_bug.cgi?id=86101

        Reviewed by Ryosuke Niwa.

        Add missing implementation setSerializeHTTPLoads to allow
        testing resource load order.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setSerializeHTTPLoads):

2012-05-18  Jochen Eisinger  <jochen@chromium.org>

        [chromium] plumb the frame for which a drag was initiated to the WebViewClient

        https://bugs.webkit.org/show_bug.cgi?id=86670

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::startDragging):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-05-18  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] appcache tests are flaky
        https://bugs.webkit.org/show_bug.cgi?id=86619

        Reviewed by Ryosuke Niwa.

        Correctly set the application cache database path in EFL's
        DumpRenderTree initialization code.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::initialize):

2012-05-17  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL][DRT] Call resetInternalsObject() after each test.
        https://bugs.webkit.org/show_bug.cgi?id=86793

        Reviewed by Antonio Gomes.

        We need to reset the internals object's settings after running
        each test so that there are no interferences between each test's
        results.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (runTest):

2012-05-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r117526.
        http://trac.webkit.org/changeset/117526
        https://bugs.webkit.org/show_bug.cgi?id=86801

        broke Chromium Mac 10.5 layout test canaries (Requested by
        pkasting on #webkit).

        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM):
        (SCM.in_working_directory):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN):
        (SVN.in_working_directory):

2012-05-17  Dirk Pranke  <dpranke@chromium.org>

        scm.add() doesn't work properly with svn 1.7
        https://bugs.webkit.org/show_bug.cgi?id=86779

        Reviewed by Ojan Vafai.

        The code relied on '.svn' directories being present
        in order to tell if a directory had already been added to the
        repository; this is no longer true in SVN 1.7.

        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM):
        (SCM.in_working_directory):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN):
        (SVN.in_working_directory):

2012-05-17  Jon Lee  <jonlee@apple.com>

        Update Apple buildbots to prioritize latest changelists
        https://bugs.webkit.org/show_bug.cgi?id=86766

        Reviewed by Brady Eidson.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (pickLatestBuild): Function to get the most pick the most recent build request.
        (loadBuilderConfig): Configure builders in the AppleMac and AppleWin categories to
        use the pickLatestBuild function when choosing which request to build next.

2012-05-17  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Fix MiniBrowser by using correct syntax for qrc URLs
        https://bugs.webkit.org/show_bug.cgi?id=86761

        Reviewed by Alexis Menard.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::updateVisualMockTouchPoints):

2012-05-17  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Add API for Web Database handling
        https://bugs.webkit.org/show_bug.cgi?id=85178

        Reviewed by Antonio Gomes.

        Use the newly introduced Web Database API in EFL's DRT.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::clearAllDatabases):

2012-05-17  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r117428): WebKit API/SPI was removed
        https://bugs.webkit.org/show_bug.cgi?id=86748

        Reverted r117428.

        * DumpRenderTree/LayoutTestController.cpp:
        (setDomainRelaxationForbiddenForURLSchemeCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):

2012-05-17  Li Yin  <li.yin@intel.com>

        [chromium] run-webkit-tests can't work on ubuntu 12.04
        https://bugs.webkit.org/show_bug.cgi?id=86565

        Reviewed by Kent Tamura.

        On ubuntu 12.04, the package ttf-thai-tlwg install the Garuda.ttf
        into /usr/share/fonts/truetype/tlwg/Garuda.ttf, not /usr/share/fonts/truetype/thai/Garuda.ttf

        * DumpRenderTree/chromium/TestShellLinux.cpp:
        (checkAndLoadFontFile):
        (setupFontconfig):

2012-05-17  Elliot Poger  <epoger@chromium.org>

        Add setting of additional_expectations option to 
        chromium_unittest.test_overrides_and_builder_names(),
        so we can test order in which the base and chromium expectations files
        are combined.

        https://bugs.webkit.org/show_bug.cgi?id=86642

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_overrides_and_builder_names):

2012-05-17  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Web process hangs while waiting for plugin process connection during layouttests
        https://bugs.webkit.org/show_bug.cgi?id=86620

        Reviewed by Csaba Osztrogonác.

        Reenable TestNetscapePlugin with Qt 4.

        * Tools.pro:

2012-05-17  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [Qt][WK2] fast/events/page-visibility-* tests fail
        https://bugs.webkit.org/show_bug.cgi?id=83263

        Reviewed by Kenneth Rohde Christiansen.

        Handle "preview" state and avoid string conversion.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setPageVisibility):

2012-05-17  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Convert setDomainRelaxationForbiddenForURLScheme to use InternalSettings interface
        https://bugs.webkit.org/show_bug.cgi?id=86704

        Reviewed by Eric Seidel.

        Remove setDomainRelaxationForbiddenForURLScheme functions, because it is able to work in the
        cross-port way through the InternalSettings interface.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:

2012-05-17  Mariusz Grzegorczyk  <mariusz.g@samsung.com>

        [EFL] [DRT] EFL's DumpRenderTree should support LayoutTestController's dumpEditingCallbacks()
        https://bugs.webkit.org/show_bug.cgi?id=84835

        Reviewed by Eric Seidel.

        Added editing callbacks implementation.

        * DumpRenderTree/efl/CMakeLists.txt: Add EditingCallbacks.cpp to compilation.
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp: Invoke connectEditingCallbacks.
        (DumpRenderTreeChrome::createView):
        * DumpRenderTree/efl/EditingCallbacks.cpp: Added. Dump editing callbacks.
        (dumpPath):
        (dumpRange):
        (insertActionString):
        (selectionAffinityString):
        (shouldBeginEditing):
        (shouldEndEditing):
        (shouldInsertNode):
        (shouldInsertText):
        (shouldDeleteRange):
        (shouldChangeSelectedRange):
        (shouldApplyStyle):
        (editingBegan):
        (userChangedContents):
        (editingEnded):
        (selectionChanged):
        (connectEditingCallbacks):
        * DumpRenderTree/efl/EditingCallbacks.h: Added.

2012-05-17  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed. Roll out r117382 because of layout test crashes on EFL debug buildbot.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::initialize):

2012-05-17  Kentaro Hara  <haraken@chromium.org>

        [Performance test] In perftest.py, do not include 'description' in 'results'
        https://bugs.webkit.org/show_bug.cgi?id=86696

        Reviewed by Csaba Osztrogoná.

        'results' in perftest.py should not include any data that is not expected
        by the perf bot server. We do not need to send 'description' to the perf bot
        server since 'description' is always the same.

        Thus this patch just removes 'description' from 'results'.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest.parse_output):
        (PerfTest.output_statistics):
        (ChromiumStylePerfTest.parse_output):
        (PageLoadingPerfTest.run):

2012-05-17  Kentaro Hara  <haraken@chromium.org>

        [Performance test] Always fill results['description'] in perftest.py
        https://bugs.webkit.org/show_bug.cgi?id=86696

        Reviewed by Ryosuke Niwa.

        This is a follow-up patch for r117397 to fix perf bot failures.
        This patch fills results['description'] always.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PageLoadingPerfTest.run):

2012-05-16  Kentaro Hara  <haraken@chromium.org>

        [Performance test] Support "description" for PerfTestRunner.run and PerfTestRunner.runPerSecond
        https://bugs.webkit.org/show_bug.cgi?id=86696

        Reviewed by Ryosuke Niwa.

        We want to add some description for each PerfTestRunner.run and
        PerfTestRunner.runPerSecond, so that people can know what each
        run is testing.

        Output example:

        $ ./Tools/Scripts/run-perf-tests Bindings/first-child.html
        Running Bindings/first-child.html (1 of 1)
        DESCRIPTION: Benchmark for DOM attributes that return a Node object.
        RESULT Bindings: first-child= 788.359076534 runs/s
        median= 797.508097751 runs/s, stdev= 19.0972905207 runs/s, min= 746.666666667 runs/s, max= 801.001251564 runs/s

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest):
        (PerfTest.parse_output):
        (PerfTest.output_statistics):

2012-05-16  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] appcache tests are flaky
        https://bugs.webkit.org/show_bug.cgi?id=86619

        Reviewed by Gustavo Noronha Silva.

        Correctly set the application cache database path in EFL's
        DumpRenderTree initialization code.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::initialize):

2012-05-16  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add new build slave for EFL port.
        https://bugs.webkit.org/show_bug.cgi?id=86567

        Reviewed by Ryosuke Niwa.

        Add a build slave for EFL 32-bit linux build.

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

2012-05-16  Kihong Kwon  <kihong.kwon@samsung.com>

        [EFL] Support for Battery Status API on the WebKit-Efl
        https://bugs.webkit.org/show_bug.cgi?id=83254

        Reviewed by Chang Shu.

        Add e_dbus libraries to jhbuild's modules list.

        * efl/jhbuild.modules:

2012-05-16  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Rounding errors on 32-bit machines causes tests to fail
        https://bugs.webkit.org/show_bug.cgi?id=86194

        Reviewed by Martin Robinson.

        Pass additional CXXFLAGS to CMake in an attempt to harmonize floating
        point values between 32-bit and 64-bit architectures.
        Same flags are already used by Qt and GTK ports. 

        * Scripts/webkitdirs.pm:
        (determineArchitecture):
        (generateBuildSystemFromCMakeProject):

2012-05-16  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Web process hangs while waiting for plugin process connection during layouttests
        https://bugs.webkit.org/show_bug.cgi?id=86620

        Reviewed by Csaba Osztrogonác.

        Temporary workaround not to fail layout tests.

        * Tools.pro: Disable TestNetscapePlugin.

2012-05-16  Dinu Jacob  <dinu.jacob@nokia.com>

        Add didFinishProgress BundleUIClient callback
        https://bugs.webkit.org/show_bug.cgi?id=86541

        Reviewed by Kenneth Rohde Christiansen.

        Added support for dumpProgressFinishedCallback.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didFinishProgress):
        (WTR):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        (InjectedBundlePage):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpProgressFinishedCallback):
        (WTR::LayoutTestController::setShouldDumpProgressFinishedCallback):
        (WTR::LayoutTestController::shouldDumpProgressFinishedCallback):
        (LayoutTestController):

2012-05-15  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Enable SVG Fonts by default
        https://bugs.webkit.org/show_bug.cgi?id=86463

        Reviewed by Nikolas Zimmermann.

        * qmake/mkspecs/features/features.pri:

2012-05-16  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] EFL's LayoutTestController does not implement setApplicationCacheOriginQuota
        https://bugs.webkit.org/show_bug.cgi?id=85585

        Reviewed by Gustavo Noronha Silva.

        Implement setApplicationCacheOriginQuota in EFL's
        LayoutTestController.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onExceededApplicationCacheQuota):
        (drtViewAdd):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setApplicationCacheOriginQuota):

2012-05-16  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL] EFL's LayoutTestController  evaluateScriptInIsolatedWorld implementation
        https://bugs.webkit.org/show_bug.cgi?id=83776

        Reviewed by Tor Arne Vestbø.

        Added missing implementation of LayoutTestController::evaluateScriptInIsolatedWorld().

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::evaluateScriptInIsolatedWorld):

2012-05-16  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        Unreviewed. Add myself as a committer.

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

2012-05-15  Kangil Han  <kangil.han@samsung.com>

        [EFL][DRT] Fix eventSender key providing
        https://bugs.webkit.org/show_bug.cgi?id=84710

        Reviewed by Andreas Kling.

        Currently eventSender doesn't provide key event correctly.
        For example, 'Right' will be visible when 'right arrow' key event is fired.
        Given circumstance, nothing has to be shown.
        Therefore, this patch fixed incorrectly provided key event.

        * DumpRenderTree/efl/EventSender.cpp:
        (KeyEventInfo::KeyEventInfo):
        (KeyEventInfo):
        (keyPadNameFromJSValue):
        (keyNameFromJSValue):
        (createKeyEventInfo):
        (sendKeyDown):

2012-05-15  Dan Bernstein  <mitz@apple.com>

        Fixed a typo.

        * Scripts/copy-webkitlibraries-to-product-directory:

2012-05-15  Kihong Kwon  <kihong.kwon@samsung.com>

        [EFL] Enable Fullscreen API
        https://bugs.webkit.org/show_bug.cgi?id=85870

        Reviewed by Antonio Gomes.

        Enable full screen api feature on the EFL port.
        There are two failed test cases under LayoutTests/fullscreen.
        They are going to be fixed with other patch.

        * Scripts/webkitperl/FeatureList.pm:

2012-05-15  James Robinson  <jamesr@chromium.org>

        [chromium] Chromium port never sets USE(CG) so code behind it is dead
        https://bugs.webkit.org/show_bug.cgi?id=86537

        Reviewed by Adrienne Walker.

        Deletes code behind USE(CG) in chromium-specific code and removes unneeded USE(SKIA) guards.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintRect):

2012-05-15  James Robinson  <jamesr@chromium.org>

        [chromium] Remove WEBKIT_USING_(SKIA|CG) #defines
        https://bugs.webkit.org/show_bug.cgi?id=86536

        Reviewed by Adam Barth.

        Deletes dead WEBKIT_USING_CG code and #ifdefs guarding it.

        * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm:
        (WebThemeEngineDRTMac::paintHIThemeScrollbarThumb):
        (WebThemeEngineDRTMac::paintNSScrollerScrollbarThumb):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintPagesWithBoundaries):

2012-05-15  James Robinson  <jamesr@chromium.org>

        [chromium] Unreviewed build fix.

        Partial revert of r117166 - it appears making DumpRenderTree depend on webkit_platform causes crashes in the
        component build, at least on linux.  This restores Tools/DumpRenderTree to its pre-r117166 state.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (TestWebPlugin::initialize):

2012-05-15  Elliot Poger  <epoger@google.com>

        add unit test for NRWT's --additional-expectations option
        https://bugs.webkit.org/show_bug.cgi?id=86501

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_additional_expectations):

2012-05-15  James Robinson  <jamesr@chromium.org>

        [chromium] Move createOffscreenGraphicsContext3D() from WebKitPlatformSupport to Platform
        https://bugs.webkit.org/show_bug.cgi?id=86524

        Reviewed by Adam Barth.

        Updates TestWebPlugin to use the Platform headers and updates the build dependencies so it can.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (TestWebPlugin::initialize):

2012-05-15  Jessie Berlin  <jberlin@apple.com>

        WKContextSetCacheModel(contextref, kWKCacheModelDocumentViewer) doesn't prevent pages from
        going into the PageCache.
        https://bugs.webkit.org/show_bug.cgi?id=85891

        Reviewed by Brady Eidson.

        Set the cache model in DOMWindowExtensionNoCache so that the page cache is not used. This is
        better than using pages with unload handlers because we may find a way to make pages with
        unload handlers cacheable in the future.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Remove simple-iframe-unload.html and simple-unload.html, since they are no longer used.

        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache.cpp:
        (TestWebKitAPI::TEST):
        Set the cache model to kWKCacheModelDocumentViewer.

        * TestWebKitAPI/Tests/WebKit2/simple-iframe-unload.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/simple-unload.html: Removed.

2012-05-15  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Add infra for testing double-tap to zoom functionality etc
        https://bugs.webkit.org/show_bug.cgi?id=86474

        Reviewed by Simon Hausmann.

        The WebViewportInfo class was renamed to QWebKitTest in preparation
        of becoming a separate module. Adapt the use API.

        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/ViewportInfoItem.qml:

2012-05-15  Csaba Osztrogonác  <ossy@webkit.org>

        Introduce ENABLE_CSS_VARIABLES compile flag.
        https://bugs.webkit.org/show_bug.cgi?id=86338

        Reviewed by Hajime Morita.

        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py: Unittest fix after r117028.
        (WebKitPortTest.test_skipped_directories_for_symbols):

2012-05-15  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Teach webkit-patch to gracefully handle writes of raw utf-8 encoded strings to sys.stdout

        https://bugs.webkit.org/show_bug.cgi?id=85809

        webkit-patch overrides sys.stdout with a StreamWriter that ensures we write utf8
        output to stdout, but StreamWriter will by default always encode the object that's
        passed to write(). This blows up when the object is a raw string, already encoded
        as utf8, and does not match the default behavior of sys.stdout.

        To solve this in one place, instead of every single call-site that might write
        raw strings, we extend the stdout-wrapper to assume raw strings are utf8 before
        passing them on to StreamWriter.write(). This has the benefit of also making the
        stacktrace easy to read in the case where this assumption does not hold.

        The source of this particular bug was that Executive.run_and_throw_if_fail() will
        tee the output of the subprocess, and in the case of running prepare-ChangeLog this
        might produce non-ascii output, which gets written directly to sys.stdout as raw
        utf8-encoded strings.

        Reviewed by Dirk Pranke.

        * Scripts/webkit-patch:

2012-05-15  Tomasz Morawski  <t.morawski@samsung.com>

        [EFL][DRT] Split ewk_private.h file to multiple private files.
        https://bugs.webkit.org/show_bug.cgi?id=84572

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:

2012-05-15  Michael Brüning  <michael.bruning@nokia.com>

        [Qt][WK2] http/tests/navigation/https-in-page-cache.html fails with timeout
        https://bugs.webkit.org/show_bug.cgi?id=83576

        Reviewed by Simon Hausmann.

        Set the PlatformWebView for the Qt port to accept all SSL certificates.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2012-05-14  Luke Macpherson  <macpherson@chromium.org>

        Introduce ENABLE_CSS_VARIABLES compile flag.
        https://bugs.webkit.org/show_bug.cgi?id=86338

        Reviewed by Dimitri Glazkov.

        Add a configuration option for CSS Variables support, disabling it by default.

        * Scripts/webkitperl/FeatureList.pm:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._missing_symbol_to_skipped_tests):
        * qmake/mkspecs/features/features.pri:

2012-05-14  Nate Chapin  <japhet@chromium.org>

        Add end-of-life test cases for https://bugs.webkit.org/show_bug.cgi?id=86131.

        Reviewed by Adam Barth.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (callDeletePlugin):
        (pluginHasProperty):
        (pluginHasMethod):
        (pluginGetProperty):
        (pluginSetProperty):
        (pluginInvoke):

2012-05-14  Dirk Pranke  <dpranke@chromium.org>

        Re-enable "drt mode" on chromium-mac-leopard
        https://bugs.webkit.org/show_bug.cgi?id=83076

        Unreviewed, build fix (change?).

        This change is another attempt to gather data on
        the flakiness and timeouts we're seeing on Mac SL
        now that we have another bot.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.__init__):

2012-05-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116981.
        http://trac.webkit.org/changeset/116981
        https://bugs.webkit.org/show_bug.cgi?id=86402

        Caused compositing and mathml tests to fail. (Requested by
        rakuco on #webkit).

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort._path_to_webcore_library):

2012-05-14  Dirk Pranke  <dpranke@chromium.org>

        Fix regressions in garden-o-matic after r116988.

        Unreviewed, build fix.

        I had a typo in a field name in checkout.js, and unfortunately
        the unittests had the same typo :(.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout_unittests.js:

2012-05-14  Dirk Pranke  <dpranke@chromium.org>

        garden-o-matic should specify which types of baselines to rebaseline
        https://bugs.webkit.org/show_bug.cgi?id=86242

        Reviewed by Adam Barth.

        This change modifies garden-o-matic so that we are explicit
        about whether to rebaseline the text file, the image file, or
        both. This should prevent us from pulling incorrect or
        unexpected baselines off the bots.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout_unittests.js:
        (.):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractRebaseliningCommand):
        (AbstractRebaseliningCommand.__init__):
        (RebaselineTest):
        (RebaselineTest._rebaseline_test_and_update_expectations):
        (RebaselineTest.execute):
        (OptimizeBaselines):
        (OptimizeBaselines._optimize_baseline):
        (OptimizeBaselines.execute):
        (AnalyzeBaselines):
        (AnalyzeBaselines._analyze_baseline):
        (AnalyzeBaselines.execute):
        (RebaselineExpectations._rebaseline_port):
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler.rebaseline):
        (GardeningHTTPRequestHandler.optimizebaselines):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (GardeningServerTest.test_rebaseline):
        (GardeningServerTest.test_rebaseline_new_port):
        (GardeningServerTest.test_optimizebaselines):

2012-05-14  Kangil Han  <kangil.han@samsung.com>

        [EFL][DRT] Fix WebCore library path
        https://bugs.webkit.org/show_bug.cgi?id=86355

        Reviewed by Dirk Pranke.

        Currently EFL DRT uses wrong WebCore library path when running DRT.
        This patch simply adjusted it.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort._path_to_webcore_library):

2012-05-14  Wei James  <james.wei@intel.com>

        [Chromium] ImageDiff should be build for host on Android
        https://bugs.webkit.org/show_bug.cgi?id=82039

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-05-14  Joone Hur  <joone@webkit.org>

        Unreviewed. Updating email for committers.py script.

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

2012-05-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add run-api-tests script to EXTRA_DIST.
        * gtk/run-api-tests:
        (TestRunner._lookup_atspi2_binary): Handle the case when
        pkg_config_file_variable() return None.

2012-05-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116935.
        http://trac.webkit.org/changeset/116935
        https://bugs.webkit.org/show_bug.cgi?id=86373

        Something is still broken (Requested by Ossy on #webkit).

        * Scripts/webkitpy/common/checksvnconfigfile.py: Removed.
        * Scripts/webkitpy/style/checkers/png.py:
        (PNGChecker.check):
        (PNGChecker):
        (PNGChecker._config_file_path):
        * Scripts/webkitpy/tool/commands/download.py:
        (Land):
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/addsvnmimetypeforpng.py: Removed.
        * Scripts/webkitpy/tool/steps/addsvnmimetypeforpng_unittest.py: Removed.

2012-05-14  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Doesn't build with ENABLE_INSPECTOR=0
        https://bugs.webkit.org/show_bug.cgi?id=85056

        Reviewed by Tor Arne Vestbø.

        * WebKitTestRunner/TestInvocation.cpp: Ifdef otherwise unused static function.
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/features.pri:

2012-05-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make sure dialogs have their parent and attached properties set before Component.onCompleted
        https://bugs.webkit.org/show_bug.cgi?id=86222

        The WebView QML api for dialogs is based on delegates for each dialog, which
        are implemented as components. Since there's no explicit API to show the dialog,
        the natural place to allow the dialog to choose how to display itself is in
        Component.onCompleted.

        The issue was that we were using QQmlComponent::create() when instantiating the
        component, at which point the component did not have a parent or it's attached
        WebView property set. That meant that we had to do some ugly workaround in our
        test, using a 1ms timer, to get a callback once the parent was there.

        We now use the QQmlComponent::beginCreate() -> QQmlComponent::completeCreate()
        pair, which allows us to set the relevant properties before triggering the
        Component.onCompleted callback. We were already doing this for the context
        menus (except for setting the parent, which we did afterwards).

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/Dialog.qml:

2012-05-14  Balazs Ankes  <bank@inf.u-szeged.hu>

        webkit-patch land should automatically add svn:mime-type for .png files
        https://bugs.webkit.org/show_bug.cgi?id=75825
        I refactored the png.py to avoid code duplication.

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/common/checksvnconfigfile.py: Added.
        (check):
        (_config_file_path):
        (errorstr_autoprop):
        (errorstr_png):
        * Scripts/webkitpy/style/checkers/png.py:
        (PNGChecker.check):
        * Scripts/webkitpy/tool/commands/download.py:
        (Land):
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/addsvnmimetypeforpng.py: Added.
        (AddSvnMimetypeForPng):
        (AddSvnMimetypeForPng.__init__):
        (AddSvnMimetypeForPng.run):
        (AddSvnMimetypeForPng._check_pngs):
        * Scripts/webkitpy/tool/steps/addsvnmimetypeforpng_unittest.py: Added.
        (MockSCMDetector):
        (MockSCMDetector.__init__):
        (MockSCMDetector.display_name):
        (AddSvnMimetypeForPngTest):
        (AddSvnMimetypeForPngTest.test_run):

2012-05-14  David Kilzer  <ddkilzer@apple.com>

        webkit-patch apply-attachment is very slow for big patches
        https://bugs.webkit.org/show_bug.cgi?id=74929

        Add "excludefield=attachmentdata" to the URL everywhere
        "ctype=xml" is used to exclude this field from the XML.

        Reviewed by Adam Barth.

        * Scripts/prepare-ChangeLog:
        (fetchBugDescriptionFromURL):
        * Scripts/webkitpy/common/config/urls.py:
        * Scripts/webkitpy/common/config/urls_unittest.py:
        (URLsTest.test_parse_bug_id):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.bug_url_for_bug_id):

2012-05-13  Ryosuke Niwa  <rniwa@webkit.org>

        performance tests should be able to measure runs/sec rather than time
        https://bugs.webkit.org/show_bug.cgi?id=86021

        Reviewed by Ojan Vafai.

        Allow " runs/s" or " ms" to appear after numerical values in tests.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest):

2012-05-12  Tim Horton  <timothy_horton@apple.com>

        run-safari and co. should support --guard-malloc command line argument
        https://bugs.webkit.org/show_bug.cgi?id=86287

        Reviewed by Dan Bernstein.

        Add setUpGuardMallocIfNeeded(), which consults the argument --guard-malloc on OS X,
        setting DYLD_INSERT_LIBRARIES="/usr/lib/libgmalloc.dylib" if it's enabled.

        Use setUpGuardMallocIfNeeded() before running a WebKit app (whether standalone or
        in the debugger). This will cause gmalloc to be loaded for gdb as well, but this
        tends to be harmless.

        Change "malloc guard" to the more common "Guard Malloc" in run-webkit-tests.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitdirs.pm:
        (appendToEnvironmentVariableList):
        (setUpGuardMallocIfNeeded):
        (printHelpAndExitForRunAndDebugWebKitAppIfNeeded):
        (runMacWebKitApp):
        (execMacWebKitAppForDebugging):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-05-11  Ojan Vafai  <ojan@chromium.org>

        Add previous/next buttons the garden-o-matics perf panel
        https://bugs.webkit.org/show_bug.cgi?id=86280

        Reviewed by Dimitri Glazkov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/perf.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/perf_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/perf.css:

2012-05-11  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Fix memory exhausted errors from 32-bit ld on *nix.

        * waf/build/settings.py:
        (common_configure):

2012-05-11  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch rebaseline should fetch stale expectations :)
        https://bugs.webkit.org/show_bug.cgi?id=86231

        Unreviewed, build fix.

        This change reverts r115492 and goes back to fetching individual
        baselines from the layout tests directory, rather than fetching
        entire zip files. The performance hit over networks for people
        far away from the bots has turned out to be severe, so we need a
        better solution to this.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._results_url):
        (RebaselineTest._file_name_for_expected_result):
        (RebaselineTest._rebaseline_test):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline_updates_expectations_file_noop):
        (test_rebaseline_updates_expectations_file):
        (test_rebaseline_test):
        (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):

2012-05-11  Christophe Dumez  <christophe.dumez@intel.com>

        [GTK] LayoutTests/svg/batik/text/verticalText.svg fails to display Chinese characters
        https://bugs.webkit.org/show_bug.cgi?id=86198

        Reviewed by Martin Robinson.

        Update webkitgtk-fonts package to v0.0.3 in order to get new Kochi
        Mincho / Gothic fonts to display Japanese and Chinese characters.

        * gtk/jhbuild.modules:

2012-05-11  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][DRT] SVG Batik test fails to display Chinese characters
        https://bugs.webkit.org/show_bug.cgi?id=84461

        Reviewed by Martin Robinson.

        Update webkitgtk-fonts package from v0.0.1 to v0.0.3 in order to get
        new Kochi Mincho / Gothic fonts to display Japanese and Chinese
        characters.

        * DumpRenderTree/efl/CMakeLists.txt:
        * efl/jhbuild.modules:

2012-05-11  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK 64-bit Debug bot fix attempt.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._get_gdb_output): Ignore unicode decoding errors when
        processing gdb output.

2012-05-11  Gustavo Noronha Silva  <gns@gnome.org>

        REGRESSION(r116205): [GTK]: build no longer supports thin archives
        https://bugs.webkit.org/show_bug.cgi?id=86207

        * GNUmakefile.am: link libWebCoreModules to DRT.

2012-05-10  Ojan Vafai  <ojan@chromium.org>

        Add a perf tab to garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=86169

        Reviewed by Dimitri Glazkov.

        This is a first stab at making it easier to view the Chromium WebKit canary
        perf graphs. For now, it's just a couple select elements and an iframe.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/perf.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/perf_unittests.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/perf.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:

2012-05-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move resumeAnimations to use Internals interface
        https://bugs.webkit.org/show_bug.cgi?id=86063

        Reviewed by Alexey Proskuryakov.

        Remove resumeAnimations functions, because it is able to work in the 
        cross-port way through the Internals interface.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):

2012-05-10  Alexey Proskuryakov  <ap@apple.com>

        Crash in 3rd party WebKit apps that disable cache at a wrong time
        https://bugs.webkit.org/show_bug.cgi?id=86027
        <rdar://problem/10615880>

        Reviewed by Antti Koivisto.

        Added a test that's very similar to MemoryCachePruneWithinResourceLoadDelegate,
        but for disabling the cache instead of triggering a prune.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/MemoryCacheDisableWithinResourceLoadDelegate.html: Added.
        * TestWebKitAPI/Tests/mac/MemoryCacheDisableWithinResourceLoadDelegate.mm: Added.
        (-[MemoryCacheDisableTestResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        (-[MemoryCacheDisableTestResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        (-[MemoryCacheDisableTestResourceLoadDelegate webView:resource:didFinishLoadingFromDataSource:]):
        (-[MemoryCacheDisableTestResourceLoadDelegate webView:resource:didFailLoadingWithError:fromDataSource:]):
        (TestWebKitAPI::TEST):

2012-05-10  Anders Carlsson  <andersca@apple.com>

        WebKit2: Add a way to blacklist specific plug-ins/plug-in versions
        https://bugs.webkit.org/show_bug.cgi?id=86164
        <rdar://problem/9551196>

        Reviewed by Sam Weinig.

        Update for WK2 API changes.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):

2012-05-10  Dirk Pranke  <dpranke@chromium.org>

        nrwt: [chromium] fix path to asan symbolize script
        https://bugs.webkit.org/show_bug.cgi?id=86161

        Reviewed by Abhishek Arya.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort._get_crash_log):

2012-05-10  Lei Zhang  <thestig@chromium.org>

        [chromium] Set Valgrind environment variables for layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=86156

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.setup_environ_for_server):

2012-05-10  Raphael Kubo da Costa  <rakuco@webkit.org>

        [webkitpy][EFL] It should be possible to use a wrapper command for ImageDiff.
        https://bugs.webkit.org/show_bug.cgi?id=86145

        Reviewed by Dirk Pranke.

        The GTK+ and EFL ports use jhbuild to build a few base libraries
        which are then used when building the port itself. Programs such
        as DRT and ImageDiff are then supposed to be run with the
        `run-with-jhbuild' wrapper so that the libraries are properly
        found and loaded.

        This was already the case for DumpRenderTree (EflPort defines the
        'wrapper' option for that), but it was not possible to do the same
        with ImageDiff so far.

        The code which created the ImageDiff command-line call has been
        moved to a separate method, _image_diff_command, which is then
        overridden by EflPort to add the jhbuild wrapper.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort.__init__):
        (EflPort._image_diff_command):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort):
        (WebKitPort._image_diff_command):
        (WebKitPort._start_image_diff_process):

2012-05-10  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] ENABLE_IFRAME_SEAMLESS support
        https://bugs.webkit.org/show_bug.cgi?id=85843

        Reviewed by Eric Seidel.

        Add the iframe-seamless option to the options list. This makes it
        possible to enable the iframe seamless support through build-webkit
        script. Enabled by default for all the ports.

        * Scripts/webkitperl/FeatureList.pm:

2012-05-10  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL][webkitpy] Do not redefine check_build() in EflPort.
        https://bugs.webkit.org/show_bug.cgi?id=86124

        Reviewed by Dirk Pranke.

        Remove an old FIXME and do not redefine check_build in EflPort;
        once build-dumprendertree recognizes --efl, we can use the
        check_build implementation in WebKitPort.

        * Scripts/build-dumprendertree:
        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort.check_build):

2012-05-10  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Fix the ExtraData functionality in WebMediaStreamDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=86087

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/WebUserMediaClientMock.cpp:
        (MockExtraData):
        (WebKit):
        (WebKit::WebUserMediaClientMock::requestUserMedia):

2012-05-10  Varun Jain  <varunjain@google.com>

        [chromium] Trigger context menu for long press gesture
        https://bugs.webkit.org/show_bug.cgi?id=85919

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::gestureLongPress):
        (EventSender::gestureEvent):
        * DumpRenderTree/chromium/EventSender.h:
        (EventSender):

2012-05-10  Takashi Toyoshima  <toyoshim@chromium.org>

        don't use autoinstall to import pywebsocket but check it in WebKit directly.
        https://bugs.webkit.org/show_bug.cgi?id=86107

        Reviewed by Adam Barth.

        This change removes pywebsocket from webkitpy's autoinstall list and
        imports pywebsocket 0.7.4 directly into webkitpy/thirparty.

        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        (PyWebSocket._prepare_config):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_irc):
        * Scripts/webkitpy/thirdparty/__init___unittest.py:
        (ThirdpartyTest.test_import_hook.MockImportHook.__init__):
        (ThirdpartyTest.test_import_hook.MockImportHook._install_eliza):
        (ThirdpartyTest):
        (ThirdpartyTest.test_import_hook):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/COPYING: Added.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/__init__.py: Added.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/_stream_base.py: Added.
        (ConnectionTerminatedException):
        (InvalidFrameException):
        (BadOperationException):
        (UnsupportedFrameException):
        (InvalidUTF8Exception):
        (StreamBase):
        (StreamBase.__init__):
        (StreamBase._read):
        (StreamBase._write):
        (StreamBase.receive_bytes):
        (StreamBase._read_until):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/_stream_hixie75.py: Added.
        (for):
        (StreamHixie75):
        (StreamHixie75.for):
        (StreamHixie75.__init__):
        (StreamHixie75.send_message):
        (StreamHixie75._read_payload_length_hixie75):
        (StreamHixie75.receive_message):
        (StreamHixie75._send_closing_handshake):
        (StreamHixie75.close_connection):
        (StreamHixie75.send_ping):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/_stream_hybi.py: Added.
        (Frame):
        (Frame.__init__):
        (create_length_header):
        (create_header):
        (_build_frame):
        (_filter_and_format_frame_object):
        (create_binary_frame):
        (create_text_frame):
        (FragmentedFrameBuilder):
        (FragmentedFrameBuilder.to):
        (FragmentedFrameBuilder.__init__):
        (FragmentedFrameBuilder.build):
        (_create_control_frame):
        (create_ping_frame):
        (create_pong_frame):
        (create_close_frame):
        (StreamOptions):
        (StreamOptions.__init__):
        (Stream):
        (Stream.for):
        (Stream.__init__):
        (Stream._receive_frame):
        (Stream._receive_frame_as_frame_object):
        (Stream.send_message):
        (Stream.receive_message):
        (Stream._send_closing_handshake):
        (Stream.close_connection):
        (Stream.send_ping):
        (Stream._send_pong):
        (Stream._drain_received_data):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/common.py: Added.
        (is_control_opcode):
        (ExtensionParameter):
        (ExtensionParameter.__init__):
        (ExtensionParameter.name):
        (ExtensionParameter.add_parameter):
        (ExtensionParameter.get_parameters):
        (ExtensionParameter.get_parameter_names):
        (ExtensionParameter.has_parameter):
        (ExtensionParameter.get_parameter_value):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/dispatch.py: Added.
        (DispatchException):
        (DispatchException.__init__):
        (_default_passive_closing_handshake_handler):
        (_normalize_path):
        (_create_path_to_resource_converter):
        (_create_path_to_resource_converter.converter):
        (_enumerate_handler_file_paths):
        (_HandlerSuite):
        (_HandlerSuite.__init__):
        (_source_handler_file):
        (_extract_handler):
        (Dispatcher):
        (Dispatcher.maintains):
        (Dispatcher.__init__):
        (Dispatcher.add_resource_path_alias):
        (Dispatcher.source_warnings):
        (Dispatcher.do_extra_handshake):
        (Dispatcher.transfer_data):
        (Dispatcher.passive_closing_handshake):
        (Dispatcher.get_handler_suite):
        (Dispatcher._source_handler_files_in_dir):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/extensions.py: Added.
        (ExtensionProcessorInterface):
        (ExtensionProcessorInterface.get_extension_response):
        (ExtensionProcessorInterface.setup_stream_options):
        (DeflateStreamExtensionProcessor):
        (DeflateStreamExtensionProcessor.__init__):
        (DeflateStreamExtensionProcessor.get_extension_response):
        (DeflateStreamExtensionProcessor.setup_stream_options):
        (DeflateFrameExtensionProcessor):
        (DeflateFrameExtensionProcessor.__init__):
        (DeflateFrameExtensionProcessor.get_extension_response):
        (DeflateFrameExtensionProcessor.setup_stream_options):
        (DeflateFrameExtensionProcessor.setup_stream_options._OutgoingFilter):
        (DeflateFrameExtensionProcessor.setup_stream_options._OutgoingFilter.__init__):
        (DeflateFrameExtensionProcessor.setup_stream_options._OutgoingFilter.filter):
        (DeflateFrameExtensionProcessor.setup_stream_options._IncomingFilter):
        (DeflateFrameExtensionProcessor.setup_stream_options._IncomingFilter.__init__):
        (DeflateFrameExtensionProcessor.setup_stream_options._IncomingFilter.filter):
        (DeflateFrameExtensionProcessor.set_response_window_bits):
        (DeflateFrameExtensionProcessor.set_response_no_context_takeover):
        (DeflateFrameExtensionProcessor.enable_outgoing_compression):
        (DeflateFrameExtensionProcessor.disable_outgoing_compression):
        (DeflateFrameExtensionProcessor._outgoing_filter):
        (DeflateFrameExtensionProcessor._incoming_filter):
        (get_extension_processor):
        (get_extension_processor.is):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/__init__.py: Added.
        (try):
        (do_handshake):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/_base.py: Added.
        (AbortedByUserException):
        (HandshakeException):
        (HandshakeException.__init__):
        (VersionException):
        (VersionException.__init__):
        (get_default_port):
        (validate_subprotocol):
        (parse_host_header):
        (format_header):
        (build_location):
        (get_mandatory_header):
        (validate_mandatory_header):
        (check_request_line):
        (check_header_lines):
        (parse_token_list):
        (_parse_extension_param):
        (_parse_extension):
        (parse_extensions):
        (format_extensions):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/draft75.py: Added.
        (Handshaker):
        (Handshaker.performs):
        (Handshaker.__init__):
        (Handshaker.do_handshake):
        (Handshaker._set_resource):
        (Handshaker._set_origin):
        (Handshaker._set_location):
        (Handshaker._set_subprotocol):
        (Handshaker._set_protocol_version):
        (Handshaker._sendall):
        (Handshaker._send_handshake):
        (Handshaker._check_header_lines):
        (Handshaker._check_first_lines):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/hybi.py: Added.
        (compute_accept):
        (Handshaker):
        (Handshaker.__init__):
        (Handshaker._validate_connection_header):
        (Handshaker.do_handshake):
        (Handshaker._get_origin):
        (Handshaker._check_version):
        (Handshaker._set_protocol):
        (Handshaker._parse_extensions):
        (Handshaker._validate_key):
        (Handshaker._get_key):
        (Handshaker._send_handshake):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/hybi00.py: Added.
        (Handshaker):
        (Handshaker.__init__):
        (Handshaker.do_handshake):
        (Handshaker._set_resource):
        (Handshaker._set_subprotocol):
        (Handshaker._set_location):
        (Handshaker._set_origin):
        (Handshaker._set_protocol_version):
        (Handshaker._set_challenge_response):
        (Handshaker._get_key_value):
        (Handshaker._get_challenge):
        (Handshaker._send_handshake):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/headerparserhandler.py: Added.
        (ApacheLogHandler):
        (ApacheLogHandler.__init__):
        (ApacheLogHandler.emit):
        (_configure_logging):
        (_parse_option):
        (_create_dispatcher):
        (headerparserhandler):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/http_header_util.py: Added.
        (_is_char):
        (_is_ctl):
        (ParsingState):
        (ParsingState.__init__):
        (peek):
        (consume):
        (consume_string):
        (consume_lws):
        (consume_lwses):
        (consume_token):
        (consume_token_or_quoted_string):
        (quote_if_necessary):
        (parse_uri):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/memorizingfile.py: Added.
        (MemorizingFile):
        (MemorizingFile.__init__):
        (MemorizingFile.__getattribute__):
        (MemorizingFile.readline):
        (MemorizingFile.get_memorized_lines):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/msgutil.py: Added.
        (close_connection):
        (send_message):
        (receive_message):
        (send_ping):
        (MessageReceiver):
        (MessageReceiver.receives):
        (MessageReceiver.provides):
        (MessageReceiver.should):
        (MessageReceiver.__init__):
        (MessageReceiver.run):
        (MessageReceiver.receive):
        (MessageReceiver.receive_nowait):
        (MessageReceiver.stop):
        (MessageSender):
        (MessageSender.sends):
        (MessageSender.provides):
        (MessageSender.should):
        (MessageSender.__init__):
        (MessageSender.run):
        (MessageSender.send):
        (MessageSender.send_nowait):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/standalone.py: Added.
        (_StandaloneConnection):
        (_StandaloneConnection.__init__):
        (_StandaloneConnection.get_local_addr):
        (_StandaloneConnection.get_remote_addr):
        (_StandaloneConnection.write):
        (_StandaloneConnection.read):
        (_StandaloneConnection.get_memorized_lines):
        (_StandaloneRequest):
        (_StandaloneRequest.__init__):
        (_StandaloneRequest.get_uri):
        (_StandaloneRequest.get_method):
        (_StandaloneRequest.is_https):
        (_StandaloneRequest._drain_received_data):
        (_StandaloneSSLConnection):
        (_StandaloneSSLConnection.for):
        (_StandaloneSSLConnection.__init__):
        (_StandaloneSSLConnection.__getattribute__):
        (_StandaloneSSLConnection.__setattr__):
        (_StandaloneSSLConnection.makefile):
        (WebSocketServer):
        (WebSocketServer.__init__):
        (WebSocketServer._create_sockets):
        (WebSocketServer.server_bind):
        (WebSocketServer.server_activate):
        (WebSocketServer.server_close):
        (WebSocketServer.fileno):
        (WebSocketServer.handle_error):
        (WebSocketServer.get_request):
        (WebSocketServer.serve_forever):
        (WebSocketServer.shutdown):
        (WebSocketRequestHandler):
        (WebSocketRequestHandler.setup):
        (WebSocketRequestHandler.setup.SocketServer):
        (WebSocketRequestHandler.__init__):
        (WebSocketRequestHandler.parse_request):
        (WebSocketRequestHandler.log_request):
        (WebSocketRequestHandler.log_error):
        (WebSocketRequestHandler.is_cgi):
        (_configure_logging):
        (_alias_handlers):
        (_build_option_parser):
        (ThreadMonitor):
        (ThreadMonitor.__init__):
        (ThreadMonitor.run):
        (_parse_args_and_config):
        (_main):
        (_main.if):
        (_main.if.__check_script):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/stream.py: Copied from Tools/Scripts/webkitpy/thirdparty/__init___unittest.py.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/util.py: Added.
        (get_stack_trace):
        (prepend_message_to_exception):
        (__translate_interp):
        (get_script_interp):
        (wrap_popen3_for_win):
        (wrap_popen3_for_win.__wrap_popen3):
        (hexify):
        (get_class_logger):
        (NoopMasker):
        (NoopMasker.__init__):
        (NoopMasker.mask):
        (RepeatedXorMasker):
        (RepeatedXorMasker.__init__):
        (RepeatedXorMasker.mask):
        (DeflateRequest):
        (DeflateRequest.for):
        (DeflateRequest.__init__):
        (DeflateRequest.__getattribute__):
        (DeflateRequest.__setattr__):
        (_Deflater):
        (_Deflater.__init__):
        (_Deflater.compress_and_flush):
        (_Inflater):
        (_Inflater.__init__):
        (_Inflater.decompress):
        (_Inflater.append):
        (_Inflater.reset):
        (_RFC1979Deflater):
        (_RFC1979Deflater.that):
        (_RFC1979Deflater.__init__):
        (_RFC1979Deflater.filter):
        (_RFC1979Inflater):
        (_RFC1979Inflater.for):
        (_RFC1979Inflater.__init__):
        (_RFC1979Inflater.filter):
        (DeflateSocket):
        (DeflateSocket.for):
        (DeflateSocket.__init__):
        (DeflateSocket.recv):
        (DeflateSocket.sendall):
        (DeflateSocket.send):
        (DeflateConnection):
        (DeflateConnection.for):
        (DeflateConnection.__init__):
        (DeflateConnection.get_remote_addr):
        (DeflateConnection.put_bytes):
        (DeflateConnection.read):
        (DeflateConnection.write):
        (_is_ewouldblock_errno):
        (drain_received_data):

2012-05-10  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL][webkitpy] Define the 'wrapper' option in EflPort instead of creating a EflDriver.
        https://bugs.webkit.org/show_bug.cgi?id=86117

        Reviewed by Adam Barth.

        Simplify the code used to wrap driver calls with jhbuild: we can
        just define the 'wrapper' option instead of having to create a
        Driver class just for that.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort.__init__):
        (EflPort._port_flag_for_scripts):

2012-05-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116633.
        http://trac.webkit.org/changeset/116633
        https://bugs.webkit.org/show_bug.cgi?id=86093

        Breaks EFL tests (Requested by kov on #webkit).

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/EventSender.cpp:
        (keyDownCallback):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setTabKeyCyclesThroughElements):

2012-05-10  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] Memory leaks found in EFL DRT
        https://bugs.webkit.org/show_bug.cgi?id=85889

        Reviewed by Gustavo Noronha Silva.

        Fix two memory leaks in EFL's DRT by using JSRetainPtr for JSString
        created with JSStringCreateWithUTF8CString.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onWindowObjectCleared):
        * DumpRenderTree/efl/EventSender.cpp:
        (modifiersFromJSValue):

2012-05-10  Alexander Shalamov  <alexander.shalamov@intel.com>

        [EFL] LayoutTestController needs implementation of setTabKeyCyclesThroughElements
        https://bugs.webkit.org/show_bug.cgi?id=82864

        Reviewed by Gustavo Noronha Silva.

        Add missing implementation for setTabKeyCyclesThroughElements to EFL's LayoutTestController
        in order to unskip fast/events/keypress-insert-tab.html

        * DumpRenderTree/efl/EventSender.cpp:
        (keyDownCallback):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setTabKeyCyclesThroughElements):

2012-05-10  Alexander Shalamov  <alexander.shalamov@intel.com>

        [EFL][DRT] EventSender - set delayed event information if it was not set before
        https://bugs.webkit.org/show_bug.cgi?id=85972

        Reviewed by Gustavo Noronha Silva.

        Reset delayed event information if it is missing.

        * DumpRenderTree/efl/EventSender.cpp:
        (feedOrQueueMouseEvent):

2012-05-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        WebPageProxy::activeURL() should return the pending API request, even when there's no main frame
        https://bugs.webkit.org/show_bug.cgi?id=85806

        The m_pendingAPIRequestURL member is used (presumably) to mask over the async
        nature of WebKit2, so that starting a load of a URL will reflect that URL
        immedeatly from activeURL, even if the request has not been passed over to
        the web process yet and reflected there.

        This works well, except in the case of the initial request, where the main
        frame creation happens on the web process side and is notified back to the
        UI process. Until we've recived the notification we don't know about the main
        frame, and this race condition will potentially give us an empty url instead
        of the pending request.

        To solve this we always return the pending API request if it's set, even
        when there's no mainframe yet (that we known about).

        Reviewed by Simon Hausmann.

        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:

2012-05-10  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][DRT] Clear added user style sheets before a new testcase execution.
        https://bugs.webkit.org/show_bug.cgi?id=84792

        Reviewed Gustavo Noronha Silva.

        The added user style sheets from the previous testcases are cleared in order to avoid 
        flaky results.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):

2012-05-09  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move suspendAnimations to use Internals interface.
        https://bugs.webkit.org/show_bug.cgi?id=85986

        Reviewed by Ryosuke Niwa.

        Remove suspendAnimations functions, because it is able to work in the 
        cross-port way through the Internals interface

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:

2012-05-09  Kent Tamura  <tkent@chromium.org>

        [Chromium] Attempt to fix an Android build error.
        https://bugs.webkit.org/show_bug.cgi?id=86045

        * DumpRenderTree/DumpRenderTree.gypi:

2012-05-09  Ojan Vafai  <ojan@chromium.org>

        Don't show partytime if there are non-layout test failures.
        https://bugs.webkit.org/show_bug.cgi?id=86056

        Reviewed by Dimitri Glazkov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:

2012-05-09  Hayato Ito  <hayato@chromium.org>

        Improve a warning message for a reftest having an unused expectation file.
        https://bugs.webkit.org/show_bug.cgi?id=85975

        Reviewed by Adam Barth.

        The current warning message is not intuitive. It might be better to update the message
        so that it encourage users to remove unused expectation files.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__):

2012-05-09  Ojan Vafai  <ojan@chromium.org>

        Change "losing test coverage" to cover all non-layout test problems in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=86043

        Reviewed by Adam Barth.

        -Get rid of the gtest iframe.
        -Cover all non-layout test problems. Before we wouldn't catch compile failures
        or gtest failures since they were not on the webkit testing bots.
        -Include the list of failing steps next to the builder name. This is a lot less
        cluttered than you'd expect and already helped me find a compile failure early.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        Delete unused map.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:

2012-05-09  Jessie Berlin  <jberlin@apple.com>

        Crash using the new WKBundleDOMWindowExtensions APIs.
        https://bugs.webkit.org/show_bug.cgi?id=85888

        Reviewed by Brady Eidson.

        Cached frames can live slightly longer than the page, but most clients unregister themselves
        and do other cleanup in the willDestroyPage callback, making them miss the
        willDestroyGlobalObjectForDOMWindowExtension callbacks.

        The calls to willDestroyGlobalObjectForDOMWindowExtension in the DOMWindowExtensionBasic
        test were all being invoked underneath WebPage::close. This is unrealistic. Update that test
        to destroy the BundleDOMWindowExtensions in response to the willDestroyPage callback.

        Add a test to verify that willDestroyGlobalObjectForDOMWindowExtension is being called for
        pages that don't go into the page cache.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add DOMWindowExtensionNoCache.cpp, DOMWindowExtensionNoCache_Bundle.cpp, simple-unload.html
        and simple-iframe-unload.html

        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic.cpp:
        (TestWebKitAPI):
        Remove the expected messages for willDestroyGlobalObjectForDOMWindowExtension.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        Do not bother to keep track of the live extension count - all of them are expected to be
        live until the test completes.
        (TestWebKitAPI::TEST):
        Fix the calls to EXPECT to pass the expected value first, and use EXPECT_WK_STREQ so that
        message failures will be clearer.
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionBasic::willDestroyPage):
        Clean up the BundleDOMWindowExtensions.
        (TestWebKitAPI::DOMWindowExtensionBasic::willDestroyGlobalObjectForDOMWindowExtension):
        Add an ASSERT_NOT_REACHED.

        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache.cpp: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        Keep track of the messages received so they can be checked at the end of the test.
        (TestWebKitAPI::TEST):
        Navigate to uncacheable pages and back.
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache_Bundle.cpp: Copied from Tools/TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic_Bundle.cpp.
        (DOMWindowExtensionNoCache):
        (TestWebKitAPI::DOMWindowExtensionNoCache::DOMWindowExtensionNoCache):
        Set up all the states for each BundleDOMWindowExtension.
        (TestWebKitAPI::DOMWindowExtensionNoCache::frameLoadFinished):
        Tell the UI Process about the states of the BundleDOMWindowExtensions.
        (TestWebKitAPI::DOMWindowExtensionNoCache::sendExtensionStateMessage):
        (TestWebKitAPI::DOMWindowExtensionNoCache::initialize):
        (TestWebKitAPI::DOMWindowExtensionNoCache::didCreatePage):
        (TestWebKitAPI::DOMWindowExtensionNoCache::willDestroyPage):
        Remvoe the remaining BundleDOMWindowExtensions, send the updated state, and finish the test.
        (TestWebKitAPI::DOMWindowExtensionNoCache::updateExtensionStateRecord):
        (TestWebKitAPI::DOMWindowExtensionNoCache::sendBundleMessage):
        (TestWebKitAPI::DOMWindowExtensionNoCache::globalObjectIsAvailableForFrame):
        (TestWebKitAPI::DOMWindowExtensionNoCache::willDisconnectDOMWindowExtensionFromGlobalObject):
        ASSERT that these pages not going into the page cache are not getting disconnected to go into
        the page cache.
        (TestWebKitAPI::DOMWindowExtensionNoCache::didReconnectDOMWindowExtensionToGlobalObject):
        Ditto about getting reconnected when coming out of the page cache.
        (TestWebKitAPI::DOMWindowExtensionNoCache::willDestroyGlobalObjectForDOMWindowExtension):
        Tell the UI Process, update the state, and get rid of the BundleDOMWindowExtension.
        (TestWebKitAPI::didFinishLoadForFrameCallback):
        (TestWebKitAPI::globalObjectIsAvailableForFrameCallback):
        (TestWebKitAPI::willDisconnectDOMWindowExtensionFromGlobalObjectCallback):
        (TestWebKitAPI::didReconnectDOMWindowExtensionToGlobalObjectCallback):
        (TestWebKitAPI::willDestroyGlobalObjectForDOMWindowExtensionCallback):

        * TestWebKitAPI/Tests/WebKit2/simple-iframe-unload.html: Added.
        * TestWebKitAPI/Tests/WebKit2/simple-unload.html: Added.

2012-05-09  Adam Barth  <abarth@webkit.org>

        [Chromium] Android's DRT doesn't want to build WebUserMediaClientMock
        https://bugs.webkit.org/show_bug.cgi?id=86045

        Reviewed by Eric Seidel.

        * DumpRenderTree/DumpRenderTree.gypi:

2012-05-09  Adam Barth  <abarth@webkit.org>

        [Chromium] MockWebSpeechInputController.cpp should be guarded by ENABLE(INPUT_SPEECH)
        https://bugs.webkit.org/show_bug.cgi?id=86041

        Reviewed by Eric Seidel.

        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp:

2012-05-09  Adam Barth  <abarth@webkit.org>

        [Chromium] Android needs to swizzle pixel dumps in order to get the same hash as other platforms
        https://bugs.webkit.org/show_bug.cgi?id=86040

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dumpImage):

2012-05-09  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL] Build fix after r116464.

        `ulong' is a type defined by glibc, so it is not very
        portable. Use `unsigned long' instead.

        * DumpRenderTree/efl/EventSender.cpp:
        (DelayedEvent::DelayedEvent):
        (DelayedEvent):
        (leapForwardCallback):

2012-05-09  Adam Barth  <abarth@webkit.org>

        [Chromium] LayoutTestController should use ENABLE guards for some features
        https://bugs.webkit.org/show_bug.cgi?id=86030

        Reviewed by Eric Seidel.

        These features are disabled on OS(ANDROID) and so shouldn't be compiled
        when the feature is off.

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

2012-05-09  Tom Zakrajsek  <tomz@codeaurora.org>

        Fix overzealous re-opened since blocked by... message
        https://bugs.webkit.org/show_bug.cgi?id=86020

        Reviewed by Adam Barth.

        Changed CreateBug behavior to only re-open a blocked bug if it
        was RESOLVED.  Also had to update the test infrastructure slightly
        to allow for distinct mock commit revisions, so one could point
        to a RESOLVED bug for testing while another pointed to an OPEN bug.

        Also moved default created mock bug to be 60001 instead of 50004
        which already exists as a reference mock bug.

        * Scripts/webkitpy/common/checkout/checkout_mock.py:
        (MockCheckout.__init__):
        (MockCheckout.commit_info_for_revision):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        (MockBugzilla.create_bug):
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (test_create_rollout_resolved):
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (FailureReasonTest.test_blame_line_for_revision):
        * Scripts/webkitpy/tool/steps/createbug.py:
        (CreateBug.run):

2012-05-09  Hugo Parente Lima  <hugo.lima@openbossa.org>

        Use suitable viewport values on XHTML-MP pages.
        https://bugs.webkit.org/show_bug.cgi?id=85425

        Reviewed by Kenneth Rohde Christiansen.

        Enable LEGACY_VIEWPORT_ADAPTION on Qt port.

        * qmake/mkspecs/features/features.prf:

2012-05-09  Jochen Eisinger  <jochen@chromium.org>

        When creating a new page during a navigation, prime the initial document with the correct referrer policy
        https://bugs.webkit.org/show_bug.cgi?id=86001

        Reviewed by Adam Barth.

        Store the referrer policy in the request, so the network stack can comply with it.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::willSendRequest):

2012-05-09  Vivek Galatage  <vivekgalatage@gmail.com>

        Remove CYGWIN=tty from environment variable as its no longer supported
        https://bugs.webkit.org/show_bug.cgi?id=85791

        The CYGWIN=tty environment variable is no longer supported from Cygwin
        version 1.7.10. This fix avoids addition of this environment variable
        for Cygwin versions greater than 1.7.9. For supporting older versions
        i.e. 1.7.9 or older, the script takes care of retaining the environment
        variable.

        Reviewed by Adam Roben.

        * Scripts/webkitdirs.pm:
        (setupAppleWinEnv):

2012-05-09  Dirk Pranke  <dpranke@chromium.org>

        nrwt: --skip-failing-tests should also skip flaky tests
        https://bugs.webkit.org/show_bug.cgi?id=85941

        Reviewed by Ojan Vafai.

        This changes --skip-failing-tests so that we skip tests that
        are believed to pass sometimes as well as tests that are
        believed to always fail.

        In addition, in testing this I discovered that we had lousy
        test coverage of the details of retrying test failures and
        --clobber-old-results, so I wrote some more tests.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.prepare_lists_and_print_output):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (unit_test_list):
        (TestPort.__init__):
        (TestDriver.run_test):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_skip_failing_tests):
        (MainTest.test_retrying_and_flaky_tests):

2012-05-09  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][DRT] EFL's DRT needs to support LayoutTestController.dumpIconChanges()
        https://bugs.webkit.org/show_bug.cgi?id=84435

        Reviewed by Antonio Gomes.

        Catch the "icon,changed" signal on the frames in EFL's DumpRenderTree
        to support LayoutTestController's dumpIconChanges().

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::onFrameIconChanged):
        (DumpRenderTreeChrome::onFrameCreated):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):

2012-05-09  Dominik Röttsches  <dominik.rottsches@intel.com>

        webkit-patch upload Fails Behind Load-balancing Proxies
        https://bugs.webkit.org/show_bug.cgi?id=85980

        Reviewed by Adam Barth.

        Unchecking the login restriction to IP to allow the tool
        to function behind load-balancing proxies that use multiple
        outgoing IPs.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.authenticate):

2012-05-09  Hao Zheng  <zhenghao@chromium.org>

        [Chromium-android] Add unit test for Android layout test script (chromium_android.py)
        https://bugs.webkit.org/show_bug.cgi?id=80852

        Reviewed by Adam Barth.

        Add some tests to ensure that chromium android port works to some
        extent. Some methods is hard to test, as they rely on the actual
        behavior on device, e.g. pushing files to device.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.get_last_stacktrace): Check if dir exists.
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidPortTest):
        (ChromiumAndroidPortTest.test_attributes):
        (ChromiumAndroidPortTest.test_get_last_stacktrace):
        (ChromiumAndroidPortTest.test_get_last_stacktrace.mock_run_command_no_dir):
        (ChromiumAndroidPortTest.test_get_last_stacktrace.mock_run_command_no_file):
        (ChromiumAndroidPortTest.test_get_last_stacktrace.mock_run_command_non_empty):
        (ChromiumAndroidDriverTest):
        (ChromiumAndroidDriverTest.setUp):
        (ChromiumAndroidDriverTest.test_get_drt_return_value):
        (ChromiumAndroidDriverTest.test_has_crash_hint):
        (ChromiumAndroidDriverTest.test_read_prompt):
        (ChromiumAndroidDriverTest.test_test_shell_command):
        (ChromiumAndroidDriverTest.test_write_command_and_read_line):

2012-05-09  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] ORWT fails with Qt 5 and WK2.
        https://bugs.webkit.org/show_bug.cgi?id=85968

        Reviewed by Csaba Osztrogonác.

        The Qt5 binary does not have a -style argument, so avoid using it.

        * Scripts/old-run-webkit-tests:

2012-05-09  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][DRT] LayoutTestController addUserScript implementation
        https://bugs.webkit.org/show_bug.cgi?id=84718

        Reviewed by Antonio Gomes.

        Added implementation of addUserScript() to LayoutTestController.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues): clear added user scripts
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::addUserScript): added implementation

2012-05-09  Dan Bernstein  <mitz@apple.com>

        Made build-webkit copy WebKitLibraries to the right location again after r116257

        Reviewed by Mark Rowe.

        * Scripts/build-webkit: Pass the built product directory to copy-webkitlibraries-to-product-directory.
        * Scripts/copy-webkitlibraries-to-product-directory: Use the first argument, if present, as the
        product directory.

2012-05-08  Ojan Vafai  <ojan@chromium.org>

        Show the chromium non-layout test bots in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=85903

        Reviewed by Eric Seidel.

        This is just a single-line high-level overview of the chromium non-layout test bots.
        This means that Chromium WebKit gardeners only need to keep garden-o-matic open in
        order to do their job.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/onebar.css:
        (#chromium-gtests iframe):
        (#chromium-gtests):
        (#gtest-label):

2012-05-08  Kangil Han  <kangil.han@samsung.com>

        [EFL][DRT] Implement TextInputController.
        https://bugs.webkit.org/show_bug.cgi?id=78559

        Reviewed by Martin Robinson.

        TextInputController has been created for an input emulation purpose in DRT.
        However, not like other ports, EFL doesn't have it.
        Therefore, this patch will enable EFL port to have an input emulation in DRT.

        * DumpRenderTree/efl/CMakeLists.txt:
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onWindowObjectCleared):
        * DumpRenderTree/efl/TextInputController.cpp: Added.
        (setMarkedTextCallback):
        (hasMarkedTextCallback):
        (markedRangeCallback):
        (insertTextCallback):
        (unmarkTextCallback):
        (firstRectForCharacterRangeCallback):
        (selectedRangeCallback):
        (makeTextInputController):
        * DumpRenderTree/efl/TextInputController.h: Added.

2012-04-23  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL] Pass a WTF::String directly from DRT to ewebkit when possible
        https://bugs.webkit.org/show_bug.cgi?id=84634

        Reviewed by Gustavo Noronha Silva.

        Drop unnecessary const char* -> WTF::String conversions by
        creating String objects directly in LayoutTestController out of
        JSStringRef's and passing them to DumpRenderTreeSupportEfl.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::queueLoad):
        (LayoutTestController::setValueForUser):
        (LayoutTestController::findString):
        (LayoutTestController::addUserStyleSheet):

2012-05-08  Alexander Shalamov  <alexander.shalamov@intel.com>

        [EFL][DRT] EventSender needs implementation of leapForward function
        https://bugs.webkit.org/show_bug.cgi?id=83486

        Reviewed by Eric Seidel.

        Implemented leapForward function in Efl's DRT. This function is required
        to delay and queue event execution and simulate real user behavior.

        * DumpRenderTree/efl/EventSender.cpp:
        (DelayedEvent):
        (MouseEventInfo::MouseEventInfo):
        (MouseEventInfo):
        (sendClick):
        (mouseDownCallback):
        (mouseUpCallback):
        (mouseMoveToCallback):
        (leapForwardCallback):
        (mouseScrollByCallback):
        (feedOrQueueMouseEvent):
        (feedMouseEvent):
        (feedQueuedMouseEvents):

2012-05-08  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [GTK] Memory leak in DRT EventSender.cpp
        https://bugs.webkit.org/show_bug.cgi?id=85886

        Reviewed by Martin Robinson.

        Fix a memory leak in gdkModifersFromJSValue() by using JSRetainPtr for
        JSString created with JSStringCreateWithUTF8CString.

        * DumpRenderTree/gtk/EventSender.cpp:
        (gdkModifersFromJSValue):

2012-05-08  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] glib dependency needs to be updated in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=85878

        Reviewed by Martin Robinson.

        Bump glib version from 2.31.8 to 2.32.2 in jhbuild.modules. This
        addresses flakiness in media tests due to possible deadlock with the
        following output on stderr:
        GStreamer-WARNING **: wrong STREAM_LOCK count 0

        The bug was fixed upstream by:
        http://git.gnome.org/browse/glib/commit/?id=265f265c677bc5399dbb1cfa449cb4b915a6459f

        * efl/jhbuild.modules:

2012-05-07  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Unbreak debugging of WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=85839

        Reviewed by Simon Hausmann.

        When you attach GDB to a running process, it stops it.
        http://trac.webkit.org/changeset/115958 introduced a pause() 
        call to wait the debugger to be attached to then continue 
        the execution of the WebProcess. Unfortunately the pause()
        function does not return unless a signal handler is called.
        This patch introduce an event handler to exit from the paused
        state when the debugger send the signal SIGCONT. The old code
        works with older version of GDB (<7.0) but not with newer
        versions where the behavior of pause() is correct.

        * WebKitTestRunner/qt/main.cpp:
        (sigcontHandler):
        (main):

2012-05-08  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][DRT] EFL's DRT does not fully support page visibility
        https://bugs.webkit.org/show_bug.cgi?id=85032

        Reviewed by Antonio Gomes.

        * DumpRenderTree/LayoutTestController.cpp:
        (resetPageVisibilityCallback): Fix incorrect argumentCount check.
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues): Properly
        reset page visibility setting between tests.
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setPageVisibility): Add support for "preview"
        visibility state.

2012-05-08  Gavin Peters  <gavinp@chromium.org>

        [webkit-patch] Return meaningful results from single-result queries.
        https://bugs.webkit.org/show_bug.cgi?id=85367

        Reviewed by Dirk Pranke.

        Sometimes a quicksearch returns a single result by just redirecting to the page for that single
        bug. This patch hacks around that by noticing the redirect target is a single page, and constructing
        a result list consisting of that one bug.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (BugzillaQueries._fetch_bugs_from_advanced_query):

2012-05-08  Gavin Peters  <gavinp@chromium.org>

        [webkit-patch] Add new chrome-channels command to track down current chrome release channels for a committed bug.
        https://bugs.webkit.org/show_bug.cgi?id=85368

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/config/urls.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        (MockBugzillaQueries.fetch_bugs_matching_quicksearch):
        * Scripts/webkitpy/common/net/omahaproxy.py: Added.
        (OmahaProxy):
        (OmahaProxy.__init__):
        (OmahaProxy.set_url):
        (OmahaProxy._json_url):
        (OmahaProxy._get_json):
        (OmahaProxy.get_revisions):
        * Scripts/webkitpy/common/net/omahaproxy_unittest.py: Added.
        (MockOmahaProxy):
        (MockOmahaProxy.__init__):
        (OmahaProxyTest):
        (OmahaProxyTest.test_get_revisions):
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/bugsearch.py:
        (BugSearch):
        * Scripts/webkitpy/tool/commands/chromechannels.py: Added.
        (ChromeChannels):
        (__init__):
        (execute):
        * Scripts/webkitpy/tool/commands/chromechannels_unittest.py: Added.
        (MockOmahaProxy):
        (MockOmahaProxy.get_revisions):
        (TestableChromeChannels):
        (TestableChromeChannels.__init__):
        (ChromeChannelsTest):
        (ChromeChannelsTest.test_single_bug):
        (ChromeChannelsTest.test_with_query):

2012-05-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ unit tests.

        * gtk/common.py:
        (pkg_config_file_variable):

2012-05-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Google tests that time out are leaked
        https://bugs.webkit.org/show_bug.cgi?id=84973

        Reviewed by Philippe Normand.

        Move Tools/Scripts/run-gtk-tests to Tools/gtk/run-api-tests
        leaving run-gtk-tests as simple wrapper that runs run-api-tests in
        a jhbuild environment when jhbuild is available.

        * Scripts/run-gtk-tests: Run Tools/gtk/run-api-tests directly or
        with jhbuild if present.
        * gtk/common.py:
        (pkg_config_file_variable): Generic function to get a variable
        from a pkg-config file.
        (prefix_of_pkg_config_file): Use pkg_config_file_variable with 'prefix'.
        * gtk/run-api-tests: Copied from Tools/Scripts/run-gtk-tests.
        (TestRunner.__init__): Use common.build_path() to get the programs path.
        (TestRunner._lookup_atspi2_binary): Use
        common.pkg_config_file_variable() to get the 'exec_prefix'.
        (TestRunner._start_accessibility_daemons): Use subprocess.Popen()
        directly instead of helper _create_process that has been removed.
        (TestRunner._setup_testing_environment): Use subprocess.Popen()
        directly instead of helper _create_process that has been
        removed. Use common.top_level_path() and common.build_path()
        instead of custom methods that have been removed too.
        (TestRunner._run_test_command): Use subprocess.Popen() directly
        instead of helper _create_process that has been removed.

2012-05-08  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] [DRT] Clear extra views before setting a blank page
        https://bugs.webkit.org/show_bug.cgi?id=85608

        Reviewed by Kenneth Rohde Christiansen.

        We need to clear the extra views before setting a blank page,
        otherwise it will cause more events interactions and sometimes
        trigger a unload(). This was causing frame-crash-with-page-cache.html
        to leak events to the next test causing any subsequent test to
        fail.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::clearExtraViews):
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):

2012-05-08  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] X11 plugins need to be reworked for Qt5+WK1
        https://bugs.webkit.org/show_bug.cgi?id=80691

        Reviewed by Simon Hausmann.

        Implement basic windowless plugin support with Qt5.

        * qmake/mkspecs/features/features.prf:
        Enable NPAPI plugins if X11 libraries are available.
        * qmake/mkspecs/features/functions.prf:
        Added a convenience function to determine availability
        of X11 libraries.

2012-05-07  Raphael Kubo da Costa  <rakuco@webkit.org>

        [webkitpy] Remove Python 2.5-specific workaround from http_server_base.py.
        https://bugs.webkit.org/show_bug.cgi?id=85852

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase._is_server_running_on_all_ports): Revert the part
        of r89412 which was a workaround for an issue with Python 2.5 on
        Mac 10.5.

2012-05-07  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        webkitdirs.pm: Make determineNumberOfCPUs work on FreeBSD.
        https://bugs.webkit.org/show_bug.cgi?id=81481

        Reviewed by Dirk Pranke.

        FreeBSD has the same sysctl interface present in Darwin to query
        the number of CPUs available, so use that too.

        * Scripts/webkitdirs.pm:
        (determineNumberOfCPUs): Share the sysctl call with Darwin.
        (isFreeBSD): Added.

2012-05-07  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed Qt build fix in Debug.

        We need some system includes here for getpid() to be recognized.

        * WebKitTestRunner/qt/main.cpp:

2012-05-07  Ojan Vafai  <ojan@chromium.org>

        When embedding the flakiness dashboard, hide popups when the frame is blurred.
        https://bugs.webkit.org/show_bug.cgi?id=85684

        Reviewed by Dirk Pranke.

        If you show a popup, then click elsewhere in garden-o-matic, it will now
        properly hide it.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (showPopup):
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (showPopupForBuild):
        (generatePageForIndividualTests.if):
        (generatePageForIndividualTests):
        * TestResultServer/static-dashboards/flakiness_dashboard_embedded_unittests.js: Added.
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        * TestResultServer/static-dashboards/run-embedded-unittests.html: Added.

2012-05-07  Ian Vollick  <vollick@chromium.org>

        [chromium] WebViewHost should setCompositorSurfaceReady
        https://bugs.webkit.org/show_bug.cgi?id=85418

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::setWebWidget):

2012-05-07  Jon Lee  <jonlee@apple.com>

        WebKitTestRunner needs layoutTestController.dumpFrameLoadCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=42331
        <rdar://problem/8193641>

        Reviewed by Darin Adler.

        This patch sets up the framework for supporting dumpFrameLoadCallbacks, as well as
        outputting some of the required strings. As tests become unskipped the other callbacks
        can be supported.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Add dumpFrameLoadCallbacks()
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage): pass in the dictionary containing keys needed to initialize
        dump callbacks for the layoutTestController.
        (WTR::InjectedBundle::booleanForKey): Helper function to extract boolean value from key in WKDictionaryRef.
        Output some warning if we are trying to extract a value that is not a boolean.
        (WTR::InjectedBundle::beginTesting): Update to take in the dictionary passed in by the TestController.
        We cannot set the bits on the layoutTestController until it has been created in beginTesting().
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR):
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR):
        (WTR::dumpFrameDescriptionSuitableForTestResult): Static function similar to
        -[WebFrame _drt_descriptionSuitableForTestResult] in DumpRenderTree.
        (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame): Output string.
        (WTR::InjectedBundlePage::didCommitLoadForFrame): Output string.
        (WTR::InjectedBundlePage::didFinishLoadForFrame): Output string.
        (WTR::InjectedBundlePage::didReceiveTitleForFrame): Output string.
        (WTR::InjectedBundlePage::didCancelClientRedirectForFrame): Output string.
        (WTR::InjectedBundlePage::willPerformClientRedirectForFrame): Output string. In WK1 it's
        "willPerformClientRedirectToURL" so we will have to use that value here.
        (WTR::InjectedBundlePage::didFinishDocumentLoadForFrame): Output string.
        (WTR::InjectedBundlePage::didHandleOnloadEventsForFrame): Output string.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): Initialize to not dump frame load callbacks.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpFrameLoadCallbacks): Change to use setShouldDumpFrameLoadCallbacks.
        (WTR::LayoutTestController::setShouldDumpFrameLoadCallbacks): Set bit.
        (WTR::LayoutTestController::shouldDumpFrameLoadCallbacks): Return bit.
        (LayoutTestController): Added m_dumpFrameLoadCallbacks to track whether to dump the output.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::shouldLogFrameLoadDelegates): Similar to DRT.
        (WTR::TestInvocation::invoke): Based on the URL loaded, set the bit in the dictionary that gets passed
        to the injected bundle.

2012-05-07  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Enhance WebUserMediaClientMock and add a test for it
        https://bugs.webkit.org/show_bug.cgi?id=85618

        Reviewed by Adam Barth.

        Adding the capability to control which MediaStreamTracks actually get created,
        and adding a test that exercises the JS api using that capability.

        * DumpRenderTree/chromium/WebUserMediaClientMock.cpp:
        (WebKit::WebUserMediaClientMock::requestUserMedia):
        * DumpRenderTree/chromium/WebUserMediaClientMock.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::testMediaStreamClient):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-05-07  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] WebGL feature is not built anymore through build-webkit after r116251
        https://bugs.webkit.org/show_bug.cgi?id=85788

        Reviewed by Martin Robinson.

        Enable WebGL by default for the Gtk port. The feature is already enabled by
        default in configure.ac, so there's no reason it shouldn't be enabled when
        building through build-webkit.

        * Scripts/webkitperl/FeatureList.pm:

2012-05-07  Csaba Osztrogonác  <ossy@webkit.org>

        Unittest fix after r116288, because now there are more than 5 hit for the 'Eric' word.
        We have only 2 'Gavin', so it is a better choice than 'Eric' for unit testing.

        Reviewed by Tor Arne Vestbø.

        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_whois):

2012-05-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116299, r116301, and r116303.
        http://trac.webkit.org/changeset/116299
        http://trac.webkit.org/changeset/116301
        http://trac.webkit.org/changeset/116303
        https://bugs.webkit.org/show_bug.cgi?id=85795

        Build is still broken (Requested by Ossy on #webkit).

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/main.cpp:
        (main):
        * QtTestPlatformPlugin/QtTestPlatformPlugin.pro: Removed.
        * QtTestPlatformPlugin/TestIntegration.cpp: Removed.
        * QtTestPlatformPlugin/TestIntegration.h: Removed.
        * QtTestPlatformPlugin/mac/TestFontDatabase.h: Removed.
        * QtTestPlatformPlugin/mac/TestFontDatabase.mm: Removed.
        * QtTestPlatformPlugin/mac/TestIntegrationMac.mm: Removed.
        * QtTestPlatformPlugin/main.cpp: Removed.
        * QtTestPlatformPlugin/testplatform.json: Removed.
        * Tools.pro:
        * WebKitTestRunner/Target.pri:
        * WebKitTestRunner/qt/main.cpp:
        (main):

2012-05-07  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed Qt build fix.

        One more try to learn how to use
        const with a pointer array.

        * DumpRenderTree/qt/main.cpp:
        (initializeTestPlatformPlugin):

2012-05-07  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed build fix after r116299.

        * DumpRenderTree/qt/main.cpp:
        (initializeTestPlatformPlugin):

2012-05-07  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Add test specific platform plugin to achieve unified layout test results
        https://bugs.webkit.org/show_bug.cgi?id=80996

        Reviewed by Simon Hausmann.

        Added QtTestPlatformPlugin as a new project under Tools.
        This is a Qt5-ish platform plugin that can be used to tweak the
        platform support interfaces in order to unify layout test results.
        For now it only overrides the font database on Mac and redirects
        everything else to the real platform plugin. The font database it
        provides mimics the way how we set up test fonts with fontconfig on Linux.
        Make DumpRenderTree and WebKitTestRunner use this platform plugin.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/main.cpp:
        (initializeTestPlatformPlugin):
        (main):
        * QtTestPlatformPlugin/QtTestPlatformPlugin.pro: Added.
        * QtTestPlatformPlugin/TestIntegration.cpp: Added.
        (TestIntegration::TestIntegration):
        (TestIntegration::fontDatabase):
        * QtTestPlatformPlugin/TestIntegration.h: Added.
        (TestIntegration):
        (TestIntegration::hasCapability):
        (TestIntegration::createPlatformPixmap):
        (TestIntegration::createPlatformWindow):
        (TestIntegration::createPlatformBackingStore):
        (TestIntegration::createPlatformOpenGLContext):
        (TestIntegration::createPlatformSharedGraphicsCache):
        (TestIntegration::guiThreadEventDispatcher):
        (TestIntegration::clipboard):
        (TestIntegration::drag):
        (TestIntegration::inputContext):
        (TestIntegration::accessibility):
        (TestIntegration::nativeInterface):
        (TestIntegration::services):
        (TestIntegration::styleHint):
        (TestIntegration::platformTheme):
        * QtTestPlatformPlugin/mac/TestFontDatabase.h: Added.
        (TestFontDatabase):
        * QtTestPlatformPlugin/mac/TestFontDatabase.mm: Added.
        (TestFontDatabase::populateFontDatabase):
        * QtTestPlatformPlugin/mac/TestIntegrationMac.mm: Added.
        (TestIntegration::fontDatabase):
        * QtTestPlatformPlugin/main.cpp: Added.
        (TestIntegrationPlugin::keys):
        (TestIntegrationPlugin::create):
        (TestIntegrationPlugin::initialize):
        * QtTestPlatformPlugin/testplatform.json: Added.
        * Tools.pro:
        * WebKitTestRunner/Target.pri:
        * WebKitTestRunner/qt/main.cpp:
        (main):

2012-05-07  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] media/video-poster-blocked-by-willsendrequest.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=85609

        Reviewed by Simon Hausmann.

        Flakiness was caused by the fact that
        media/crash-closing-page-with-media-as-plugin-fallback.html and
        media/video-poster-blocked-by-willsendrequest.html use the same PNG
        file as poster attribute in the video tag. The PNG file gets cached
        when the first test is executed and this somehow causes the second
        test to fail. 

        The flakiness was addressed by clearing the memory and page caches
        between tests.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):

2012-05-07  Eric Seidel  <eric@webkit.org>

        Add values for all features to Qt's features.pri
        https://bugs.webkit.org/show_bug.cgi?id=85746

        Reviewed by Tor Arne Vestbø.

        When generate-feature-files generates features.pri it provides a value
        for every possible ENABLE_.  In prepration for landing generate-feature-files
        it seems appropriate to add a value for all possible ENABLEs to the existing
        features.pri.  This lets me make sure that I'm getting them all right!

        * qmake/mkspecs/features/features.pri:

2012-05-07  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Added myself as a committer.

        Not reviewed.

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

2012-05-07  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL][DRT] Implement LayoutTestController::execCommand
        https://bugs.webkit.org/show_bug.cgi?id=82286

        Reviewed by Antonio Gomes.

        Add missing implementation execCommand and isCommandEnabled to EFL's
        LayoutTestController. 

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::execCommand):
        (LayoutTestController::isCommandEnabled):

2012-05-06  Hayato Ito  <hayato@chromium.org>

        [prepare-ChangeLog] Excludes a reference file used by reftests from test files.
        https://bugs.webkit.org/show_bug.cgi?id=74268

        Reviewed by Ryosuke Niwa.

        * Scripts/prepare-ChangeLog:
        (generateFileList):

2012-05-06  Mary Wu  <mary.wu@torchmobile.com.cn>

        Add a contributor to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=85761

        Reviewed by Unreviewed.

        Add myself to committers.py contributor.

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

2012-05-06  Dan Bernstein  <mitz@apple.com>

        Tools part of: Building and debugging WebKit in the Xcode IDE requires a lot of setup
        https://bugs.webkit.org/show_bug.cgi?id=85739

        Reviewed by Daniel Bates.

        * Scripts/build-webkit: Moved code that copies from WebKitLibraries to the product directory
        from here...
        * Scripts/copy-webkitlibraries-to-product-directory: ...to this new script.

2012-05-06  Andy Estes  <aestes@apple.com>

        Fix the build after r116246.

        * DumpRenderTree/LayoutTestController.cpp: Remove an unused function.

2012-05-06  Eric Seidel  <eric@webkit.org>

        Update several build-webkit options to match the #defines they toggle
        https://bugs.webkit.org/show_bug.cgi?id=85744

        Reviewed by Adam Barth.

        Most notable here is fixing --3d-canvas to be --webgl these days --
        the define was renamed 15 months ago!

        * Scripts/webkitperl/FeatureList.pm:

2012-05-06  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL] EFL's LayoutTestController setJavaScriptCanAccessClipboard implementation
        https://bugs.webkit.org/show_bug.cgi?id=83687

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setJavaScriptCanAccessClipboard):

2012-05-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Convert isPageBoxVisible to use Internals interface.
        https://bugs.webkit.org/show_bug.cgi?id=85692

        Reviewed by Darin Adler.

        Remove isPageBoxVisible functions, because it is able to work in the
        cross-port way through the Internals interface.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:

2012-05-06  Tom Zakrajsek  <tomz@codeaurora.org>

        sheriffbot isn't reopening patches after it lands rollouts
        https://bugs.webkit.org/show_bug.cgi?id=64418

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/steps/createbug.py:
        (CreateBug.run):

2012-05-04  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Use os.pathsep instead of manually finding out the path separator in NRWT.
        https://bugs.webkit.org/show_bug.cgi?id=85697

        Reviewed by Eric Seidel.

        * Scripts/new-run-webkit-tests: Instead of manually detecting whether
        the path separator should be ':' or ';' by checking sys.platform, rely
        on os.pathsep which has exactly the same information (os.pathsep is
        ':' for Cygwin, from what I could check in Python's sources).

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

        Unreviewed, rolling out r116223.
        http://trac.webkit.org/changeset/116223
        https://bugs.webkit.org/show_bug.cgi?id=85718

        The bots need to set XDG_DATA_DIRS (Requested by rakuco on
        #webkit).

        * efl/jhbuildrc:
        * gtk/jhbuildrc:

2012-05-05  Raphael Kubo da Costa  <rakuco@webkit.org>

        [jhbuild] Do not set XDG_DATA_DIRS in jhbuildrc.
        https://bugs.webkit.org/show_bug.cgi?id=85717

        Reviewed by Martin Robinson.

        After r116209, the XDG_DATA_DIRS environment variable is now
        passed by webkitpy's layout_tests code to run-with-jhbuild, so
        instead of setting a few defaults in jhbuildrc we can now rely on
        the values set and really used by each system.

        * efl/jhbuildrc:
        * gtk/jhbuildrc:

2012-05-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Buildfix for --minimal build after r116107.

        Reviewed by Csaba Osztrogonác.

        * qmake/mkspecs/features/features.prf:

2012-05-05  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] GtkDriver is not required anymore after r116134
        https://bugs.webkit.org/show_bug.cgi?id=85699

        Reviewed by Csaba Osztrogonác.

        Remove GtkDriver as it was replaced by the XvfbDriver and is
        no longer needed.

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2012-05-05  Zan Dobersek  <zandobersek@gmail.com>

        Increase the display ID for the Xvfb process to use if pixel_tests argument
        is true rather than if pixel_tests option is present. This fixes the
        XvfbDriver in the same way r115825 fixed the now-redundant GtkDriver.

        Rubber-stamped by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        (XvfbDriver._start):

2012-05-04  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Preserve XDG_DATA_DIRS in the environment passed to ServerProcess.
        https://bugs.webkit.org/show_bug.cgi?id=85694

        Reviewed by Martin Robinson.

        This is sort of a follow-up to r100674: $XDG_DATA_DIRS should be
        preserved, as it is particularly useful for Linux/Unix
        environments.  As a real use case, if shared-mime-info is
        installed into a non-trivial prefix, Glib and other libraries will
        have trouble to properly identify mimetypes (in ResourceResponses,
        for example) as the base freedesktop.org mimetype file will not be
        found.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.to.setup_environ_for_server):

2012-05-04  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Simplify how libWebCoreModules is linked in, and fix WebKit2 build
        https://bugs.webkit.org/show_bug.cgi?id=85691

        * GNUmakefile.am: no longer link libWebCoreModules to DumpRenderTree.

2012-05-04  Eric Seidel  <eric@webkit.org>

        Make capitalization and descriptions in FeatureList.pm more consistent to make easier to autogenerate
        https://bugs.webkit.org/show_bug.cgi?id=85583

        Reviewed by Daniel Bates.

        * Scripts/webkitperl/FeatureList.pm:

2012-05-04  Eric Seidel  <eric@webkit.org>

        Sort entries in FeaturesList.pm to make them easier to autogenerate
        https://bugs.webkit.org/show_bug.cgi?id=85584

        Reviewed by Daniel Bates.

        No functional changes, only sorting.

        * Scripts/webkitperl/FeatureList.pm:

2012-05-04  Andy Estes  <aestes@apple.com>

        REGRESSION (r115752): WebKit2.NewFirstVisuallyNonEmptyLayout API test times out
        https://bugs.webkit.org/show_bug.cgi?id=85675

        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout.cpp:
        (TestWebKitAPI::TEST): Disable the test.

2012-04-30  Jer Noble  <jer.noble@apple.com>

        Full screen will exit during a provisional load of a non-ancestor iframe.
        https://bugs.webkit.org/show_bug.cgi?id=85230

        Reviewed by Maciej Stachowiak .

        Add support for the new UIDelegate webView:closeFullScreenWithListener: method:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:closeFullScreenWithListener:]):

        Add support for the new closeFullScreen injected bundle method:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::closeFullScreen):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

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

        Fix test naming to be camel-case like the methods they are testing.

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

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

        Show the results links in the embedded flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=85660

        Reviewed by Adam Barth.

        Turns out these links don't add much visual noise and it's annoying
        to have to go to the dashboard from garden-o-matic just to view the
        results for a test.

        This is useful for cases where garden-o-matic doesn't properly show the
        results (e.g. missing tests). If we address all those cases, then
        we could easily hide the results links again if we wanted to.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (showUpdateInfoForTest):
        (htmlForIndividualTestOnAllBuildersWithResultsLinks):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (test):

2012-05-04  Dirk Pranke  <dpranke@chromium.org>

        Revert to using chromium --test-shell mode on SL in NRWT

        https://bugs.webkit.org/show_bug.cgi?id=83076

        Unreviewed, build fix.

        We seem to be seeing a lot more flakiness on the bot since
        I switched NRWT to "DRT" mode. We'll try reverting back and
        see if this helps things.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.__init__):

2012-05-04  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Implement layoutTestController.dumpResourceResponseMIMETypes
        https://bugs.webkit.org/show_bug.cgi?id=84941

        Reviewed by Martin Robinson.

        Print MIME type detection messages in EFL's DumpRenderTree if
        LayoutTestController's dumpResourceResponseMIMETypes() returns true.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onResponseReceived):

2012-05-04  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [GTK] DRT needs an implementation of LayoutTestController::setDefersLoading and ::goBack
        https://bugs.webkit.org/show_bug.cgi?id=85134

        Reviewed by Martin Robinson.

        Add missing implementation setDefersLoading and goBack to GTK's
        LayoutTestController so that the test case rely on these methods
        can be enabled.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::goBack):
        (LayoutTestController::setDefersLoading):

2012-05-04  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [Qt][NRWT] Run each DRT in it's own xvfb
        https://bugs.webkit.org/show_bug.cgi?id=77335

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._driver_class):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._driver_class):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py: Added.
        (XvfbDriver):
        (XvfbDriver._start):
        (XvfbDriver._start.x_filter):
        (XvfbDriver.stop):

2012-05-04  Zan Dobersek  <zandobersek@gmail.com>

        Use destructuring assingment for the return values of the
        port.diff_image() method call.

        Rubber-stamped by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):

2012-05-03  Ojan Vafai  <ojan@chromium.org>

        Store fewer runs by default in the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=85568

        Reviewed by Dirk Pranke.

        This will greatly shrink the size of the json files we load,
        resulting in a much faster initial load. People rarely care
        about more than 100 runs. For the cases they do, they can still click
        the show all runs checkbox to show 500 runs.

        * TestResultServer/model/jsonresults.py:

2012-05-04  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Frame load callbacks output is missing for redirections
        https://bugs.webkit.org/show_bug.cgi?id=85173

        Reviewed by Antonio Gomes.

        Catch the new ewk_frame signals to print the expected output in case
        of redirections, when LayoutTestController's dumpFrameLoadCallbacks()
        returns true.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::onWillSendRequest):
        (DumpRenderTreeChrome::onFrameCreated):
        (DumpRenderTreeChrome::onFrameRedirectForProvisionalLoad):
        (DumpRenderTreeChrome::onFrameRedirectRequested):
        (DumpRenderTreeChrome::onResponseReceived):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):

2012-05-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix up warning about missing GLib/Gio/GStreamer

        We don't actually fall back.

        Rubber-stamped by Csaba Osztrogonác.

        * qmake/mkspecs/features/features.prf:

2012-05-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Clarify warning about missing GLib/Gio/GStreamer for media support

        And only print it once.

        Reviewed by Csaba Osztrogonác.

        * qmake/mkspecs/features/features.prf:

2012-05-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Clean up and split features.prf into a static list of defaults

        The static list of feature defaults is used as a fallback for any
        feature that's not dynamically detected or overriden on the command
        line (though build-webkit or passing DEFINES+= to qmake).

        The static list is complete, which allows for auto-generation based
        on Features.py (see bug https://bugs.webkit.org/show_bug.cgi?id=85456)

        https://bugs.webkit.org/show_bug.cgi?id=85611

        Reviewed by Simon Hausmann.

        * Scripts/build-webkit:
        * Tools.pro:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/features.pri: Added.

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

        Unreviewed, rolling out r116085, r116091, and r116095.
        http://trac.webkit.org/changeset/116085
        http://trac.webkit.org/changeset/116091
        http://trac.webkit.org/changeset/116095
        https://bugs.webkit.org/show_bug.cgi?id=85628

        We are not ready with dependencies on all platform yet (mac) +
        problems with debug builds. (Requested by Zoltan on #webkit).

        * qmake/mkspecs/features/features.prf:

2012-05-04  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] LayoutTestController does not support overriding WebKitLoadSiteIconsKey
        https://bugs.webkit.org/show_bug.cgi?id=85171

        Reviewed by Andreas Kling.

        Implement support for overriding "WebKitLoadSiteIconsKey" setting in
        EFL's LayoutTestController.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::overridePreference):

2012-05-03  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Enable fullscreen API for WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=85498

        Reviewed by Simon Hausmann.

        Enable the fullscreen API on the MiniBrowser and turn
        it default on WebKit2, disable it on WK1.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.prf:

2012-05-04  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        REGRESSION(r116008) old-run-webkit-tests broken
        https://bugs.webkit.org/show_bug.cgi?id=85597

        Reviewed by Simon Hausmann.

        Reinstate libraryContainsSymbol.

        * Scripts/webkitperl/features.pm:
        (libraryContainsSymbol):

2012-05-04  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Set WebCore imagedecoders as default and add fallback to QImageDecoder
        https://bugs.webkit.org/show_bug.cgi?id=80400

        Remove WTF_USE_QT_IMAGE_DECODER macro.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/features.prf:

2012-05-03  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] DRT should obey layoutTestController's addURLToRedirect()
        https://bugs.webkit.org/show_bug.cgi?id=82722

        Reviewed by Maciej Stachowiak.

        Implement support for layoutTestController's addURLToRedirect()
        in EFL's DRT so that it redirects properly when indicated.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onWillSendRequest):

2012-05-03  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] DRT should support LayoutTestController's willSendRequestReturnsNullOnRedirect()
        https://bugs.webkit.org/show_bug.cgi?id=82704

        Reviewed by Antonio Gomes.

        EFL's DRT needs to obey LayoutTestController's
        willSendRequestReturnsNullOnRedirect().

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onWillSendRequest):

2012-05-03  Raphael Kubo da Costa  <rakuco@webkit.org>

        git-add-reviewer: Do not put the bug title and its URL in the same line in the commit message.
        https://bugs.webkit.org/show_bug.cgi?id=85570

        Reviewed by Adam Roben.

        The standard format of commit messages and ChangeLog entries has a
        short summary in the first line, followed by the bug URL in
        Bugzilla. Passing "%s" in the pretty format line to git-rev-list
        merges these two lines into a single one separated by a space
        character, which is not what we want.

        Since "%s%n%n%b" is in practice "%B" (raw message), use it
        instead, as the first two lines do not end up being merged
        together.

        * Scripts/git-add-reviewer:
        (writeCommitMessageToFile):

2012-05-03  Ojan Vafai  <ojan@chromium.org>

        Improve UI for garden-o-matic examine view when there are fewer than 5 tests.
        https://bugs.webkit.org/show_bug.cgi?id=85566

        Reviewed by Adam Barth.

        * 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:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:

2012-05-03  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Recognize FreeBSD as a valid platform.
        https://bugs.webkit.org/show_bug.cgi?id=81467

        Reviewed by Adam Barth.

        Add PlatformInfo.is_freebsd() so that trying to use webkit-patch
        on FreeBSD does not raise an "unrecognized platform" exception.

        Most of this patch contains some unit tests for the mentioned
        method, as currently platform-specific code is needed only on
        Windows.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__):
        (PlatformInfo.is_freebsd):
        (PlatformInfo._determine_os_name):
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.is_freebsd):
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (fake_platform):
        (fake_platform.FakePlatformModule.release):
        (TestPlatformInfo.test_real_code):
        (TestPlatformInfo.test_os_name_and_wrappers):
        (TestPlatformInfo.test_os_version):
        (TestPlatformInfo.test_display_name):
        (TestPlatformInfo.test_total_bytes_memory):
        (TestPlatformInfo.test_free_bytes_memory):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory._default_port):

2012-05-03  Ojan Vafai  <ojan@chromium.org>

        Make the table headers white-space:nowrap. This decreases the vertical size,
        which makes for more minimal embedding in garden-o-matic.

        * TestResultServer/static-dashboards/flakiness_dashboard_tests.css:
        (.table-header-content *):

2012-05-03  Eric Seidel  <eric@webkit.org>

        Split build-webkit's feature option list off into its own module in preparation for autogeneration
        https://bugs.webkit.org/show_bug.cgi?id=85548

        Reviewed by Daniel Bates.

        My Perl-fu is very weak.  This moves the feature option list off into a separate module
        file so that I can easily autogenerate just that file with the fancy new generate-feature-files command.
        It's a bit odd to have an array which we return out to build-webkit to modify, but it turns out
        not to matter.  Also, build-webkit doesn't actually use any of the variables we're using to
        store the results from the option parse, so those end up inaccessible from build-webkit (except by reference)
        which is actually cleaner.  Callers can't assume that they would get a new array every time, but someone
        with more Perl-fu than I could create something fancier than this if we need in the future.

        * Scripts/build-webkit:
        * Scripts/webkitperl/FeatureList.pm: Added.
        (getFeatureOptionList):

2012-05-03  Dirk Pranke  <dpranke@chromium.org>

        REGRESSION: run-webkit-tests failing on Chromium Mac
        https://bugs.webkit.org/show_bug.cgi?id=85459

        Unreviewed, build fix.

        Turns out select doesn't throw IOErrors, it has it's own kind of
        error :(. Trap that instead.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess._wait_for_data_and_update_buffers_using_select):

2012-05-03  Raphael Kubo da Costa  <rakuco@webkit.org>

        [CMake] Rewrite FindCairo.cmake.
        https://bugs.webkit.org/show_bug.cgi?id=84895

        Reviewed by Daniel Bates.

        The old approach relied on pkg-config for finding Cairo (which
        introduced a dependency on pkg-config that could be avoided), used
        the LibFindMacros code that we should probably remove in the
        future and did not use the FindPackageHandleStandardArguments
        module.

        Change all that by rewriting the module.
        - Use the pkg-config output optionally instead of requiring it
        like LibFindMacros did.
        - Remove the implicit dependency on FreeType which often found it
        the wrong way via pkg-config and without considering
        CMAKE_PREFIX_PATH.
        - Retrieve the Cairo version by looking at cairo-version.h instead
        of relying on pkg-config. It requires some additional code for
        checking if the desired version has been found, but that will not
        be needed once we start depending on CMake 2.8.3 or later.

        The only downside is that FPHSA sets <UPPERCASED_NAME>_FOUND
        instead of <Name>_FOUND, and to keep things consistent
        Cairo_LIBRARIES and Cairo_INCLUDE_DIRS have become CAIRO_LIBRARIES
        and CAIRO_INCLUDE_DIRS.

        * DumpRenderTree/efl/CMakeLists.txt: Use CAIRO_FOO instead of
        Cairo_FOO.
        * EWebLauncher/CMakeLists.txt: Ditto.

2012-05-03  Ojan Vafai  <ojan@chromium.org>

        Fix modifier and bug sorting on the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=85554

        Reviewed by Dirk Pranke.

        The sorting assumes that the column header name matches a field
        in the testResults object and uses that field for sorting.
        Filter the bugs out of the modifiers list and put them in a bugs field
        and only put the non-bug modifiers in the modifiers list.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (populateExpectationsData):
        (htmlForSingleTestRow):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:

2012-05-03  Ojan Vafai  <ojan@chromium.org>

        Fix some state resetting when running unittests. HtmlForSingleTestRow
        was flaky.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (htmlForSingleTestRow):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (resetGlobals):

2012-05-03  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Use PlatformInfo wherever possible in the User class.
        https://bugs.webkit.org/show_bug.cgi?id=85549

        Reviewed by Dirk Pranke.

        Instead of relying on sys.platform to detect whether the current
        platform is a Mac, use the PlatformInfo class instead.

        * Scripts/webkitpy/common/system/user.py:
        (User.__init__):
        (User.edit_changelog):

2012-05-03  Ojan Vafai  <ojan@chromium.org>

        Remove the percent failed column from the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=85552

        Reviewed by Dirk Pranke.

        This column isn't useful enough to justify the visual noise.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (processMissingAndExtraExpectations):
        (tableHeaders):
        (htmlForSingleTestRow):
        (sortTests):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (test):

2012-05-03  Eric Seidel  <eric@webkit.org>

        --coverage should not not use the "feature" options system in build-webkit, similarly remove special-casing for WTF_URL
        https://bugs.webkit.org/show_bug.cgi?id=85542

        Reviewed by Daniel Bates.

        Remove these last two odd-men-out, so that we can generate the default feature options
        for build-webkit using the new generate-feature-files command.
        The Mac build system has some special casing for ENABLE_ defines which gets them
        defined as -D on the build command, even though initially they start out as
        environment variables ENABLE_FOO = ENABLE_FOO.  The Feature options in build-webkit
        depend on this support, but it doesn't work for WTF_USE_ defines like WTF_USE_WTF_URL.
        I'm told that WTF_URL is not actively being worked on, so just removing it for now.
        It should probably come back to life as an ENABLE_, or build-webkit or the Xcode projects
        should be made generically smarter about these USE_WTF defines.
        (There is still WTF_USE_TILED_BACKING_STORE in the feature list, but it only seems
        used by Qt.  If someone tried build-webkit --tiled-backing-store on Mac today it
        would not work!)

        * Scripts/build-webkit:

2012-05-03  Eric Seidel  <eric@webkit.org>

        Remove the last bits of Leopard support from our perl scripts
        https://bugs.webkit.org/show_bug.cgi?id=85545

        Reviewed by Daniel Bates.

        Chromium still supports Leopard (for a little while yet), but AppleMacWebKit dropped
        Leopard support several months ago.  Remove the last bits of isLeopard() branching
        in our Perl scripts, since no one is using this (Chromium has never used this Perl code).

        * Scripts/build-webkit:
        * Scripts/old-run-webkit-tests:
        (countAndPrintLeaks):
        (captureSavedCrashLog):
        * Scripts/webkitdirs.pm:
        (determineArchitecture):
        (argumentsForRunAndDebugMacWebKitApp):

2012-05-03  Ojan Vafai  <ojan@chromium.org>

        [Chromium] Don't show the WebKit Linux ASAN bot on the flakiness dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=85551

        Reviewed by Dirk Pranke.

        It's not uploading results and in the short term we don't plan to have it start.

        * TestResultServer/static-dashboards/builders.js:
        (isChromiumWebkitTipOfTreeTestRunner):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:

2012-05-03  Ojan Vafai  <ojan@chromium.org>

        Show the test name in the dashboard if showChrome==false and we're showing multiple tests
        https://bugs.webkit.org/show_bug.cgi?id=85243

        Reviewed by Dirk Pranke.

        This happens for cases where a test name matches multiple tests.
        In practice, this only happens for virtual test suites (e.g. the canvas tests).

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (htmlForIndividualTestOnAllBuildersWithChrome):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (testHtmlForIndividualTestOnAllBuildersWithChromeNonexistant):
        (testHtmlForIndividualTestOnAllBuildersWithChrome):
        (testHtmlForIndividualTestOnAllBuildersWithChromeWebkitMaster):
        (testHtmlForIndividualTests):

2012-05-03  Ojan Vafai  <ojan@chromium.org>

        Port the flakiness dashboard unittests to qunit
        https://bugs.webkit.org/show_bug.cgi?id=85544

        Reviewed by Adam Barth.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (appendJSONScriptElements):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (resetGlobals):
        (runExpectationsTest):
        (test):
        * TestResultServer/static-dashboards/run-unittests.html: Added.

2012-05-03  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Remove check for readline on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=85547

        Reviewed by Eric Seidel.

        Python 2.5 is not supported by the WebKit project anymore, and
        Python's readline documentation does not mention the module not
        being available in the supported versions.

        * Scripts/webkitpy/common/system/user.py:

2012-05-03  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [NRWT] Run performance tests with lock
        https://bugs.webkit.org/show_bug.cgi?id=78628

        Reviewed by Tony Chang.

        Locking performance tests (like we do for http tests) will force them
        to run in serial. This reduces the load of the machine when running perf
        tests and minimizes the chances of the tests to fail, specially
        timeouts.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__):
        (Manager._is_perf_test):
        (Manager._test_requires_lock):
        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2012-05-03  Dirk Pranke  <dpranke@chromium.org>

        Attempt to fix a crash on SL ...

        Unreviewed, build fix.

        It looks like we may be getting an IOError raised during
        select() on chromium mac, and that error isn't being caught.
        Pushing it into the try/catch block will hopefully catch this
        and allow us to see why the subprocess is crashing.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess._wait_for_data_and_update_buffers_using_select):

2012-05-02  Jon Honeycutt  <jhoneycutt@apple.com>

        WebFrameLoaderClient::dispatchWillSendSubmitEvent() needs to be
        implemented for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=84304

        Reviewed by Jessie Berlin.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Added new files to project.

        * TestWebKitAPI/Tests/WebKit2/WillSendSubmitEvent.cpp: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        Look for the "DidReceiveWillSendSubmitEvent" message. The message body
        will be the dictionary of form control names and values passed to the
        injected bundle's willSendSubmitEvent handler; look for the pairs
        "textField" -> "text field" and "passwordField" -> "password field".
        Check that "hiddenField" is not included.
        (TestWebKitAPI::setInjectedBundleClient):
        (TestWebKitAPI::TEST):

        * TestWebKitAPI/Tests/WebKit2/WillSendSubmitEvent_Bundle.cpp: Added.
        (TestWebKitAPI::willSendSubmitEvent):
        Post a message to the TestWebKitAPI process with the dictionary of form
        control names and values that we received.
        (TestWebKitAPI::WillSendSubmitEventTest::WillSendSubmitEventTest):
        (TestWebKitAPI::WillSendSubmitEventTest::didCreatePage):
        Set up the page's form client.

        * TestWebKitAPI/Tests/WebKit2/auto-submitting-form.html: Added.

2012-05-03  Eric Seidel  <eric@webkit.org>

        Remove dead code from build-webkit for working around old XCode dependency bug
        https://bugs.webkit.org/show_bug.cgi?id=85535

        Reviewed by Adam Barth.

        Xcode used to have a bug whereby it didn't notice if you changed the #defines
        passed on the command line to xcodebuild.  I wrote code to work around this
        while bringing up SVG support 5-6 years ago.  I think we can finally remove this
        code from build-webkit, since SVG is the only feature flag to ever use it
        (modern in-progress features like MathML don't seem to be using the support)
        an I suspect the XCode bug has long been fixed.

        * Scripts/build-webkit:
        * Scripts/webkitperl/features.pm:

2012-05-03  Andy Estes  <aestes@apple.com>

        InjectedBundleControllerMac.mm needs to include config.h
        https://bugs.webkit.org/show_bug.cgi?id=85531

        Reviewed by Andreas Kling.

        * TestWebKitAPI/mac/InjectedBundleControllerMac.mm:

2012-05-03  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Use PlatformInfo whenever possible in server_process.py.
        https://bugs.webkit.org/show_bug.cgi?id=85516

        Reviewed by Eric Seidel.

        Eliminate direct access to sys.platform wherever possible by using
        PlatformInfo.is_win() instead.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess.__init__): Remove the executive parameter as it was
        not passed by any caller, obtain a SystemHost from port_obj
        instead.
        (ServerProcess._log): Style, remove extra empty line.
        (ServerProcess._start):
        (ServerProcess.stop):
        (ServerProcess.kill):
        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
        (TrivialMockPort.__init__): Create a MockSystemHost used by
        ServerProcess.
        (TestServerProcess.test_broken_pipe): Test different platforms.

2012-05-03  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        webkitpy: Style checker broken when committing a PNG
        https://bugs.webkit.org/show_bug.cgi?id=85504

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/style/checkers/png.py:
        (PNGChecker.__init__):

2012-05-03  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, fix another call to join(), similar to the ones landed
        in r115975.

        * Scripts/webkitdirs.pm:
        (jhbuildConfigurationChanged):

2012-05-03  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Remove sys.platform accesses in CrashLogs.
        https://bugs.webkit.org/show_bug.cgi?id=85436

        Reviewed by Dirk Pranke.

        Instead of directly checking for sys.platform == 'darwin', use a
        SystemHost and call PlatformInfo.is_mac().

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs.__init__):
        (CrashLogs.find_newest_log):
        (CrashLogs._log_directory_darwin):
        (CrashLogs._find_newest_log_darwin):
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (CrashLogsTest.test_find_log_darwin):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestDriver.run_test):
        * Scripts/webkitpy/tool/commands/queries.py:
        (execute):

2012-05-03  Philippe Normand  <pnormand@igalia.com>

        [GTK] join() is wrongly used in webkitdirs.pm since r115532
        https://bugs.webkit.org/show_bug.cgi?id=85501

        Reviewed by Martin Robinson.

        * Scripts/webkitdirs.pm:
        (getJhbuildPath):
        (buildAutotoolsProject):

2012-05-03  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] ImageDiff crashes when it can't open a display
        https://bugs.webkit.org/show_bug.cgi?id=85476

        Reviewed by Martin Robinson.

        Replace gdk_init() initialization call with the g_type_init()
        call. GdkPixbufLoader doesn't actually need the current call to be
        made and this change will also remove crashes when ImageDiff
        is started in an environment without a DISPLAY env.

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

2012-05-03  Zan Dobersek  <zandobersek@gmail.com>

        ImageDiff should be run inside a properly established environment
        https://bugs.webkit.org/show_bug.cgi?id=85292

        Reviewed by Martin Robinson.

        When creating the ImageDiff server process, pass along a freshly-set-up environment
        in which the process should be executed in.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._start_image_diff_process):

2012-05-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Allow the web process and WTR to be paused on startup

        Makes it easier to debug the web process or run-webkit-tests -2, as you
        have ample time to attach gdb to the process.

        Reviewed by Simon Hausmann.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.setup_environ_for_server):
        * WebKitTestRunner/qt/main.cpp:
        (main):

2012-05-03  Csaba Osztrogonác  <ossy@webkit.org>

        Password protect "Stop build" button
        https://bugs.webkit.org/show_bug.cgi?id=81982

        Reviewed by Ryosuke Niwa.

        Only authenticated users should be able to use stopBuild, stopAllBuilds, cancelPendingBuild
        features to prevent killing builds on build.webkit.org by SPAM bots.

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

2012-05-03  Dongwoo Im  <dw.im@samsung.com>

        [DRT] Remove the name of parameter, visibility, from the setPageVisibility stub implementations.
        https://bugs.webkit.org/show_bug.cgi?id=85468

        Reviewed by Nikolas Zimmermann.

        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        (LayoutTestController::setPageVisibility): Remove the name of parameter, visibility.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setPageVisibility): Remove the name of parameter, visibility.
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setPageVisibility): Remove the name of parameter, visibility.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setPageVisibility): Remove the name of parameter, visibility.
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setPageVisibility): Remove the name of parameter, visibility.

2012-05-03  Stephanie Lewis  <slewis@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=85450 unbounded growth of JSDOMWindowShells loading pages in the same window
        <rdar://problem/11320059> REGRESSION (r115083): PLT3 shows linear memory growth and gets slower with each run

        Reviewed by Brady Eidson.

        The API added for DOMWindowExtension, didCreateGlobalObjectForFrame, would create a global object
        for every world, even those that did not need the callback.  This had the side effect of creating a
        JSDOMWindowShell that the associated world didn't necessarily know to clean up.  Instead of creating
        unnecessary objects change the API to globalObjectIsAvailableForFrame and do not pass the global object
        in the API.  The object can be accessed later by those worlds which require it.

        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic.cpp:
        (TestWebKitAPI):
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic_Bundle.cpp:
        (TestWebKitAPI):
        (DOMWindowExtensionBasic):
        (TestWebKitAPI::DOMWindowExtensionBasic::didCreatePage):
        (TestWebKitAPI::DOMWindowExtensionBasic::globalObjectIsAvailableForFrame):
        (TestWebKitAPI::globalObjectIsAvailableForFrameCallback):

2012-05-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Fix mac build, it was missing setPageVisibility/resetPageVisibility stub implementations.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::resetPageVisibility):
        (LayoutTestController::setPageVisibility):

2012-05-02  Alexander Færøy  <ahf@0x90.dk>

        Rename deviceDPI to devicePixelRatio
        https://bugs.webkit.org/show_bug.cgi?id=85049

        Reviewed by Kenneth Rohde Christiansen.

        Use 1.5 as device pixel ratio for the Qt MiniBrowser.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-05-03  Dongwoo Im  <dw.im@samsung.com>

        [EFL][DRT] Implement the LayoutTestController's methods related to the Page Visibility API.
        https://bugs.webkit.org/show_bug.cgi?id=85347

        Reviewed by Nikolas Zimmermann.

        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        (LayoutTestController::resetPageVisibility): Not implemented.
        (LayoutTestController::setPageVisibility): Not implemented.
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::resetPageVisibility): Reset the page visibility.
        (LayoutTestController::setPageVisibility): Set the page visibility.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::resetPageVisibility): Not implemented.
        (LayoutTestController::setPageVisibility): Not implemented.
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::resetPageVisibility): Not implemented.
        (LayoutTestController::setPageVisibility): Not implemented.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::resetPageVisibility): Not implemented.
        (LayoutTestController::setPageVisibility): Not implemented.
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::resetPageVisibility): Not implemented.
        (LayoutTestController::setPageVisibility): Not implemented.

2012-05-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r115918.
        http://trac.webkit.org/changeset/115918
        https://bugs.webkit.org/show_bug.cgi?id=85452

        "Broke test-webkitpy on Apple Lion bots" (Requested by estes
        on #webkit).

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs.__init__):
        (CrashLogs.find_newest_log):
        (CrashLogs._log_directory_darwin):
        (CrashLogs._find_newest_log_darwin):
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (CrashLogsTest.test_find_log_darwin):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestDriver.run_test):
        * Scripts/webkitpy/tool/commands/queries.py:
        (execute):

2012-05-02  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Remove sys.platform accesses in CrashLogs.
        https://bugs.webkit.org/show_bug.cgi?id=85436

        Reviewed by Dirk Pranke.

        Instead of directly checking for sys.platform == 'darwin', use a
        SystemHost and call PlatformInfo.is_mac().

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs.__init__):
        (CrashLogs.find_newest_log):
        (CrashLogs._log_directory_darwin):
        (CrashLogs._find_newest_log_darwin):
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (CrashLogsTest.test_find_log_darwin):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestDriver.run_test):
        * Scripts/webkitpy/tool/commands/queries.py:
        (execute):

2012-05-02  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Special-case win32 calls in file_lock and executive.
        https://bugs.webkit.org/show_bug.cgi?id=85431

        Reviewed by Dirk Pranke.

        Simplify accesses to sys.platform by only checking if sys.platform
        is "win32" and removing explicit checks for the else case.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.check_running_pid):
        * Scripts/webkitpy/common/system/file_lock.py:
        (FileLock._create_lock):
        (FileLock._remove_lock):

2012-05-02  Ojan Vafai  <ojan@chromium.org>

        Remove pink from flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=85422

        Reviewed by Dirk Pranke.

        The pink indicates that the test doesn't match it's listing in test_expectations.txt.
        In practice, this just added noise and confused people.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (htmlForSingleTestRow):
        (showLegend):
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.css:
        (#legend-contents *):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (testHtmlForSingleTestRow):

2012-05-02  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed. Fix mistake I committed when applying review comments.

        * jhbuild/jhbuild-wrapper: dependencies_path was getting 'Root'
        appended to its path, so jhbuild itself was being cloned and
        installed in the wrong place when using WEBKITOUTPUTDIR.

2012-05-02  Dirk Pranke  <dpranke@chromium.org>

        nrwt: make ServerProcess work on chromium win
        https://bugs.webkit.org/show_bug.cgi?id=85333

        Reviewed by Ojan Vafai.

        This change implements a poor man's select() that will
        slow-spin doing non-blocking reads on the stdout and stderr
        named pipes connecting the worker to the driver. Seems to work
        and I have yet to see much overhead or ill effects but it
        probably needs more testing.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.__init__):
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess._start):
        (ServerProcess._wait_for_data_and_update_buffers_using_select):
        (ServerProcess._wait_for_data_and_update_buffers_using_win32_apis):
        (ServerProcess):
        (ServerProcess._non_blocking_read_win32):
        (ServerProcess._read):
        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
        (TestServerProcess.test_basic): Added.

2012-05-02  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Use a SystemHost instead of PlatformInfo in the PNG checker.
        https://bugs.webkit.org/show_bug.cgi?id=85426

        Reviewed by Dirk Pranke.

        r115880 replaced the direct use of sys.platform with a
        PlatformInfo object. Dirk Pranke later told me SystemHost objects
        should be preferred, as nothing out of webkitpy.common.system
        should create its own PlatformInfo instances.

        * Scripts/webkitpy/common/system/systemhost_mock.py:
        (MockSystemHost.__init__): Make it possible to specify a custom
        filesystem object.
        * Scripts/webkitpy/style/checkers/png.py:
        (PNGChecker.__init__): Accept a host object instead of a
        filesystem one, which is now obtained from host.
        (PNGChecker._config_file_path): Retrieve PlatformInfo from
        SystemHost.
        * Scripts/webkitpy/style/checkers/png_unittest.py:
        (PNGCheckerTest.test_init): Adjust calls to PNGChecker to its new
        constructor signature.
        (PNGCheckerTest.test_check): Ditto.

2012-05-02  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Remove direct checks for sys.platform == 'darwin' in the layout test classes.
        https://bugs.webkit.org/show_bug.cgi?id=85424

        Reviewed by Tony Chang.

        We should reduce direct usage of sys.platform in webkitpy and use
        PlatformInfo instead.

        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd._prepare_config): Call PlatformInfo.is_mac() instead of
        checking for 'darwin' directly.
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase.__init__): Ditto.

2012-05-02  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Remove direct sys.platform usage in run_webkit_tests_integrationtest.
        https://bugs.webkit.org/show_bug.cgi?id=85419

        Reviewed by Dirk Pranke.

        As pointed out by Dirk Pranke, a PlatformInfo is not supposed to
        be created directly, we should should a SystemHost instead.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.setUp): Create a SystemHost and obtain the PlatformInfo
        object from it instead of creating PlatformInfo directly.

2012-05-02  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Remove direct sys.platform usage in run_webkit_tests_integrationtest.
        https://bugs.webkit.org/show_bug.cgi?id=85419

        Rubber-stamped by Dirk Pranke.

        Follow-up patch to r115887 which fixes some capitalization problems
        pointed out in comments 2 and 4.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.setUp):
        (MainTest.test_child_processes_2):
        (MainTest.test_child_processes_min):
        (MainTest.test_exception_raised):
        (MainTest.test_keyboard_interrupt):

2012-05-02  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Remove direct sys.platform usage in run_webkit_tests_integrationtest.
        https://bugs.webkit.org/show_bug.cgi?id=85419

        Reviewed by Dirk Pranke.

        Another part of the work towards replacing direct sys.platform
        usage with PlatformInfo.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.setUp): Move the setting of SHOULD_TEST_PROCESSES
        here. Even though it is costlier, unittest.setUpClass was
        introduced in Python 2.7.
        (MainTest.test_child_processes_2): Use self.SHOULD_TEST_PROCESSES.
        (MainTest.test_child_processes_min): Ditto.
        (MainTest.test_exception_raised): Ditto.
        (MainTest.test_keyboard_interrupt): Ditto.
        (MainTest.test_crash_log): Check for PlatformInfo.is_mac().
        (MainTest.test_web_process_crash_log): Ditto, and remove duplicate
        check at the end.
        (MainTest.test_no_http_tests): Remove check for (cygwin && Python
        2.5.2), as we only support Python 2.6+.

2012-05-02  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Remove direct sys.platform usage in the PNG checker.
        https://bugs.webkit.org/show_bug.cgi?id=85407

        Reviewed by Tony Chang.

        Work towards replacing direct sys.platform usage with
        PlatformInfo.

        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.__init__): Accept os_name and os_version as
        arguments.
        * Scripts/webkitpy/style/checkers/png.py:
        (PNGChecker.__init__): Create a PlatformInfo object instead of
        using sys.platform when needed.
        (PNGChecker._config_file_path): Check for the current platform via
        PlatformInfo.
        * Scripts/webkitpy/style/checkers/png_unittest.py:
        (PNGCheckerTest.test_check): Update tests after the changes above.

2012-05-02  Raphael Kubo da Costa  <rakuco@webkit.org>

        [watchlist] Update watchlist rules for EFL-related patches.
        http://bugs.webkit.org/show_bug.cgi?id=85160

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/config/watchlist: Monitor
        Source/WTF/wtf/efl and LayoutTests/platform/efl as well.

2012-05-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Revert r115191 - "Make the web view's url property follow the active url"

        It uncovered/caused issues in the icon-implementation that can't be
        easily fixed, so rolling out instead.

        https://bugs.webkit.org/show_bug.cgi?id=77554

        Rubber-stamped by Simon Hausmann.

        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::TEST):

2012-05-02  Zan Dobersek  <zandobersek@gmail.com>

        Reftest mismatches are providing undefined diff percent in results.html
        https://bugs.webkit.org/show_bug.cgi?id=85283

        Reviewed by Ojan Vafai.

        When writing test results for a reftest mismatch, also take into account the
        difference percent that is produced when generating image diff. This value is
        then used when creating test results in the form of dictionaries, stored under
        the 'image_diff_percent' key. It ultimately ends up in JSON results data,
        providing additional information about the reftest difference.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (interpret_test_failures): Store the diff percent for reftest failure under the
        'image_diff_percent' key.
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result): Also set the new diff_percent attribute of the reftest
        mismatch failure to the value of the difference percent ImageDiff outputs.
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (FailureReftestMismatch.__init__): Add the new diff_percent attribute with the
        default value of None.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (EndToEndTest.test_reftest_with_two_notrefs): Update the test case expected results.

2012-05-02  Terry Anderson  <tdanderson@chromium.org>

        Addition of a contributor to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=85324

        Reviewed by Unreviewed.

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

2012-05-02  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL] EFL's LayoutTestController overridePreference implementation
        https://bugs.webkit.org/show_bug.cgi?id=83007

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (toBool): aux function converting JSStringRef to bool
        (toInt): aux function converting JSStringRef to int
        (LayoutTestController::overridePreference): added implementation

2012-05-01  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Fix sys.platform check in find_files_unittest.
        https://bugs.webkit.org/show_bug.cgi?id=85339

        Reviewed by Ryosuke Niwa.

        Follow-up to r101618 -- 'win' is not a valid sys.platform value,
        'win32' should be used instead. The check always returned false
        due to this, so assert_normalize() was never called.

        * Scripts/webkitpy/common/find_files_unittest.py:
        (TestWinNormalize.test_win): Add the missing import for the
        FileSystem class and fix the sys.platform check.

2012-05-02  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] drag&drop related failures
        https://bugs.webkit.org/show_bug.cgi?id=84675

        Reviewed by Philippe Normand.

        Rather than checking options to see whether we're running pixel tests
        the pixel_tests argument passed to GtkDriver._start should be used as
        it also covers cases when pixel tests should be run because of testing
        reftests. This again creates different Xvfb processes with proper
        display IDs for a worker that's performing both ordinary and pixel
        tests, as was the case before changes made in r114788.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkDriver._start):

2012-05-02  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Enable device orientation/motion with Qt 5

        Reviewed by Tor Arne Vestbø.

        Enable device orientation/motion features with Qt 5 if Qt Sensors is available.

        * qmake/mkspecs/features/features.prf:

2012-05-01  Raphael Kubo da Costa  <rakuco@webkit.org>

        webkitpy: Remove unused platform imports.
        https://bugs.webkit.org/show_bug.cgi?id=85341

        Reviewed by Eric Seidel.

        Remove a few uses of `import platform' which were either rendered
        unneeded after r105931 or were never needed at all.

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:

2012-05-01  Terry Anderson  <tdanderson@chromium.org>

        [chromium] Accept four parameters when dispatching a WebInputEvent::GestureTap in chromium DRT eventSender
        https://bugs.webkit.org/show_bug.cgi?id=85289

        Reviewed by Eric Seidel.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::gestureEvent):
            This change will allow for testing of WK85101. Currently
            no tests use the extra parameters deltaX and deltaY. Added
            a check for the size of |arguments|.

2012-05-01  Eric Seidel  <eric@webkit.org>

        Add myself to the watchlist to watch all rendering changes, as well as sort the watchers in the list
        https://bugs.webkit.org/show_bug.cgi?id=85305

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/watchlist:

2012-05-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r115735.
        http://trac.webkit.org/changeset/115735
        https://bugs.webkit.org/show_bug.cgi?id=85314

        cause two tests to crash due to an ASSERTION failure
        (Requested by zhenyao on #webkit).

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::gestureEvent):

2012-05-01  Terry Anderson  <tdanderson@chromium.org>

        [chromium] Accept four parameters when dispatching a WebInputEvent::GestureTap in chromium DRT eventSender
        https://bugs.webkit.org/show_bug.cgi?id=85289

        Reviewed by Eric Seidel.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::gestureEvent):
            This change will allow for testing of WK85101. Currently no tests use the extra
            parameters deltaX and deltaY.

2012-05-01  Zan Dobersek  <zandobersek@gmail.com>

        Print out stderr output of ImageDiff if it is present
        https://bugs.webkit.org/show_bug.cgi?id=85285

        Reviewed by Philippe Normand.

        Log the stderr output of ImageDiff as a warning if present. This is
        especially helpful when ImageDiff crashes and stderr data might contain
        relevant information about what caused the crash.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._read_image_diff):

2012-05-01  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Add an experimental extension to set the min. contents width
        https://bugs.webkit.org/show_bug.cgi?id=85281

        Reviewed by Antonio Gomes.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

        Set the value of preferredMinimumContentsWidth to 980.

2012-04-30  Ojan Vafai  <ojan@chromium.org>

        Fix tests to not depend on the actual list of builders at build.chromium.org.

        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (testHtmlForIndividualTestOnAllBuildersWithChrome):
        (testHtmlForIndividualTestOnAllBuildersWithChromeWebkitMaster):

2012-04-29  Sam Weinig  <sam@webkit.org>

        Remove BlobBuilder
        https://bugs.webkit.org/show_bug.cgi?id=84036

        Reviewed by Anders Carlsson.

        * Scripts/build-webkit:
        * qmake/mkspecs/features/features.prf:
        Make exposing the WebKitBlobBuilder JS object conditional on a new
        ENABLE_LEGACY_WEBKIT_BLOB_BUILDER flag. Don't enable this for the Mac,
        but do for everyone else.

2012-04-30  Amruth Raj Padmanabhuni  <amruthraj@motorola.com>

        [GTK] Add glib as a dependency to build glib-networking
        https://bugs.webkit.org/show_bug.cgi?id=85181

        Reviewed by Martin Robinson.

        * gtk/jhbuild.modules:

2012-04-30  Alexis Menard  <alexis.menard@openbossa.org>

        Move myself to reviewers.

        Reviewed by Andreas Kling.

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

2012-04-30  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Unreviewed, move myself to reviewers

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

2012-04-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * TestWebKitAPI/GNUmakefile.am: Add missing headers to compilation
        and resources to EXTRA_DIST.

2012-04-30  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [GTK] DRT support for layoutTestController.removeOriginAccessWhitelistEntry
        https://bugs.webkit.org/show_bug.cgi?id=85156

        Reviewed by Martin Robinson.

        Add missing implementation removeOriginAccessWhitelistEntry to
        GTK's LayoutTestController.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::removeOriginAccessWhitelistEntry):

2012-04-29  Maciej Stachowiak  <mjs@apple.com>

        REGRESSION: On Lion, run-webkit-tests changes the display color profile even when not running pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=81729

        Reviewed by Dan Bernstein.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._set_up_run): Only launch LayoutTestHelper when running pixel tests.

2012-04-29  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [GTK] DRT needs an implementation of layoutTestController.setDomainRelaxationForbiddenForURLScheme
        https://bugs.webkit.org/show_bug.cgi?id=85131

        Reviewed by Martin Robinson.

        Add missing implementation setDomainRelaxationForbiddenForURLScheme to
        GTK's LayoutTestController.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):

2012-04-28  Sam Weinig  <sam@webkit.org>

        Smooth scrolling needs a new key
        <rdar://problem/11331632>

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * TestWebKitAPI/mac/InjectedBundleControllerMac.mm:
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):
        Update for new key.

2012-04-28  Zan Dobersek  <zandobersek@gmail.com>

        [WK2] http/tests/navigation/anchor-frames-gbk.html fails
        https://bugs.webkit.org/show_bug.cgi?id=76896

        Reviewed by Darin Adler.

        Only dump as text if currently dumping render tree. This ensures that
        calling dumpAsText in a test with dumpChildFramesAsText already being
        called doesn't override the first decision, possibly making tests fail.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::dumpAsText):

2012-04-28  Dan Winship  <danw@gnome.org>

        Unreviewed; Add me to the SoupNetwork watchlist

        * Scripts/webkitpy/common/config/watchlist:

2012-04-27  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] jhbuild cloning is not following WEBKITOUTPUTDIR.
        https://bugs.webkit.org/show_bug.cgi?id=76161

        Reviewed by Martin Robinson.

        * Scripts/webkitdirs.pm:
        (getJhbuildPath): New method to obtain the jhbuild base directory,
        using the product base directory
        (jhbuildConfigurationChanged): Use the new method
        (buildAutotoolsProject): Ditto.
        * efl/jhbuildrc: Use WEBKITOUTPUTDIR when calculating the path.
        * gtk/jhbuildrc: Ditto.
        * jhbuild/jhbuild-wrapper: Ditto.

2012-04-27  Scott Graham  <scottmg@chromium.org>

        [chromium] make case of npTestNetscapePlugIn.dll match case in copy rule
        https://bugs.webkit.org/show_bug.cgi?id=85083

        Reviewed by Dirk Pranke.

        Make output product_name for npTestNetscapePlugIn.dll match the case
        of the copy_TestNetscapePlugIn rule. This is required for ninja, which
        is more particular about case matching in rules than the VS build.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-04-27  Dirk Pranke  <dpranke@chromium.org>

        [chromium] use "drt-style" output, not "test-shell-style" output, on mac and linux DRT
        https://bugs.webkit.org/show_bug.cgi?id=84917

        Unreviewed, build fix.

        Reland the change in r115453 with a fix for chromium win.
        The logic in ChromiumDriver was busted on windows, causing DRT
        to get launched without the --test-shell flag.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver):
        (ChromiumDriver.__init__):
        (ChromiumDriver._wrapper_options):
        (ChromiumDriver.cmd_line):
        (ChromiumDriver._start):
        (ChromiumDriver.has_crashed):
        (ChromiumDriver.run_test):
        (ChromiumDriver.stop):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.setUp):
        (ChromiumDriverTest.test_stop):
        (ChromiumDriverTest.test_two_drivers.MockDriver.__init__):
        (ChromiumDriverTest.test_two_drivers):

2012-04-27  Peter Beverloo  <peter@chromium.org>

        Add John Grabowski as a non-committer to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=85080

        Reviewed by Dirk Pranke.

        He's being CC'ed often enough because of his involvement in the Chromium
        side of Chrome for Android upstreaming.

        * Scripts/webkitpy/common/config/committers.py:
          add jrg@chromium.org

2012-04-27  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Fix minimal build.
        https://bugs.webkit.org/show_bug.cgi?id=85045

        Reviewed by Tor Arne Vestbø.

        Do not set conflicting values of ENABLE_XSLT.

        * qmake/mkspecs/features/features.prf:

2012-04-27  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        [EFL][DRT] EFL should sanitize pulseaudio module configuration too
        https://bugs.webkit.org/show_bug.cgi?id=85047

        Reviewed by Dirk Pranke.

        PulseAudio test setup sanitization shared between EFL and GTK.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort):
        (EflPort.setup_test_run):
        (EflPort.clean_up_test_run):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort): Moving pulseaudio unload/restore out to shared class.
        * Scripts/webkitpy/layout_tests/port/pulseaudio_sanitizer.py: Added.
        (PulseAudioSanitizer):
        (PulseAudioSanitizer._unload_pulseaudio_module):
        (PulseAudioSanitizer._restore_pulseaudio_module):

2012-04-27  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, revert r115453 - broke chromium win bots

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort._path_to_image_diff):
        (ChromiumDriver):
        (ChromiumDriver.__init__):
        (ChromiumDriver._wrapper_options):
        (ChromiumDriver.cmd_line):
        (ChromiumDriver.stop):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.setUp):
        (ChromiumDriverTest.test_stop):
        (ChromiumDriverTest.test_two_drivers):
        (ChromiumDriverTest.test_two_drivers.MockDriver.__init__):

2012-04-27  Ryosuke Niwa  <rniwa@webkit.org>

        Chromium Windows Perf bots timeout due to not output
        https://bugs.webkit.org/show_bug.cgi?id=84940

        Reviewed by Dirk Pranke.

        Dirk and I investigated the issue on the bot but we couldn't figure out what is going wrong.
        Since we run-perf-tests don't need any of fancy feature printer provides, just use python's
        built-in logging module instead. Printing out to stdout and stderr seem to work so hopefully
        this will fix the issue on the bot.

        * Scripts/run-perf-tests:
        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest.run):
        (PerfTest.run_failed):
        (PerfTest.parse_output):
        (PerfTest.output_statistics):
        (ChromiumStylePerfTest.parse_output):
        (PageLoadingPerfTest.run):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (MainTest.test_parse_output):
        (MainTest.test_parse_output_with_failing_line):
        (TestPageLoadingPerfTest):
        (TestPageLoadingPerfTest.test_run):
        (TestPageLoadingPerfTest.test_run_with_bad_output):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__):
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner.run):
        (PerfTestsRunner._upload_json):
        (PerfTestsRunner._print_status):
        (PerfTestsRunner._run_tests_set):
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (create_runner):
        (test_run_test_set):
        (test_run_test_set_kills_drt_per_run):
        (test_run_test_pause_before_testing):
        (test_run_test_set_for_parser_tests):
        (test_run_test_set_with_json_output):
        (test_run_test_set_with_json_source):
        (test_run_test_set_with_multiple_repositories):
        (test_upload_json):
        (test_parse_args):

2012-04-27  Dirk Pranke  <dpranke@chromium.org>

        [chromium] use "drt-style" output, not "test-shell-style" output, on mac and linux DRT
        https://bugs.webkit.org/show_bug.cgi?id=84917

        Reviewed by Ojan Vafai.

        This change changes the chromium new-run-webkit-tests
        implementation to use the code in WebKitDriver and ServerProcess
        by default on Mac and Linux, instead of using the old-style
        Chromium/test_shell style of output.

        We will still use the test_shell style on Windows for now
        and you can still get the old style of behavior with
        new-run-webkit-tests --additional-drt-flag --test-shell

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver):
        (ChromiumDriver.__init__):
        (ChromiumDriver._wrapper_options):
        (ChromiumDriver.cmd_line):
        (ChromiumDriver._start):
        (ChromiumDriver.has_crashed):
        (ChromiumDriver.run_test):
        (ChromiumDriver.stop):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.setUp):
        (ChromiumDriverTest.test_stop):
        (ChromiumDriverTest.test_two_drivers.MockDriver.__init__):
        (ChromiumDriverTest.test_two_drivers):

2012-04-27  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: fix race in unit tests for manager_worker_broker
        https://bugs.webkit.org/show_bug.cgi?id=84925

        Reviewed by Ojan Vafai.

        I have been intermittently seeing hangs when running
        test-webkitpy on Mac SL; it appears that there's a bug (?) in
        the multiprocessing module where queue references are getting
        leaked or not cleaned up somehow. By explicitly closing the
        queues, things seem to be happy, so this patch adds a cleanup()
        method to the message broker and modifies the manager (and the
        unit tests) to call it. This may get rid of the intermittent
        error on shutdown on Linux I've seen as well.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (_Broker.__del__):
        (_Broker):
        (_Broker.cleanup):
        (_BrokerConnection.cleanup):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (_TestsMixin.test_name):
        (_TestsMixin.test_cancel):
        (_TestsMixin.test_done):
        (_TestsMixin.test_unknown_message):

2012-04-27  Gavin Peters  <gavinp@chromium.org>

        Add new ENABLE_LINK_PRERENDER define to control the Prerendering API
        https://bugs.webkit.org/show_bug.cgi?id=84871

        Reviewed by Adam Barth.

        Prerendering is currently covered by the ENABLE_LINK_PREFETCH macro, but the new Prerendering
        API separates it from prefetching.  Having separate include guards lets ports enable prefetching,
        a relatively easy change, without needing to build the infrastructure for prerendering, which
        is considerably more complicated.

2012-04-27  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK gardening.

        * Scripts/run-gtk-tests:
        (TestRunner): Skip flaky WebKit2 API test.

2012-04-27  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK gardening.

        * Scripts/run-gtk-tests:
        (TestRunner): Fix another typo. So easy to get confused by a Test
        name and the actual name of the executable...

2012-04-27  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK gardening.

        * Scripts/run-gtk-tests:
        (TestRunner): Skip failing WebKit2 API test.

2012-04-27  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] DRT should support LayoutTestController's dumpResourceLoadCallbacks()
        https://bugs.webkit.org/show_bug.cgi?id=81891

        Reviewed by Philippe Normand.

        Implement support for LayoutTestController's
        dumpResourceLoadCallbacks() in EFL's DumpRenderTree by catching new
        ewk_view signals about resource loading and print out the expected
        information. This allows for several test cases to be removed from the
        skip list.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (descriptionSuitableForTestResult):
        (DumpRenderTreeChrome::onResponseReceived):
        (DumpRenderTreeChrome::onResourceLoadFinished):
        (DumpRenderTreeChrome::onResourceLoadFailed):
        (DumpRenderTreeChrome::onNewResourceRequest):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):

2012-04-27  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK typo fix.

        * Scripts/run-gtk-tests:
        (TestRunner): Fix-up skipped WebKit2 API test name TestWKConnection.

2012-04-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Add a way to register custom uri schemes in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=84130

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration): Add webkit_soup prefix to
        the list of exceptions to the underscores in identifiers rule.

2012-04-26  Ryosuke Niwa  <rniwa@webkit.org>

        Extract PerfTestFactory
        https://bugs.webkit.org/show_bug.cgi?id=83944

        Reviewed by Dirk Pranke.
        
        Extracted PerfTestFactory out of PerfTest. This class creates appropriate PerfTest object given
        a test name and a path. Also removed dirname from the constructors of PerfTest and its subclasses.

        Also added simple test cases to sanity check PerfTestFactory.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest.__init__):
        (PerfTest.test_name):
        (ChromiumStylePerfTest.__init__):
        (PageLoadingPerfTest.__init__):
        (PageLoadingPerfTest.run):
        (PerfTestFactory):
        (PerfTestFactory.create_perf_test):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (MainTest.test_parse_output):
        (MainTest.test_parse_output_with_failing_line):
        (TestPageLoadingPerfTest.test_run):
        (TestPageLoadingPerfTest.test_run_with_bad_output):
        (TestPerfTestFactory):
        (TestPerfTestFactory.test_regular_test):
        (TestPerfTestFactory.test_inspector_test):
        (TestPerfTestFactory.test_page_loading_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner._collect_tests):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (run_test):
        (_tests_for_runner):

2012-04-26  Dirk Pranke  <dpranke@chromium.org>

        nrwt: clean up server process, webkit driver so chromium can use it
        https://bugs.webkit.org/show_bug.cgi?id=84910

        Reviewed by Ojan Vafai.

        This change moves the "sample a process" logic out of
        server_process.py and into a port-specific class (where really
        only the mac has an implementation), and also preemptively kills
        DRT when a test times out in WebKitDriver (rather than waiting through the
        additional delays caused by calling stop() when we would want to
        restart the driver generically in worker.py).

        These changes will make it possible for the chromium port to
        switch over to the stock WebKitDriver implementation, at least
        on mac and linux.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.sample_process):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.sample_process):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_helper_fails_to_stop):
        (test_sample_process):
        (test_sample_process.logging_run_command):
        (test_sample_process_throws_exception):
        (test_sample_process_throws_exception.throwing_run_command):
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess._log):
        (ServerProcess._handle_timeout):
        (ServerProcess.stop):
        (ServerProcess):
        (ServerProcess.kill): Here we add a method to immediately stop
        the process rather than trying to shut it down cleanly.
        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
        (TestServerProcess.test_broken_pipe):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.run_test): Fix an issue where we weren't passing
        along any per-test args (only needed for Chromium, but still).
        Also, kill the driver immediately if we time out a test.

2012-04-26  Benjamin Poulain  <bpoulain@apple.com>

        ObjcClass::methodsNamed() can leak if buffer is dynamically allocated
        https://bugs.webkit.org/show_bug.cgi?id=84668

        Reviewed by Alexey Proskuryakov.

        Extend ObjCPlugin to support the new layout tests of the Objective-C bridge.

        * DumpRenderTree/mac/ObjCPlugin.m:
        (+[ObjCPlugin isSelectorExcludedFromWebScript:]):
        (+[ObjCPlugin webScriptNameForSelector:]):
        (-[ObjCPlugin methodMappedToLongName]):
        (-[ObjCPlugin testConversionColon:]):
        (-[ObjCPlugin _:]):

2012-04-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r115340.
        http://trac.webkit.org/changeset/115340
        https://bugs.webkit.org/show_bug.cgi?id=83048

        Does not work with Windows.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._run_reftest):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (copy_file):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._parse_reftest_list):
        (Port.reference_files):
        (Port._real_tests):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_reference_files):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.test_write_command_and_read_line):

2012-04-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Enable VIDEO_TRACK feature
        https://bugs.webkit.org/show_bug.cgi?id=84830

        Reviewed by Gustavo Noronha Silva.

        Enable VIDEO_TRACK by default on EFL port whenever build-webkit is
        used.

        * Scripts/build-webkit:

2012-04-08  Robert Hogan  <robert@webkit.org>

        new-webkit-run-tests: handle ref tests from the CSS test suite
        https://bugs.webkit.org/show_bug.cgi?id=83048

        Reviewed by Ryosuke Niwa.

        This allows new-run-webkit-tests to run reference tests created for the CSS test suite. It removes a big swathe
        of pixel and text results that are no longer required now that the reference results are used and adds in the support
        files from the CSS test suite that allow the ref tests to run.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._run_reftest): Assert that the reference result exists. Previously the test would
         run without it and report a pass!
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (copy_file): ensure the output directory exists, it may not if the reference test is
          contained in a folder that contains nothing but reference tests.
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.available_reference_files): Add as a helper. Handle embedded relative paths, e.g: some/../path
        (Port.reference_files): Only return reference results in the reftest list that actually exist on
          disk. Also, don't ignore potential reference results on disk that are not in the reftest list, and
          don't ignore them just because we have a reftest list for the test's directory.
        (Port._real_tests): ignore anything that looks like a test in a 'support' directory, this semantic
          is used by the CSS 2.1 test suite.
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_reference_files_when_reftestlist_and_reference_file_present): Ensure that a test with a reference result
          on disk but no reference result listed in the directory's reftest list picks up its reference result.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.test_strip_uri): Test that some/test.html and some/other/../test.html are treated
         as the same file.

2012-04-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r115314.

        For some reason it fails while bulding GtkVersioning for WTR, but
        it didn't fail neither in EWS nor in my laptop. We don't really
        need GtkVersioning in WTR since it already depends on GTK+3
        unconditionally.

        * WebKitTestRunner/GNUmakefile.am: Remove GtkVersioning.c from
        compilation.
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::createMouseButtonEvent): Use GTK+ 3 API
        directly instead of getDefaultGDKPointerDevice() helper.
        (WTR::EventSenderProxy::keyDown): Ditto.
        (WTR::EventSenderProxy::mouseMoveTo): Ditto.

2012-04-24  Ojan Vafai  <ojan@chromium.org>

        Show flakiness dashboard data in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=83716

        Reviewed by Dimitri Glazkov.

        Put an iframe below the expected/actual results in the Results view.
        Size the iframe to it's height.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.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:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:

2012-04-26  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [DRT] LayoutTestController needs implementation of setJavaScriptProfilingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=84576

        Reviewed by Martin Robinson.

        Add missing implementation setJavaScriptProfilingEnabled to EFL's
        LayoutTestController in order to unskip tests rely on this setting.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setJavaScriptProfilingEnabled):

2012-04-26  Xianzhu Wang  <wangxianzhu@chromium.org>

        Add Jing Zhao, Min Qin, Tien-Ren Chen and Hao Zheng into contributors list.

        Not reviewed.

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

2012-04-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test TestWebKitAPI/WebKit2/TestNewFirstVisuallyNonEmptyLayout times out
        https://bugs.webkit.org/show_bug.cgi?id=84957

        Reviewed by Martin Robinson.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip TestNewFirstVisuallyNonEmptyLayout and
        TestNewFirstVisuallyNonEmptyLayoutForImages.
        * TestWebKitAPI/gtk/PlatformWebViewGtk.cpp:
        (TestWebKitAPI::PlatformWebView::PlatformWebView): Show the
        toplevel window containing the web view to make sure events are
        received.

2012-04-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Add bug numbers to skipped tests.

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

2012-04-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Build and run TestWebKitAPI WebKit2 unit tests
        https://bugs.webkit.org/show_bug.cgi?id=84446

        Reviewed by Philippe Normand.

        * Scripts/run-gtk-tests:
        (TestRunner): Add TestWebKitAPI/WebKit2 to the list of directories
        containing tests. Unskip FunctionalTest.RefCountedStorage, since
        we are now using a custom main that initializes WTF threading.
        (TestRunner._setup_testing_environment): Set environment variables
        required to run WebKit2 tests.
        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/JavaScriptTest.cpp: Use
        JavaScriptCore/JSContextRef.h instead of
        JavaScriptCore/JavaScriptCore.h since it includes JSStringRefCF.h
        unconditionally.
        * TestWebKitAPI/PlatformWebView.h: Define PlatformWKView and
        PlatformWindow for GTK.
        * TestWebKitAPI/Tests/WebKit2/EvaluateJavaScript.cpp: Remove
        unneded header that breaks the build of GTK port.
        * TestWebKitAPI/Tests/WebKit2/PreventEmptyUserAgent.cpp: Use
        JavaScriptCore/JSContextRef.h instead of
        JavaScriptCore/JavaScriptCore.h since it includes JSStringRefCF.h
        unconditionally.
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST): Add expected values for GTK+ port.
        * TestWebKitAPI/gtk/InjectedBundleControllerGtk.cpp:
        (TestWebKitAPI):
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * TestWebKitAPI/gtk/PlatformUtilitiesGtk.cpp: Added.
        (TestWebKitAPI::Util::checkTestFinished):
        (TestWebKitAPI::Util::run):
        (TestWebKitAPI::Util::sleep):
        (TestWebKitAPI::Util::getFilenameFromEnvironmentVariableAsUTF8):
        (TestWebKitAPI::Util::createInjectedBundlePath):
        (TestWebKitAPI::Util::createURLForResource):
        (TestWebKitAPI::Util::URLForNonExistentResource):
        (TestWebKitAPI::Util::isKeyDown):
        * TestWebKitAPI/gtk/PlatformWebViewGtk.cpp: Added.
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        (TestWebKitAPI::PlatformWebView::page):
        (TestWebKitAPI::PlatformWebView::resizeTo):
        (TestWebKitAPI::doKeyStroke):
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress):
        (TestWebKitAPI::PlatformWebView::simulateAltKeyPress):
        (TestWebKitAPI::doMouseButtonEvent):
        (TestWebKitAPI::PlatformWebView::simulateRightClick):
        (TestWebKitAPI::PlatformWebView::simulateMouseMove):
        * TestWebKitAPI/gtk/main.cpp:
        (main):

2012-04-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] run-gtk-tests: Use a timeout per test instead of a global timeout
        https://bugs.webkit.org/show_bug.cgi?id=84695

        Reviewed by Philippe Normand.

        It also adds a command line option to be able to pass a custom
        timeout value, instead of hard-coding it. The default timeout is 10
        seconds if no other value is passed to the script.

        * Scripts/run-gtk-tests:
        (TestTimeout): Exception raised when a test times out.
        (TestRunner._get_child_pid_from_test_output): Helper function to
        get the pid of the running test from gtester output.
        (TestRunner._kill_process): Helper funtion ot kill a process
        ignoring exceptions if the process is already died.
        (TestRunner._run_test_command): Run the test command raising
        TestTimeout exception if the test doesn't finish before the given
        timeout in seconds.
        (TestRunner._run_test_command.alarm_handler): Alarm handler that
        raises TestTimeout exception.
        (TestRunner._run_test_glib): Use _run_test_command() to run the test.
        (TestRunner._run_test_google): Ditto.
        (TestRunner.run_tests): Add current test to the list of timed out
        test if TestTimeout exception is raised. Show the list of timed
        out test at the end.

2012-04-26  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [DRT] LayoutTestController needs implementation of addOriginAccessWhitelistEntry and removeOriginAccessWhitelistEntry
        https://bugs.webkit.org/show_bug.cgi?id=83880

        Reviewed by Antonio Gomes.

        Add missing implementation addOriginAccessWhitelistEntry and
        removeOriginAccessWhitelistEntry to EFL's LayoutTestController
        in order to unskip tests which rely on this.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::addOriginAccessWhitelistEntry):
        (LayoutTestController::removeOriginAccessWhitelistEntry):

2012-04-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add downloads support to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=73662

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/BrowserDownloadsBar.c: Added.
        (browserDownloadsBarChildRemoved): Close the downloads bar if
        there aren't active downloads.
        (browserDownloadsBarResponse): Destroy the downloads bar when
        closed.
        (browser_downloads_bar_init):
        (browser_downloads_bar_class_init):
        (browser_downloads_bar_new): Create a new downloads bar.
        (actionButtonClicked): Cancel the download if cancel button was
        clicked, or open the downloaded file if the download finished.
        (browserDownloadFinalize):
        (browser_download_init):
        (browser_download_class_init):
        (downloadReceivedResponse): Update download message using the
        response URI.
        (remainingTime): Helper function to get human readable remaining
        time.
        (downloadProgress): Update downloads progress.
        (downloadReceivedData):
        (downloadFinished): Update download message and turn download
        button into open.
        (downloadFailed): Show error message or destroy the download UI if
        it was cancelled.
        (browserDownloadNew): Create a new download widget for the given
        WebKitDownload.
        (browser_downloads_bar_add_download): Add download widget to the
        downloads bar.
        * MiniBrowser/gtk/BrowserDownloadsBar.h: Added.
        * MiniBrowser/gtk/BrowserWindow.c:
        (downloadStarted): Create a download widget and add it to the
        downloads bar when a new download is started.
        (browserWindowConstructed): Connect to
        WebKitWebContext::download-started signal.
        * MiniBrowser/gtk/GNUmakefile.am: Add new files to compilation.

2012-04-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Skip unit test failing in debug bot.

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

2012-04-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][DRT] "resource,request,willsend" signal needs to provide more information
        https://bugs.webkit.org/show_bug.cgi?id=84670

        Reviewed by Andreas Kling.

        Handle in EFL's DumpRenderTree the new Ewk_Frame_Resource_Messages now
        passed with the "resource,request,willsend" signal and dump
        information about the network request and the possible network
        response if LayoutTestController's dumpResourceLoadCallbacks() returns
        true.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (pathSuitableForTestResult):
        (urlSuitableForTestResult):
        (descriptionSuitableForTestResult):
        (DumpRenderTreeChrome::onWillSendRequest):

2012-04-25  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Unreviewed, rolling out r113703 because of crashing tests.
        http://trac.webkit.org/changeset/113703
        https://bugs.webkit.org/show_bug.cgi?id=83024

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * Tools.pro:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/functions.prf:

2012-04-25  Maciej Stachowiak  <mjs@apple.com>

        Teach LayoutTestHelper to correctly restore the color profile when it's a factory profile
        https://bugs.webkit.org/show_bug.cgi?id=84931

        Reviewed by Filip Pizlo.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (installLayoutTestColorProfile): Account for the possibility of the default
        profile being a factory profile.

2012-04-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r115240.
        http://trac.webkit.org/changeset/115240
        https://bugs.webkit.org/show_bug.cgi?id=84928

        It broke everything (Requested by Ossy_HOME on #webkit).

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkDriver):
        (GtkDriver._start):
        (GtkDriver._start.x_filter):
        (GtkDriver.stop):
        (GtkPort._driver_class):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._build_driver):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py: Removed.

2012-04-25  Dirk Pranke  <dpranke@chromium.org>

        [chromium] change DRT's "DRT" output to match the other ports
        https://bugs.webkit.org/show_bug.cgi?id=84904

        Reviewed by Kent Tamura.

        Since we run Chromium's DRT in --test-shell mode, the
        non-test-shell output has never been really beaten on to make
        sure it's right. This fixes a few issues and will be tested
        with upcoming NRWT changes that'll land in a separate patch.
        In particular we should never output framing text like "\n"
        or "#EOF" outside of something outside of TestEventPrinter,
        and we weren't handling audio output properly at all.

        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (DRTPrinter):
        (TestShellPrinter):
        (DRTPrinter::handleTextFooter):
        (DRTPrinter::handleAudioFooter):
        (DRTPrinter::handleTestFooter):
        (TestShellPrinter::handleAudioFooter):
        * DumpRenderTree/chromium/TestEventPrinter.h:
        (TestEventPrinter):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::dump):

2012-04-25  Joshua Bell  <jsbell@chromium.org>

        Unreviewed: Adding Alec Flett as a contributor (non-committer).

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

2012-04-25  Abhishek Arya  <inferno@chromium.org>

        Mark myself as a reviewer.
        https://bugs.webkit.org/show_bug.cgi?id=84902

        Reviewed by Dimitri Glazkov.

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

2012-04-25  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [Qt][NRWT] Run each DRT in it's own xvfb
        https://bugs.webkit.org/show_bug.cgi?id=77335

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._driver_class):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._driver_class):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py: Added.
        (XvfbDriver):
        (XvfbDriver._start):
        (XvfbDriver._start.x_filter):
        (XvfbDriver.stop):

2012-04-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r115222.
        http://trac.webkit.org/changeset/115222
        https://bugs.webkit.org/show_bug.cgi?id=84874

        Caused test regressions on the EFL build (Requested by rakuco
        on #webkit).

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::addOriginAccessWhitelistEntry):
        (LayoutTestController::removeOriginAccessWhitelistEntry):

2012-04-25  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [DRT] LayoutTestController needs implementation of addOriginAccessWhitelistEntry and removeOriginAccessWhitelistEntry
        https://bugs.webkit.org/show_bug.cgi?id=83880

        Reviewed by Antonio Gomes.

        Add missing implementation addOriginAccessWhitelistEntry and
        removeOriginAccessWhitelistEntry to EFL's LayoutTestController
        in order to unskip tests which rely on this.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::addOriginAccessWhitelistEntry):
        (LayoutTestController::removeOriginAccessWhitelistEntry):

2012-04-25  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] [DRT] Reset text zoom factor before running a test
        https://bugs.webkit.org/show_bug.cgi?id=84861

        Reviewed by Antonio Gomes.

        This fix eliminates most of the current flakiness on EFL build
        bots, although some CSS tests will now need rebasiling.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):

2012-04-25  Milian Wolff  <milian.wolff@kdab.com>

        [Qt] add LayoutTestController::setPrinting support to Qt unit tests
        https://bugs.webkit.org/show_bug.cgi?id=84246

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dump):

2012-04-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make the web view's url property follow the active url

        https://bugs.webkit.org/show_bug.cgi?id=77554

        Update  the location bar in the minibrowser to behave
        a bit more like normal browsers in terms of when the url will change
        and how active focus is handled.

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-04-25  Philippe Normand  <pnormand@igalia.com>

        Webkit build fails due to missing gstreamer include file on Kubuntu 8.04
        https://bugs.webkit.org/show_bug.cgi?id=81913

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/features.prf: Check for gstreamer-0.10
        and gstreamer-plugins-base >= 0.10.30 just like the GTK port
        does. 0.10.27 is unfortunately not recent enough to get the media
        player working reliably.


2012-04-25  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] Run tests in '/http/tests/local' with local URI
        https://bugs.webkit.org/show_bug.cgi?id=84820

        Reviewed by Nikolas Zimmermann.

        Currently we run all tests under folder "/http/tests/" as HTTP
        tests (http://...). However in WebKit ORWT and NRWT scripts, tests in
        'http/tests/local' are run with local path (like '/developer/LayoutTests
        /http/tests/local/absolute-url-strip-whitespace.html').
        With this patch we can keep the same behaviour as other portings.

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

2012-04-25  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][DRT] Reset DRT settings to their default values after a testcase was executed.
        https://bugs.webkit.org/show_bug.cgi?id=84709

        Reviewed by Eric Seidel.

        Not all the settings that can be changed by layout testcases through a JS API were 
        reset in DumpRenderTreeChrome::resetDefaultsToConsistentValues().

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (defaultEditingBehavior): returns editing behavior depending on current platform.
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues): reset some missed DRT settings

2012-04-24  Dirk Pranke  <dpranke@chromium.org>

        nrwt: add ASAN handling to chromium crash logs
        https://bugs.webkit.org/show_bug.cgi?id=84664

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort._get_crash_log):

2012-04-24  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch rebaseline-test is retrieving stale expectations
        https://bugs.webkit.org/show_bug.cgi?id=84762

        Reviewed by Ojan Vafai.

        webkit-patch rebaseline-expectations is fetching files directly
        from the layout-test-results directory on the buildbots, rather
        than fetching them from the archive. This is problematic because
        we don't clobber the directory after each run and so you can end
        up fetching stale failing results.

        This change temporarily changes the code to fetch the zip file
        instead -- making things much slower -- until I can confer w/
        abarth and ojan over the best way to fix this for the long-term.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest.__init__):
        (RebaselineTest._zip_file_set):
        (RebaselineTest):
        (RebaselineTest._fetch_baseline):
        (RebaselineTest._rebaseline_test):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.stub_rebaseline_test_command_and_tool):
        (TestRebaseline.stub_rebaseline_test_command_and_tool.FakeZipFileSet):
        (TestRebaseline.stub_rebaseline_test_command_and_tool.FakeZipFileSet.read):
        (TestRebaseline.test_rebaseline_updates_expectations_file_noop):
        (test_rebaseline_updates_expectations_file):
        (test_rebaseline_test):
        (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):

2012-04-24  Ojan Vafai  <ojan@chromium.org>

        Improve code for embedding flakiness dashboard as an iframe
        https://bugs.webkit.org/show_bug.cgi?id=84782

        Reviewed by Dirk Pranke.

        -Include the horizontal scrollbar height in the measured height of the page.
        -Post a message everytime the height changes instead of in response to a queryContentHeight message.
        This way, the embedder doesn't need to poll.

        No new tests. This is hard to test because it involves postMessage and iframes.
        Once we switch the dashboard tests over to qunit, we should be able to write an
        asyncTest for this.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (generatePage):
        (appendHTML):
        (appendExpectations):
        (postHeightChangedMessage):
        (generatePageForIndividualTests.if):
        (generatePageForIndividualTests):
        * TestResultServer/static-dashboards/flakiness_dashboard_embedded.html: Added.

2012-04-16  Ojan Vafai  <ojan@chromium.org>

        Replace garden-o-matic accordion UI with a panel UI
        https://bugs.webkit.org/show_bug.cgi?id=84081

        Reviewed by Dimitri Glazkov.

        This is a nicer UI to work with and makes it easier to embed the flakiness dashboard,
        since we can reuse the same iframe without moving it in the DOM.

        Also, excise unnecessary jquery-isms.

        * 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:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:

2012-04-24  Peter Beverloo  <peter@chromium.org>

        [Chromium] DumpRenderTree should depend on base.gyp:test_support_base
        https://bugs.webkit.org/show_bug.cgi?id=84729

        Reviewed by Dirk Pranke.

        This dependency is necessary for Android since it'll soon be
        calling InitAndroidOSPathStub() in it's platform support. The
        TestWebKitAPI and webkit_unit_tests already have this dependency.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-04-24  Ojan Vafai  <ojan@chromium.org>

        Replace vague informative statement with the list of builders where the test isn't listed
        https://bugs.webkit.org/show_bug.cgi?id=84779

        Reviewed by Dirk Pranke.

        This is more informative and more likely to be noticed. With the old UI, people never
        read the line and if they did, they didn't really understand what it meant. Hopefully
        have the list of builders will be more clear.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.css:
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:

2012-04-24  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Create a new flag for PeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=84723

        Reviewed by Dimitri Glazkov.

        To allow Chrome to make the GetUserMedia functionality available by default we
        need another flag for the PeerConnection related parts. This new flag is in
        addition to the general media stream flag, and both need to be enabled for
        PeerConnection object creation.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2012-04-24  Joe Mason  <jmason@rim.com>

        [BlackBerry] Revert broken changes to authentication dialog
        https://bugs.webkit.org/show_bug.cgi?id=80135

        Reviewed by Antonio Gomes.

        The previous patches from this bug caused an infinite loop when using digest auth;
        apparently they were only tested with basic.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        * DumpRenderTree/blackberry/DumpRenderTreeBlackBerry.h:
        (WebCore):

2012-04-24  Zan Dobersek  <zandobersek@gmail.com>

        [TestResultsServer] Add a unit test for changes in r114868
        https://bugs.webkit.org/show_bug.cgi?id=84713

        Reviewed by Ojan Vafai.

        Add a new unit test to test the isToTWebKit attribute of a BuilderGroup object
        that is created for either DEPS or ToT builder groups. The unit test covers changes
        made in r114868.

        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (testBuilderGroupIsToTWebKitAttribute.g_handleBuildersListLoaded):
        (testBuilderGroupIsToTWebKitAttribute.assertEquals):

2012-04-24  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10120155> and https://bugs.webkit.org/show_bug.cgi?id=82664
         Need DOMWindow mechanism to supplement UserScripts for page cache notifications

        Reviewed by Sam Weinig.

        Add a new bundle test that stresses the basics of the WKBundleDOMWindowExtension API.

        It makes sure new extensions can be added at the right times, and that all of the expected
        callbacks are made.

        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic.cpp: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle): Record all messages sent from the bundle.
        (TestWebKitAPI::TEST): Run a page through some basic exercises, then compared messages sent from the
           bundle to a set of known expected messages.

        Listen to all the new client callbacks, create some extensions, and monitor their lifetimes:
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic_Bundle.cpp: Added.
        (TestWebKitAPI::DOMWindowExtensionBasic::DOMWindowExtensionBasic):
        (TestWebKitAPI::DOMWindowExtensionBasic::frameLoadFinished):
        (TestWebKitAPI::DOMWindowExtensionBasic::sendExtensionStateMessage):
        (TestWebKitAPI::DOMWindowExtensionBasic::initialize):
        (TestWebKitAPI::DOMWindowExtensionBasic::didCreatePage):
        (TestWebKitAPI::DOMWindowExtensionBasic::updateExtensionStateRecord):
        (TestWebKitAPI::DOMWindowExtensionBasic::sendBundleMessage):
        (TestWebKitAPI::DOMWindowExtensionBasic::didCreateGlobalObjectForFrame):
        (TestWebKitAPI::DOMWindowExtensionBasic::willDisconnectDOMWindowExtensionFromGlobalObject):
        (TestWebKitAPI::DOMWindowExtensionBasic::didReconnectDOMWindowExtensionToGlobalObject):
        (TestWebKitAPI::DOMWindowExtensionBasic::willDestroyGlobalObjectForDOMWindowExtension):
        (TestWebKitAPI::didFinishLoadForFrameCallback):
        (TestWebKitAPI::didCreateGlobalObjectForFrameCallback):
        (TestWebKitAPI::willDisconnectDOMWindowExtensionFromGlobalObjectCallback):
        (TestWebKitAPI::didReconnectDOMWindowExtensionToGlobalObjectCallback):
        (TestWebKitAPI::willDestroyGlobalObjectForDOMWindowExtensionCallback):

        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic.cpp:
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle): Make this method static, as it always should have been.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2012-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Build and run TestWebKitAPI unit tests
        https://bugs.webkit.org/show_bug.cgi?id=84325

        Reviewed by Philippe Normand.

        We only build WTF unit tests for now. WebKit2 tests will be
        enabled in a follow up patch.

        * Scripts/run-gtk-tests:
        (TestRunner): Add TestWebKitAPI/WTF to the list of directories
        containing unit tests.
        (TestRunner._run_test_glib): Run glib tests using gtester.
        (TestRunner._run_test_google): Run google tests.
        (TestRunner._run_test): Use _run_test_glib or _run_test_google
        depending on whether given test is glib or google test
        * TestWebKitAPI/GNUmakefile.am: Added.
        * TestWebKitAPI/config.h: Use #ifdef instead of # to fix a compile
        warning with -Wundef. Include WebKit2 headers only when building
        WebKit2.

2012-04-24  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt][WK2] Convert touch-point area
        https://bugs.webkit.org/show_bug.cgi?id=84434

        Reviewed by Kenneth Rohde Christiansen.

        Fix failing test after r114917 by also adding the new EventSender API
        to WebKitTestRunner.

        * WebKitTestRunner/EventSenderProxy.h:
        (EventSenderProxy):
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::setTouchPointRadius):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        (EventSendingController):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::addTouchPoint):
        (WTR::EventSenderProxy::updateTouchPoint):
        (WTR::EventSenderProxy::setTouchPointRadius):
        (WTR::EventSenderProxy::clearTouchPoints):

2012-04-24  Mikhail Naganov  <mnaganov@chromium.org>

        [Chromium] Unreviewed test expectations update.
        https://bugs.webkit.org/show_bug.cgi?id=84726

        Mark webkitpy.layout_tests.servers.http_server_unittest.TestHttpServer.test_start_cmd as failing on Windows.

        * Scripts/webkitpy/test/test_finder.py:
        (TestFinder._default_names):

2012-04-24  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Enable Web Timing
        https://bugs.webkit.org/show_bug.cgi?id=84705

        Reviewed by Tony Gentilcore.

        Enable web timing by default whenever build-webkit is used.

        * Scripts/build-webkit:

2012-04-23  Eriq Augustine  <eaugusti@chromium.org>

        Return value from executed script in Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=79851

        Reviewed by Adam Barth.

        Adding a function to LayoutTestController that evaluates a script in
        an isolated wold an returns the result of the evaluation.

        * DumpRenderTree/LayoutTestController.cpp:
        (evaluateScriptInIsolatedWorldAndReturnValue):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        (LayoutTestController::evaluateScriptInIsolatedWorldAndReturnValue):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setXSSAuditorEnabled):
        (LayoutTestController::evaluateScriptInIsolatedWorldAndReturnValue):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::evaluateScriptInIsolatedWorldAndReturnValue):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::evaluateScriptInIsolatedWorldAndReturnValue):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::evaluateScriptInIsolatedWorldAndReturnValue):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::evaluateScriptInIsolatedWorldAndReturnValue):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::evaluateScriptInIsolatedWorldAndReturnValue):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::evaluateScriptInIsolatedWorldAndReturnValue):

2012-04-23  Dirk Pranke  <dpranke@chromium.org>

        run-perf-tests fail intermittently with an exception
        https://bugs.webkit.org/show_bug.cgi?id=83532

        Reviewed by Ryosuke Niwa.

        This bulletproofs port.get_option('child_processes')
        against the case where the option wasn't set.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_get_crash_log):
        (test_get_crash_log.fake_time_cb):

2012-04-23  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Add desktop zooming support for QQuickWebView
        https://bugs.webkit.org/show_bug.cgi?id=82337

        Unreviewed typo fix after r114900.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow): Fix the mistyped
        value of a zoom level.

2012-04-23  Hao Zheng  <zhenghao@chromium.org>

        [chromium-android] Get rid of the trick that replaces system fallback font with DejaVuSans.
        https://bugs.webkit.org/show_bug.cgi?id=84580

        Reviewed by Ojan Vafai.

        Android's first fallback font is changed to DroidSansArabic.ttf in JB.
        Take the opportunity to get rid of the trick.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.start_helper):
        (ChromiumAndroidPort._push_fonts):

2012-04-23  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy is failing
        https://bugs.webkit.org/show_bug.cgi?id=84617

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/port/http_lock_unittest.py:
        (HttpLockTestWithRealFileSystem.clean_all_lockfile):

2012-04-23  Ojan Vafai  <ojan@chromium.org>

        Split up flakiness_dashboard.html into multiple files. This is a step in the direction
        of making the code more maintainable (e.g. being able to use qunit for testing).

        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.css: Added.
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard.js: Copied from Tools/TestResultServer/static-dashboards/flakiness_dashboard.html.
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.css: Added.
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js: Renamed from Tools/TestResultServer/static-dashboards/flakiness_dashboard_tests.js.

2012-04-23  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt][WK2] Convert touch-point area.
        https://bugs.webkit.org/show_bug.cgi?id=84434

        Reviewed by Kenneth Rohde Christiansen.

        Add feature to set touch-point radius for emitted touch-events.

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::addTouchPoint):
        (EventSender::updateTouchPoint):
        (EventSender::setTouchPointRadius):
        (EventSender::clearTouchPoints):
        * DumpRenderTree/qt/EventSenderQt.h:
        (EventSender):

2012-04-23  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] EFL's LayoutTestController does not implement elementDoesAutoCompleteForElementWithId
        https://bugs.webkit.org/show_bug.cgi?id=84425

        Reviewed by Antonio Gomes.

        Use the new helper in DumpRenderTreeSupportEfl to properly
        test whether an element performs autocompletion.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::elementDoesAutoCompleteForElementWithId):

2012-04-23  Csaba Osztrogonác  <ossy@webkit.org>

        master.cfg cleanup, remove dead codes after r92792.
        https://bugs.webkit.org/show_bug.cgi?id=84433

        Relanding r114881 after typo fix in UploadBuiltProduct.

        Reviewed by Ryosuke Niwa.

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

2012-04-23  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        [EFL][DRT] Need to support requestAnimationFrame
        https://bugs.webkit.org/show_bug.cgi?id=84585

        Reviewed by Martin Robinson.

        Making requestAnimationFrame() support a default on the EFL build.

        * Scripts/build-webkit:

2012-04-23  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Add desktop zooming support for QQuickWebView
        https://bugs.webkit.org/show_bug.cgi?id=82337

        Reviewed by Simon Hausmann.

        Add zooming support for MiniBrowser to
        test the new API.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::zoomIn):
        (BrowserWindow::zoomOut):
        (BrowserWindow::keyPressEvent):
        (BrowserWindow::wheelEvent):
        * MiniBrowser/qt/BrowserWindow.h:
        (BrowserWindow):

2012-04-23  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed rolling out r114881, because it broke upload buildstep.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (ConfigureBuild.__init__):
        (ConfigureBuild.start):
        (CompileWebKit.start):
        (UploadBuiltProduct):
        (UploadBuiltProduct.determineExtraFeatures):
        (Factory.__init__):
        (BuildFactory.__init__):
        (TestFactory.__init__):
        (loadBuilderConfig):

2012-04-23  Csaba Osztrogonác  <ossy@webkit.org>

        master.cfg cleanup, remove dead codes after r92792.
        https://bugs.webkit.org/show_bug.cgi?id=84433

        Reviewed by Ryosuke Niwa.

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

2012-04-23  Milian Wolff  <mail@milianw.de>

        [Qt] Make DRT not dump pixel results if test is calling layoutTestController.dumpAsText()
        https://bugs.webkit.org/show_bug.cgi?id=84327

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dump):

2012-04-22  Sriram Neelakandan  <sriram.neelakandan@gmail.com>

        [Gtk] Added MOZ_X11 build flag for TARGET_X11
        https://bugs.webkit.org/show_bug.cgi?id=40785

        Reviewed by Anders Carlsson.

        * GNUmakefile.am:

2012-04-22  Zan Dobersek  <zandobersek@gmail.com>

        [TestResultsServer] Impossible to inspect builds on non-Chromium builders
        https://bugs.webkit.org/show_bug.cgi?id=84544

        Reviewed by Ryosuke Niwa.

        Use the groupEnum parameter that is passed through to the onBuilderListLoad
        function rather than an undefined attribute of the BuilderGroup object. This
        makes it again possible to inspect builds on non-Chromium builders in the
        test results server by not trying to always add Chromium revision links.

        * TestResultServer/static-dashboards/builders.js:

2012-04-20  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Revert changes that disabled Cairo fonts metrics hinting
        https://bugs.webkit.org/show_bug.cgi?id=84502

        Reviewed by Daniel Bates.

        Re-enable Cairo metrics hinting, which seems to ensure consistent results in
        reference and pixel test results. This makes our font metrics a bit different
        than the Mac port's, but it's a decent price to pay for consistent results.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeGtkFontSettings):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::initializeGtkSettings):

2012-04-04  Jer Noble  <jer.noble@apple.com>

        apple.com top navigation bar appears inside video during full screen exit animation
        https://bugs.webkit.org/show_bug.cgi?id=83095

        Reviewed by Eric Carlson.

        Add a new LayoutTestController function, setHasCustomFullScreenBehavior(), which allows scripts to
        disable the standard full screen behavior, and replace it with explicit callbacks to the relevant
        Document methods from within the script.  This allows subtle timing bugs to be consistently reproduced
        from within LayoutTests.

        Add the new methods, hasCustomFullScreenBehavior() and setHasCustomFullScreenBehavior():
        * DumpRenderTree/LayoutTestController.cpp:
        (setHasCustomFullScreenBehaviorCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::setHasCustomFullScreenBehavior):
        (LayoutTestController::hasCustomFullScreenBehavior):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::enterFullScreenForElement):
        (WTR::InjectedBundlePage::exitFullScreenForElement):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::setHasCustomFullScreenBehavior):
        (WTR::LayoutTestController::hasCustomFullScreenBehavior):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::setHasCustomFullScreenBehavior):
        (LayoutTestController::hasCustomFullScreenBehavior):

        Query the new methods before calling will/did/Enter/ExitFullScreen:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::enterFullScreenNow):
        (WebViewHost::exitFullScreenNow):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:enterFullScreenForElement:listener:]):
        (-[UIDelegate webView:exitFullScreenForElement:listener:]):

2012-04-20  Nandor Huszka  <hnandor@inf.u-szeged.hu>

        NRWT: option --skip-pixel-test-if-no-baseline support on DRT
        https://bugs.webkit.org/show_bug.cgi?id=72841

        Reviewed by Dirk Pranke

        This patch implements support for --skip-pixel-test-if-no-baseline generically in NRWT,
        instead of in every DRT and WTR implementation. We add 'should_run_pixel_test'
        and 'reference_files' fields to the TestInput objects, and use those flags
        to select the right driver to use in the DriverProxy.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__):
        (SingleTestRunner._driver_input):
        (SingleTestRunner._run_reftest):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.handle_test_list):
        (Worker._update_test_input):
        * Scripts/webkitpy/layout_tests/models/test_input.py:
        (TestInput):
        (TestInput.__init__):
        (TestInput.__repr__):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver._wrapper_options):
        (ChromiumDriver.run_test):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.test_crash_log):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverInput.__init__):
        (Driver.__init__):
        (DriverProxy.__init__):
        (DriverProxy.run_test):
        (DriverProxy.start):
        (DriverProxy.cmd_line):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkDriver._start):
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        (MockDRT.run):
        (MockDRT.input_from_line):
        (MockDRT.output_for_test):
        (MockDRT.write_test_output):
        (MockChromiumDRT.input_from_line):
        (MockChromiumDRT.output_for_test):
        (MockChromiumDRT.write_test_output):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.cmd_line):
        (WebKitDriver.run_test):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestController.h:
        (TestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::setIsPixelTest):
        * WebKitTestRunner/TestInvocation.h:
        (TestInvocation):

2012-04-20  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Make it possible to define offline storage quota per origin
        https://bugs.webkit.org/show_bug.cgi?id=84170

        Improved LayoutTestController::setDatabaseQuota to set quota based on
        origin which was causing some tests to fail. Also align the default
        quota for testing (5MB) with others ports.

        When dumpDatabaseCallbacks is set to true by, also dump some database
        information when quota is exceed, which is also required by some tests.

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onExceededDatabaseQuota):
        (drtViewAdd):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setDatabaseQuota):

2012-04-20  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [DRT] Send double click event from EventSender
        https://bugs.webkit.org/show_bug.cgi?id=82867

        Reviewed by Daniel Bates.

        Add support for EFL DumpRenderTree EventSender to send
        double click events.

        * DumpRenderTree/efl/EventSender.cpp:
        (sendMouseEvent):

2012-04-20  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Enable Web Timing
        https://bugs.webkit.org/show_bug.cgi?id=42432

        Reviewed by Gustavo Noronha Silva.

        Build web timing by default whenever build-webkit is used.

        * Scripts/build-webkit:

2012-04-20  Kamil Blank  <k.blank@samsung.com>

        [EFL] Add missing reset for setAuthorAndUserStylesEnabled inside DRT.
        https://bugs.webkit.org/show_bug.cgi?id=84430

        Reviewed by Daniel Bates.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):

2012-04-20  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r112781): Windows build slaves are no longer including .pdb files in archives handed to testers
        https://bugs.webkit.org/show_bug.cgi?id=84424

        Reviewed by Mark Rowe.

        Let Windows and Chromium have their own list of files to copy.

        * BuildSlaveSupport/built-product-archive:
        (removeDirectoryIfExists):
        (copyBuildFiles):
        (archiveBuiltProduct):

2012-04-20  Kamil Blank  <k.blank@samsung.com>

        [EFL] Add setting API for author and user styles.
        https://bugs.webkit.org/show_bug.cgi?id=82860

        Reviewed by Daniel Bates.

        Implementation of setAuthorAndUserStylesEnabled.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setAuthorAndUserStylesEnabled):

2012-04-19  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] Missing keycode translation for space key
        https://bugs.webkit.org/show_bug.cgi?id=84153

        Reviewed by Antonio Gomes.

        Set keyname for space key before dispatching event.

        * DumpRenderTree/efl/EventSender.cpp:
        (keyNameFromJSValue):

2012-04-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Allow to use WebInspector in GtkLauncher
        https://bugs.webkit.org/show_bug.cgi?id=84143

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Add new files to compilation.
        * GtkLauncher/LauncherInspectorWindow.c: Added.
        (launcherInspectorWindowFinalize):
        (launcher_inspector_window_init):
        (launcher_inspector_window_class_init):
        (inspectedURIChanged): Update the window title based on current
        inspected URI.
        (showInspectorWindow): Show inspector window.
        (closeInspectorWindow): Hide inspector window.
        (launcherInspectorWindowNew): Create an inspector window.
        (launcherInspectorWindowGetWebView): Return the inspected web view.
        * GtkLauncher/LauncherInspectorWindow.h: Added.
        * GtkLauncher/main.c:
        (inspectorInspectWebViewCb): Create an inspector window.
        (createBrowser): Connect to inspect-web-view signal of the view
        inspector.

2012-04-19  Jeremy Mao  <yujie.mao@intel.com>

        Media Stream API: Piece of code cleanup for the chromium port
        https://bugs.webkit.org/show_bug.cgi?id=84328

        Reviewed by Kent Tamura.

        WebUserMediaClientMock use an old requestUserMedia interface and
        Replace it with the new interface.

        * DumpRenderTree/chromium/WebUserMediaClientMock.cpp:
        (WebKit::WebUserMediaClientMock::requestUserMedia):
        Remove the old requestUserMedia and replace it with the new.
        * DumpRenderTree/chromium/WebUserMediaClientMock.h:
        (WebUserMediaClientMock):

2012-04-19  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] DRT console messages should contain only the file name part of local URIs
        https://bugs.webkit.org/show_bug.cgi?id=84236

        Reviewed by Kentaro Hara.

        Process console messages before printing them in EFL's DumpRenderTree
        them so that they contain only the file name part of local URIs. This
        is what is expected by test cases.

        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (urlSuitableForTestResult):
        (onConsoleMessage):

2012-04-19  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] [DRT] Should create offline storage inside DUMPRENDERTREE_TEMP
        https://bugs.webkit.org/show_bug.cgi?id=84169

        All databases were being created inside ~/.webkit which was causing
        flaky tests when running multiple tests in parallel, specially timeouts
        due to concurrency.

        Reviewed by Eric Seidel.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::initialize):

2012-04-19  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        [GTK] 3 fast/ layout tests failing after upgrading libsoup to 2.37.92
        https://bugs.webkit.org/show_bug.cgi?id=82484

        Reviewed by Martin Robinson.

        Bumping libsoup to version 2.38.1 which fixes the above WebKit bug.

        * efl/jhbuild.modules:
        * gtk/jhbuild.modules:

2012-04-19  Lucas Forschler  <lforschler@apple.com>

        Move apple-xserve-10 from Lion Test to SnowLeopard Debug Build
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2012-04-19  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] dispatchDidCancelClientRedirect needs implementation
        https://bugs.webkit.org/show_bug.cgi?id=83669

        Reviewed by Antonio Gomes.

        Catch the new ewk_frame "redirect,cancelled" signal in EFL's DRT and
        and print out information that is expected by several test cases if
        LayoutTestController's dumpFrameLoadCallback() returns true.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::onFrameCreated):
        (DumpRenderTreeChrome::onFrameRedirectCancelled):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):

2012-04-18  Hironori Bono  <hbono@chromium.org>

        Split SpellChecker::didCheck() to SpellChecker::didCheckSucceeded() and SpellChecker::didCheckCanceled()
        https://bugs.webkit.org/show_bug.cgi?id=83748

        Reviewed by Ryosuke Niwa.

        This change replaces a call for SpellChecker::didCheck() with one for
        SpellChecker::didCheckCenceled() because didCheck() has been split into
        didCheckSucceeded() and didCheckCanceled().

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::requestCheckingOfText): Replaced didCheck with didCheckCanceled.

2012-04-18  Dirk Pranke  <dpranke@chromium.org>

        Fix failure in test-webkitpy after r114583.

        Unreviewed, build fix.

        Updating the call site in r114583 w/o updating the test caused
        the test to fail. Somehow I forgot to run the unit tests :(.

        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.test_crash_log):

2012-04-18  Filip Pizlo  <fpizlo@apple.com>

        JSC testing should have complete coverage over typed array types
        https://bugs.webkit.org/show_bug.cgi?id=84302

        Reviewed by Geoff Garen.
        
        Made run-fast-jsc print something and a newline if jsc threw an exception or
        otherwise returned with an error code, but did not crash.

        * Scripts/run-fast-jsc:

2012-04-18  Dirk Pranke  <dpranke@chromium.org>

        Fix crash in chromium.py after r114877.

        Unreviewed, build fix.

        Missed updating one call site for get_crash_log() :(.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.run_test):

2012-04-18  Philippe Normand  <pnormand@igalia.com>

        [GTK] NRWT bails out if more than one X server runs on the machine
        https://bugs.webkit.org/show_bug.cgi?id=84276

        Reviewed by Dirk Pranke.

        Set up GTK driver's Xvfb display number based on Xorg servers
        currently running.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkDriver._start):
        (GtkDriver._start.x_filter):

2012-04-18  Dirk Pranke  <dpranke@chromium.org>

        run-webkit-tests picked up an old crash log
        https://bugs.webkit.org/show_bug.cgi?id=84196

        Reviewed by Ryosuke Niwa.

        Modify the crash log-finding code so that we can
        limit our search to logs newer than X - this prevents
        us from finding old crash logs for a given process/pid
        combination even when the PIDs might've wrapped.
 
        Also fix a bug in filesystem_mock where files_under() would
        return paths that didn't exist.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs.find_newest_log):
        (CrashLogs._find_newest_log_darwin):
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (CrashLogsTest.test_find_log_darwin):
        (CrashLogsTest.test_find_log_darwin.bad_read):
        (CrashLogsTest):
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.files_under):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_get_crash_log):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.run_test):

2012-04-18  Dirk Pranke  <dpranke@chromium.org>

        nrwt: support additional test expectations files
        https://bugs.webkit.org/show_bug.cgi?id=84222

        Reviewed by Ojan Vafai.

        This patch adds an --additional-expectations flag that can be
        used to point to more files that will override the default set
        of expectations. This will allow us to remove the
        'google_chrome' ports and eventually help to clean up override
        handling in the chromium ports and unify expectations files and
        Skipped files; this can also be used to specify overrides for
        tests that run differently on a given machine.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.test_expectations_overrides):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.test_expectations_overrides):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_additional_expectations):

2012-04-18  Jer Noble  <jer.noble@apple.com>

        Lion Production Test failing with error: "Failed to stop httpd: pid file still exists"
        https://bugs.webkit.org/show_bug.cgi?id=84177

        Reviewed by Dirk Pranke.

        Try to delete the pid file left by Apache in the case it was killed forcefully.

        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd._stop_running_server):

2012-04-18  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Clean-up WheelEvent Conversion.
        https://bugs.webkit.org/show_bug.cgi?id=84243

        Reviewed by Simon Hausmann.
        
        Calculate proper wheel-delta from pixel-delta given.

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::EventSender):
        (EventSender::mouseScrollBy):
        (EventSender::continuousMouseScrollBy):

2012-04-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114506.
        http://trac.webkit.org/changeset/114506
        https://bugs.webkit.org/show_bug.cgi?id=84254

        Seems to be making gtk's DumpRenderTree crash occasionally
        (Requested by tomz on #webkit).

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

2012-04-18  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [CMake] Use jsc target instead of ONLY_BUILD_JAVASCRIPTCORE
        https://bugs.webkit.org/show_bug.cgi?id=84229

        CMake caches ONLY_BUILD_JAVASCRIPTCORE=1 and will reuse the setting for
        subsequent builds, stopping WebCore from being built ever again.

        Instead of trying to emulate a build target using command line options,
        just build the existing jsc target directly.

        Reviewed by Rob Buis.

        * Scripts/build-jsc:

2012-04-18  Simon Pena  <spena@igalia.com>

        [GTK] r114021 triggered media flakyness
        https://bugs.webkit.org/show_bug.cgi?id=83874

        Reviewed by Philippe Normand.

        Now that there is gtk API to update the
        MediaPlaybackRequiresUserGesture property, set it to false from the
        DumpRenderTree tool when resetting defaults to consistent values.

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

2012-04-18  Vivek Galatage  <vivekgalatage@gmail.com>

        Web Inspector: Disabling Inspector causes build failure on Windows
        https://bugs.webkit.org/show_bug.cgi?id=83557

        Reviewed by Pavel Feldman.

        The calls to inspector APIs are not put under ENABLE(INSPECTOR) guard.
        This change brings all such API calls under the guard.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::showWebInspector):
        (WTR::LayoutTestController::closeWebInspector):
        (WTR::LayoutTestController::evaluateInWebInspector):
        (WTR::LayoutTestController::setJavaScriptProfilingEnabled):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):

2012-04-18  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] atk/textChangedNotifications API test fails
        https://bugs.webkit.org/show_bug.cgi?id=84010

        Unreviewed, unskipping test after bug being fixed by r114311.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip now passing test.

2012-04-17  Jacky Jiang  <zhajiang@rim.com>

        [BlackBerry] Viewport metatag doesn't disable double-tap zoom
        https://bugs.webkit.org/show_bug.cgi?id=84199

        Reviewed by George Staikos.

        Revert a part of the change master_32/SHA:fa0f8ee9 and use
        WebPage::setUserScalable instead.

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

2012-04-17  Dirk Pranke  <dpranke@chromium.org>

        build-webkit: make ninja work with chromium linux
        https://bugs.webkit.org/show_bug.cgi?id=84213

        Reviewed by Eric Seidel.

        Fix typos so that build-webkit will use ninja to
        build chromium if a build.ninja file exists and is up-to-date.

        * Scripts/webkitdirs.pm:
        (determineIsChromiumNinja):

2012-04-17  Ojan Vafai  <ojan@chromium.org>

        Add caching to the flakiness dashboard json files
        https://bugs.webkit.org/show_bug.cgi?id=84198

        Reviewed by Dirk Pranke.

        * TestResultServer/handlers/testfilehandler.py:
        (GetFile._get_file_list):
        (GetFile._get_file_content):
        (GetFile._get_file_content_from_key):
        (GetFile._get_test_list_json):
        (GetFile._serve_json):
        Add a Last-Modified header and handle If-Modified-Since headers.
        (GetFile.get):

2012-04-17  Anders Carlsson  <andersca@apple.com>

        Need a client callback for when the user tries to interact with an already unresponsive page
        https://bugs.webkit.org/show_bug.cgi?id=84201
        <rdar://problem/11140862>

        Reviewed by Andreas Kling.

        Add new client functions.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2012-04-17  Dirk Pranke  <dpranke@chromium.org>

        nrwt: handle stopping layout test helper after a ctrl-c cleanly on the chromium port
        https://bugs.webkit.org/show_bug.cgi?id=84190

        Reviewed by Ojan Vafai.

        LayoutTestHelper would exit when the user typed ctrl-c, but we
        would attempt to write to it to shut it down, generating an
        IOError.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.stop_helper):

2012-04-17  Dirk Pranke  <dpranke@chromium.org>

        rename --experimental-fully-parallel
        https://bugs.webkit.org/show_bug.cgi?id=84188

        Reviewed by Ojan Vafai.

        I thought this was done long ago; rename
        --experimental-fully-parallel to just --fully-parallel and
        remove the --no- switch that AFAIK no one uses.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-04-17  Christophe Dumez  <christophe.dumez@intel.com>

        EFL's LayoutTestController does not implement callShouldCloseOnWebView
        https://bugs.webkit.org/show_bug.cgi?id=82301

        Reviewed by Martin Robinson.

        Implement callShouldCloseOnWebView in EFL's LayoutTestController by
        calling shouldClose() on the FrameLoader, allowing the related test
        to be removed from the skip list.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::callShouldCloseOnWebView):

2012-04-17  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] Add setting API to enable/disable XSSAuditor
        https://bugs.webkit.org/show_bug.cgi?id=83281

        Add missing implementation setXSSAuditorEnabled to EFL's LayoutTestController
        in order to unskip tests in http/tests/security/xssAuditor. Also, catch the signal 
        'xss,detected' in DRT to enable a test, which is expecting a line containing
        'didDetectXSS' in the output when reflected XSS is encountered in the page.

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::onFrameCreated):
        (DumpRenderTreeChrome::onDidDetectXSS):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setXSSAuditorEnabled):

2012-04-17  Nandor Huszka  <hnandor@inf.u-szeged.hu>

        [Qt] JSC build should handle --no-webkit2 option to avoid unwanted clean-builds
        https://bugs.webkit.org/show_bug.cgi?id=77533

        Reviewed by Simon Hausmann.

        Pick up the --no-webkit2 option from BUILD_WEBKIT_ARGS and pass on
        the corresponding parameter to the buildQMakeProjects function.

        * Scripts/build-jsc:

2012-04-17  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] DRT should support LayoutTestController's dumpFrameLoadCallbacks()
        https://bugs.webkit.org/show_bug.cgi?id=83030

        Reviewed by Antonio Gomes.

        Implement support for LayoutTestController's dumpFrameLoadCallbacks()
        in EFL's DumpRenderTree. Make use of the new frame argument passed to
        the "load,started" and "load,finished" signals.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::onLoadStarted):
        (DumpRenderTreeChrome::processWork):
        (DumpRenderTreeChrome::topLoadingFrameLoadFinished):
        (DumpRenderTreeChrome::onWebViewOnloadEvent):
        (DumpRenderTreeChrome::onInsecureContentRun):
        (DumpRenderTreeChrome::onInsecureContentDisplayed):
        (DumpRenderTreeChrome::onFrameCreated):
        (DumpRenderTreeChrome::onFrameProvisionalLoad):
        (DumpRenderTreeChrome::onFrameLoadCommitted):
        (DumpRenderTreeChrome::onFrameLoadFinished):
        (DumpRenderTreeChrome::onFrameLoadError):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):

2012-04-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114376.
        http://trac.webkit.org/changeset/114376
        https://bugs.webkit.org/show_bug.cgi?id=84155

        Wrong patch version committed, asked by the patch author.
        (Requested by rakuco on #webkit).

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::processWork):
        (DumpRenderTreeChrome::onLoadFinished):
        (DumpRenderTreeChrome::onWillSendRequest):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):

2012-04-17  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] DRT should support LayoutTestController's dumpFrameLoadCallbacks()
        https://bugs.webkit.org/show_bug.cgi?id=83030

        Reviewed by Antonio Gomes.

        Implement support for LayoutTestController's dumpFrameLoadCallbacks()
        in EFL's DumpRenderTree.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::processWork):
        (DumpRenderTreeChrome::topLoadingFrameLoadFinished):
        (DumpRenderTreeChrome::onWebViewOnloadEvent):
        (DumpRenderTreeChrome::onInsecureContentRun):
        (DumpRenderTreeChrome::onInsecureContentDisplayed):
        (DumpRenderTreeChrome::onFrameCreated):
        (DumpRenderTreeChrome::onFrameProvisionalLoad):
        (DumpRenderTreeChrome::onFrameLoadCommitted):
        (DumpRenderTreeChrome::onFrameLoadFinished):
        (DumpRenderTreeChrome::onFrameLoadError):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):

2012-04-17  Michael Brüning  <michael.bruning@nokia.com>

        [Qt] Fix builds with force_static_libs_as_shared for non-linux builds.
        https://bugs.webkit.org/show_bug.cgi?id=83035

        Reviewed by Simon Hausmann.

        The force_static_libs_as_shared feature for the Qt port will remove
        hide_symbols from Qt's CONFIG in order to make them visible to other
        libraries again.

        Due to an evaluation order problem in qmake, the flags for the C++ compiler
        that are set by adding hide_symbols to the CONFIG variables get applied
        to qmake's C++ compiler flags directly and hence trying to remove these
        later will not work and cause build failures when using the force_static_libs_as_shared
        feature of the Qt port.

        This is fixed by removing the flags that hide the exports from the compiler flags directly.

        * qmake/mkspecs/features/force_static_libs_as_shared.prf:

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

        Remove CreateWebKitBuildDirectory step to fix Chromium Windows Perf bot
        https://bugs.webkit.org/show_bug.cgi?id=84068

        Reviewed by Eric Seidel.

        Remove CreateWebKitBuildDirectory from master.cfg since download-built-product
        automatically creates the build directory if needed.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (DownloadAndPerfTestFactory.__init__):
        (DownloadAndPerfTestWebKit2Factory.__init__):

2012-04-16  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Use configure instead of autogen.sh for gtk+
        https://bugs.webkit.org/show_bug.cgi?id=84112

        Rubber-stamped by Martin Robinson.

        * gtk/jhbuild.modules: GTK+'s autogen requires gobject-introspection;
        we don't want to depend on that for now, so run configure instead - we
        can, since we are using a tarball

2012-04-16  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed, rolling out r114322.
        http://trac.webkit.org/changeset/114322
        https://bugs.webkit.org/show_bug.cgi?id=84096

        Didn't make the debug bot happy, so back out

        * gtk/jhbuild.modules:

2012-04-16  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Try to fix debug bot by adding gobject-introspection to the build
        https://bugs.webkit.org/show_bug.cgi?id=84096

        Unreviewed speculative build fix.

        * gtk/jhbuild.modules: Added gobject-introspection, since modules need
        an up-to-date introspection m4 for running autogen.

2012-04-16  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Add pango to jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=84086

        Unreviewed build fix.

        * gtk/jhbuild.modules: Add pango's latest stable release, 1.30, to our
        jhbuild environment. It's required for latest stable GTK+ and some
        systems may lack it.

2012-04-16  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] fonts jhbuild module needs an empty clean target
        https://bugs.webkit.org/show_bug.cgi?id=84085

        Rubber-stamped by Martin Robinson.

        * gtk/jhbuild.modules: update to webkitgtk-test-fonts 0.0.2, which
        includes a phony clean target that should make warnings and errors go
        away.

2012-04-16  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Bump dependency on GTK+ 3.x to match reality
        https://bugs.webkit.org/show_bug.cgi?id=84060

        Rubber-stamped by Martin Robinson.

        * gtk/jhbuild.modules: Bump GTK+ to 3.4.0, plus glib and gdk-pixbuf
        to their GNOME 3.4 versions.
        * gtk/patches/gtk+-3.0.12-gtkprinter.patch: Removed. This patch
        is applied upstream.

2012-04-16  Vincent Scheib  <scheib@chromium.org>

        Adding Contributors Brian Salomon and Tom Hudson to committers.py.

        Unreviewed.

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

2012-04-16  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        [BlackBerry] Add ability for DRT to handle HTTP authentication challenges.
        https://bugs.webkit.org/show_bug.cgi?id=84031

        Reviewed by Rob Buis.

        Implemented interface function didReceiveAuthenticationChallenge in class
        DumpRenderTree.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (drtCredentialDescription):
        (BlackBerry::WebKit::DumpRenderTree::didReceiveAuthenticationChallenge):
        (WebKit):
        * DumpRenderTree/blackberry/DumpRenderTreeBlackBerry.h:
        (WebCore):
        (DumpRenderTree):

2012-04-16  Philippe Normand  <pnormand@igalia.com>

        build-webkit --gtk --no-webkit2 builds WK2
        https://bugs.webkit.org/show_bug.cgi?id=83977

        Reviewed by Martin Robinson.

        * Scripts/build-webkit: Fixup ./configure option to disable
        WebKit2 build.

2012-04-16  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [DRT] Feeding key events with invalid keyName
        https://bugs.webkit.org/show_bug.cgi?id=83797

        Keep the keyName valid within scope of KeyEventInfo to avoid
        feeding key events with invalid keyName.

        Reviewed by Philippe Normand.

        * DumpRenderTree/efl/EventSender.cpp:
        (KeyEventInfo::KeyEventInfo):
        (KeyEventInfo):
        (keyPadNameFromJSValue):
        (keyNameFromJSValue):
        (createKeyEventInfo):
        (sendKeyDown):

2012-04-16  Andras Piroska  <pandras@inf.u-szeged.hu>

        [Qt] Replace QtXmlPatterns usage with libxslt dependency
        <https://bugs.webkit.org/show_bug.cgi?id=76820>

        Reviewed by Simon Hausmann.

        The features.prf file was modified, in order to use libxml and libxslt by default.
        This modification only work at Qt5.

        * qmake/config.tests/libxml2/libxml2.cpp: Added.
        (main):
        * qmake/config.tests/libxml2/libxml2.pro: Added.
        * qmake/config.tests/libxslt/libxslt.cpp: Added.
        (main):
        * qmake/config.tests/libxslt/libxslt.pro: Added.
        * qmake/mkspecs/features/features.prf:
        * qmake/sync.profile:

2012-04-16  Seokju Kwon  <seokju.kwon@samsung.com>

        [EFL] EWebLaucher : Fix wrong parameter order in function call for multiple windows.
        https://bugs.webkit.org/show_bug.cgi?id=83862

        Reviewed by Kenneth Rohde Christiansen.

        EWebLauncher creates multiple windows, like multiple tabs when pressing F9 key.
        It doesn't work properly because of wrong parameter order in function call.

        * EWebLauncher/main.c:

2012-04-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK gardening.

        * Scripts/run-gtk-tests:
        (TestRunner): Skip /webkit/atk/textChangedNotifications.

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

        Chromium perf bots should not build
        https://bugs.webkit.org/show_bug.cgi?id=83641

        Reviewed by Eric Seidel.

        Don't build on perf bots to improve the cycle time.

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

2012-04-14  Zalan Bujtas  <zbujtas@gmail.com>

        [WK2] Set WebKitTestRunner's WebProcess cache model to DocumentBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=81945

        Reviewed by Dan Bernstein.

        WebProcess's default cache model is DocumentViewer. When DocumentViewer model is on,
        the PageCache's capacity is set to 0. Tests that are enabling 'WebKitUsesPageCachePreferenceKey' expect
        PageCache to be functional.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2012-04-11  James Robinson  <jamesr@chromium.org>

        [chromium] Remove unused compositeToTexture / compositeOffscreen setting
        https://bugs.webkit.org/show_bug.cgi?id=83733

        Reviewed by Adrienne Walker.

        Remove compositeOffscreen / compositeToTexture setting. This was an experiment that is no longer needed.

        * 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):

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

        webkitpy build fix. Revert the debug change (number of runs was 2 instead of 20),
        and also rebaseline the test results since we ignore the first run now.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PageLoadingPerfTest.run):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPageLoadingPerfTest.test_run):

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

        Enable SVG page loading performance tests
        https://bugs.webkit.org/show_bug.cgi?id=83861

        Reviewed by Adam Barth.

        Add support for page loading tests. These are tests without any test running harnesses, and we use
        DriverOutput's test_timeout to measure the loading time.

        Extracted PerfTest.run and PerfTest.run_failed from PerfTestRunner._run_single_test.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest.run):
        (PerfTest):
        (PerfTest.run_failed):
        (PerfTest.parse_output):
        (PerfTest.output_statistics):
        (ChromiumStylePerfTest.parse_output):
        (PageLoadingPerfTest): Added.
        (PageLoadingPerfTest.__init__):
        (PageLoadingPerfTest.run): Run the driver 20 times to get the statistics for the loading time.
        * Scripts/webkitpy/performance_tests/perftest_unittest.py: Added.
        (MockPrinter):
        (MockPrinter.__init__):
        (MockPrinter.write):
        (MainTest):
        (MainTest.test_parse_output):
        (MainTest.test_parse_output_with_failing_line):
        (TestPageLoadingPerfTest):
        (TestPageLoadingPerfTest.assertWritten):
        (TestPageLoadingPerfTest.MockDriver):
        (TestPageLoadingPerfTest.MockDriver.__init__):
        (TestPageLoadingPerfTest.MockDriver.run_test):
        (TestPageLoadingPerfTest.test_run):
        (TestPageLoadingPerfTest.test_run_with_bad_output):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner._collect_tests._is_test_file): Now recognizes svg tests.
        (PerfTestsRunner._collect_tests):
        (PerfTestsRunner._run_tests_set):
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_collect_tests_with_page_load_svg):
        (test_collect_tests_with_page_load_svg.add_file):

2012-04-10  Brady Eidson  <beidson@apple.com>

        <rdar://problem/11176921> and https://bugs.webkit.org/show_bug.cgi?id=83600
        Need WebKit2 API to notify whether history loads are in the page cache

        Add a test ShouldGoToBackForwardListItem that exercises the new BundlePageLoaderClient
        callback as well as the new WKBundleBackForwardListItemIsInPageCache() API.

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2/ShouldGoToBackForwardListItem.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::willGoToBackForwardListItem):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/ShouldGoToBackForwardListItem_Bundle.cpp: Added.
        (ShouldGoToBackForwardListItemTest):
        (TestWebKitAPI::shouldGoToBackForwardListItemCallback):
        (TestWebKitAPI::ShouldGoToBackForwardListItemTest::ShouldGoToBackForwardListItemTest):
        (TestWebKitAPI::ShouldGoToBackForwardListItemTest::didCreatePage):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Update for the new client.

2012-04-13  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        Group EFL bots into a category on the buildbot master
        https://bugs.webkit.org/show_bug.cgi?id=82712

        Reviewed by Adam Roben.

        Creating a new category definition on the buildbot frontend.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (loadBuilderConfig): Determine category for EFL bots
        * BuildSlaveSupport/build.webkit.org-config/templates/root.html: Add links to EFL category

2012-04-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113714.
        http://trac.webkit.org/changeset/113714
        https://bugs.webkit.org/show_bug.cgi?id=83887

        It is behaving strange on the bots and needs more
        investigation. (Requested by jeez_ on #webkit).

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2012-04-11  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        webkit-tools-completion: Support bugzilla email completion for webkit-patch upload --cc
        https://bugs.webkit.org/show_bug.cgi?id=83690

        Reviewed by Tor Arne Vestbø.

        Typing part of an email and pressing <TAB> will bash-complete it using the list in
        Tools/Scripts/webkitpy/common/config/committers.py

        * Scripts/webkit-tools-completion.sh:

2012-04-13  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Add API for color chooser
        https://bugs.webkit.org/show_bug.cgi?id=83692

        Enables INPUT_TYPE_COLOR by default on the EFL port.

        Reviewed by Kenneth Rohde Christiansen.

        * Scripts/build-webkit:

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

        Extract PerfTest class from PerfTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=83847

        Reviewed by Hajime Morita.

        Extracted PerfTest and ChromiumStylePerfTest from PerfTestRunner. This class abstracts a test
        that was previously represented by a tuple.

        Also moved the logic to determine whether a given test is chromium style or not from run() to
        _collect_tests(). And moved the output parsing algorithms for parser style and chromium style
        tests from PerfTestRunner to PerfTest and ChromiumStylePerfTest respectively so that we may
        add new types of tests more easily.

        * Scripts/webkitpy/performance_tests/perftest.py: Added.
        (PerfTest):
        (PerfTest.__init__):
        (PerfTest.test_name):
        (PerfTest.dirname):
        (PerfTest.path_or_url):
        (PerfTest._should_ignore_line_in_parser_test_result):
        (PerfTest.parse_output):
        (ChromiumStylePerfTest):
        (ChromiumStylePerfTest.__init__):
        (ChromiumStylePerfTest.parse_output):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._collect_tests):
        (PerfTestsRunner.run):
        (PerfTestsRunner._run_tests_set):
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (run_test):
        (_tests_for_runner):
        (test_run_test_set_with_json_output):
        (test_run_test_set_with_json_source):
        (test_run_test_set_with_multiple_repositories):
        (_collect_tests_and_sort_test_name):
        (test_collect_tests):
        (test_collect_tests_with_skipped_list):

2012-04-12  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Fix WebKit1 build with V8
        https://bugs.webkit.org/show_bug.cgi?id=83322

        Reviewed by Adam Barth.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/features.prf:

2012-04-12  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy fails on metered_stream_unittest for non-US West Coast Time Zones
        https://bugs.webkit.org/show_bug.cgi?id=83583

        Reviewed by Philippe Normand

        Updated the unit test to ignore the hours and minutes of the
        localtime for time(0), since we can't easily guarantee which
        timezone we're in or what timezone rules were in effect on
        1/1/1970; this should be mostly fine since we can trust that
        time.localtime() will work, although there is the possibility
        that we'll screw up the time formatting of which field is the
        hours and which is the minutes.

        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (VerboseTest):
        (VerboseTest.test_basic):
        (VerboseTest.test_log_after_update):

2012-04-12  Dominik Rottsches  <dominik.rottsches@linux.intel.com>

        Add an EFL Debug Buildbot to the master configuration
        https://bugs.webkit.org/show_bug.cgi?id=82711

        Forgot to add EFL Linux Debug to scheduler.

        Reviewed by Philippe Normand.

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

2012-04-12  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        Add an EFL Debug Buildbot to the master configuration
        https://bugs.webkit.org/show_bug.cgi?id=82711

        Reviewed by Philippe Normand.

        Hooking up our EFL Linux 64bit debug configuration buildbot to the buildbot master.

        * BuildSlaveSupport/build.webkit.org-config/config.json: EFL Debug builder added

2012-04-12  George Staikos  <staikos@webkit.org>

        Enable the fullscreen API for BlackBerry.
        https://bugs.webkit.org/show_bug.cgi?id=83757

        Reviewed by Antonio Gomes.

        * Scripts/build-webkit:

2012-04-12  Simon Pena  <spena@igalia.com>

        [GTK] Test runner crashes without recent versions of pulseaudio-utils
        https://bugs.webkit.org/show_bug.cgi?id=83774

        Reviewed by Philippe Normand.

        Besides checking that pactl is available, check also that its output
        is the expected one, and handle gracefully when it isn't, when
        trying to unload pulseaudio modules.

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

2012-03-05  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Use QRawFont when building with Qt 5
        https://bugs.webkit.org/show_bug.cgi?id=78001

        Flip the QRawFont switch for Qt 5.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/features.prf:

2012-04-11  Vivek Galatage  <vivekgalatage@gmail.com>

        Web Inspector: Disabling Inspector causes build failure on Windows
        https://bugs.webkit.org/show_bug.cgi?id=83557

        Reviewed by Pavel Feldman.

        The calls to inspector APIs are not put under ENABLE(INSPECTOR) guard.
        This change brings all such API calls under the guard.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):

2012-04-11  Dirk Pranke  <dpranke@chromium.org>

        Fix regression introduced in r113927.

        Unreviewed, build fix.

        I failed to rename skipped_tests() to skipped_layout_tests()
        everywhere it needed to be renamed. The unit tests didn't catch
        this because the TestPort was one of the places that didn't get
        renamed :(.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.parse_expectations):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.skipped_layout_tests):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintExpectations._model):

2012-04-11  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests: 'webkit-patch skipped-ports' introduced bad layering
        https://bugs.webkit.org/show_bug.cgi?id=47528

        Reviewed by Adam Barth.

        The skipped-ports command has been replaced by 'webkit-patch
        print-expectations', which offers the equivalent functionality
        via 'webkit-patch print-expectations --platform \* -t skip'
        (and other features, of course).
        
        This also allows me to fix a nasty layering violation where the
        chromium port had to know about the TestExpectations objects in
        order to implement the command properly.

        Lastly, this allows me to rename skipped_tests() to
        skipped_layout_tests() to more consistent with
        skipped_perf_tests().
        
        This patch removes skips_layout_test() from the Port interface,
        because that can't be implemented without the port knowing about
        Expectations objects (and skipped-ports was the only thing using it).

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.skipped_layout_tests):
        (Port.skipped_perf_tests):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_default_configuration_notfound):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.test_expectations_overrides):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort.skipped_layout_tests):
        * Scripts/webkitpy/tool/commands/queries.py:
        (execute):
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (QueryCommandsTest.test_tree_status):

2012-04-11  Mark Rowe  <mrowe@apple.com>

        Remove a fprintf from LayoutTestController.

        This fprintf is causing 100+MB of data to be written to stderr during a single run of the tests.
        It was added for no apparent reason by Ryosuke in r113651.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::redirectionDestinationForURL):

2012-04-11  Nico Weber  <thakis@chromium.org>

        [mac] Suppress deprecation warning for GlobalToLocal in the carbon parts of the test plugin.
        https://bugs.webkit.org/show_bug.cgi?id=83709

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventCarbon):

2012-04-11  Rafael Brandao  <rafael.lobo@openbossa.org>

        Adding myself to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=83711

        Unreviewed update to committers.py.

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

2012-04-11  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] LayoutTestController needs implementation of pageProperty
        https://bugs.webkit.org/show_bug.cgi?id=82449

        Add missing implementation pageProperty to EFL's LayoutTestController
        in order to unskip printing/page-rule-selection.html

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::pageProperty):

2012-04-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113836.
        http://trac.webkit.org/changeset/113836
        https://bugs.webkit.org/show_bug.cgi?id=83705

        Broke all the WebKit2 inspector tests (Requested by andersca
        on #webkit).

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::showWebInspector):
        (WTR::LayoutTestController::closeWebInspector):
        (WTR::LayoutTestController::evaluateInWebInspector):
        (WTR::LayoutTestController::setJavaScriptProfilingEnabled):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):

2012-04-11  Vivek Galatage  <vivekgalatage@gmail.com>

        Web Inspector: Disabling Inspector causes build failure on Windows
        https://bugs.webkit.org/show_bug.cgi?id=83557

        Reviewed by Pavel Feldman.

        The calls to inspector APIs are not put under ENABLE(INSPECTOR) guard.
        This change brings all such API calls under the guard.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):

2012-04-11  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] Manage graphics buffers in the web process
        https://bugs.webkit.org/show_bug.cgi?id=78675
 
        Make graphics surface available only for Qt 5, attempting to fix
        the Qt-mac build.

        Unreviewed build fix.

        * qmake/mkspecs/features/features.prf:

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

        Unreviewed, GTK NRWT follow-up fix after r113849.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._unload_pulseaudio_module): Exit early if pactl is not found.

2012-04-11  Simon Pena  <spena@igalia.com>

        [GTK] media/event-attributes.html fails
        https://bugs.webkit.org/show_bug.cgi?id=71662

        Reviewed by Philippe Normand.

        PulseAudio's module "module-stream-restore" allows saving the volume
        of a stream, restoring it the next time it runs.
        This affects the tests, since DumpRenderTree's volume settings are
        saved between test runs, and tests relying on specific volume values
        would miss some volumeChange events (or get additional ones).

        This patch hooks on the existing GtkPort setup_test_run method and
        creates a new clean_up_test_run method, so PulseAudio's module is
        unloaded (if found) before running the tests, and restored (if it
        was there previously) after they finished, ensuring the tests run in
        the right environment.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._clean_up_run): Invoke the port implementation of
        clean_up_test_run.
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.clean_up_test_run): Add an empty implementation of
        clean_up_test_run.
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._unload_pulseaudio_module): Unloads the offending
        pulseaudio module, if found.
        (GtkPort):
        (GtkPort._restore_pulseaudio_module): Restores the offending
        pulseaudio module, if it was there previously.
        (GtkPort.setup_test_run): Calls _unload_pulseaudio_module.
        (GtkPort.clean_up_test_run): Calls _restore_pulseaudio_module.

2012-04-11  Andras Becsi  <andras.becsi@nokia.com>

        Fix the build with gcc 4.7.0
        https://bugs.webkit.org/show_bug.cgi?id=83584

        Reviewed by Alexey Proskuryakov.

        * qmake/mkspecs/features/unix/default_post.prf:
        The -fuse-ld=gold option is not supported with upstream gcc.

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

        Refactor PerfTestRunner to include file extensions in test names
        https://bugs.webkit.org/show_bug.cgi?id=83677

        Reviewed by Hajime Morita.

        Move the logic that extracts the test name from _process_parser_test_result to _collect_tests.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._collect_tests):
        (PerfTestsRunner._run_tests_set):
        (PerfTestsRunner._process_parser_test_result): Still replace "/" by ": " to keep the output format.
        We can make the said behavior change by simply removing "test_name = re.sub(r'\.\w+$', '', test_name)" here.
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (run_test):
        (_tests_for_runner):
        (test_run_test_set):
        (test_run_test_set_kills_drt_per_run):
        (test_run_test_pause_before_testing):
        (test_run_test_set_for_parser_tests):
        (test_collect_tests):
        (test_collect_tests_with_skipped_list):

2012-04-11  Vivek Galatage  <vivekgalatage@gmail.com>

        Web Inspector: Disabling Inspector causes build failure on Windows
        https://bugs.webkit.org/show_bug.cgi?id=83557

        Reviewed by Pavel Feldman.

        The calls to inspector APIs are not put under ENABLE(INSPECTOR) guard.
        This change brings all such API calls under the guard.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):

2012-04-10  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Using tkent+wkapi@ for ChromiumPublicApi notifications.

        * Scripts/webkitpy/common/config/watchlist:
        * Scripts/webkitpy/common/config/committers.py: Add tkent+wkapi@ to pass the style checker.

2012-04-10  Dirk Pranke  <dpranke@chromium.org>

        If NRWT gets killed halfway through a run, it incorrectly reports tests that weren't run as passes
        https://bugs.webkit.org/show_bug.cgi?id=82799

        Reviewed by Ojan Vafai.

        The tests we were skipping in _mark_interrupted_tests_as_skipped
        had incorrectly-constructed TestResults, and so they were not
        being treated as failures. The JSON generator doesn't record
        tests that are passed or skiped in incremental_results, so you
        couldn't tell these tests were being skipped at all.

        This change changes _mark_interrupted_tests_as_skipped() to
        treat the skipped tests as failures; this is arguably still
        incorrect but is minimally invasive for now. We probably need to
        revisit how we are uploading information about tests that are
        skipped and passed altogether in a separate change.

        This change also cleans up a couple of other nits that were
        unnecessary or broken in this same code path.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._mark_interrupted_tests_as_skipped):
        (Manager._upload_json_files): Deletes the check for
        chromium-mac-leopard (as it is no longer necessary).
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator.__init__): Here we were
        recalculating the failure type unnecessarily.
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (determine_result_type):
        (FailureEarlyExit): Adds a new failure type so we can tell what
        happened.
        (FailureEarlyExit.message):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_exit_after_n_failures_upload): Add more checks to
        ensure that we are recording the SKIP correctly; this is less
        than ideal, because we can't actually test the contents of
        incremental_results.json. We should fix that at some point.

2012-04-10  Dirk Pranke  <dpranke@chromium.org>

        make chromium layout tests not depend on platform/win, platform/mac-leopard, or platform/mac-snowleopard
        https://bugs.webkit.org/show_bug.cgi?id=83401

        Reviewed by Adam Barth.

        Last patch in the series - no longer look in mac-leopard,
        mac-snowleopard, or mac-lion.

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort):
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2012-04-10  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch: add a print-expectations command
        https://bugs.webkit.org/show_bug.cgi?id=83347

        Reviewed by Adam Barth.

        This command will print the expected results for a given set of
        tests on a given set of ports matching a given set of keywords.

        Example output (printing all the tests not expected to pass, and their
        expected results, on a Mac):

        $ webkit-patch print-expectations -x pass fast/html
        // For mac-snowleopard
        fast/html/details-open4.html = TEXT
        fast/html/details-open2.html = TEXT
        fast/html/details-no-summary4.html = TEXT
        fast/html/details-open-javascript.html = TEXT
        $

        You can also print full test-expectatons.txt lines using --full and a
        CSV-style report (which can be useful for post-processing) using --csv.

        It will replace the 'skipped-files' command (which will be
        removed in a subsequent patch) and is a more general (and
        cleaner and properly layered) solution.

        Also add an update() command to MockOptions() to make overriding keywords easier.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationSerializer.to_string):
        (TestExpectationSerializer):
        (TestExpectationSerializer.to_csv):
        (TestExpectationSerializer._format_result):
        (TestExpectationLine.create_passing_expectation):
        (TestExpectationsModel.get_test_set_for_keyword):
        (TestExpectationsModel.has_keyword):
        (TestExpectations.model):
        * Scripts/webkitpy/tool/commands/queries.py:
        (execute):
        (PrintExpectations):
        (PrintExpectations.__init__):
        (PrintExpectations.execute):
        (PrintExpectations._filter_tests):
        (PrintExpectations._format_lines):
        (PrintExpectations._model):
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (TestPrintExpectations): Added.
        * Scripts/webkitpy/tool/mocktool.py:
        (MockOptions):
        (MockOptions.__init__):
        (MockOptions.update): Added.

2012-04-10  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: refactor handling of --platform and related options
        https://bugs.webkit.org/show_bug.cgi?id=83525

        Reviewed by Adam Barth.

        This change moves to centralize handling of --platform, --debug,
        --gtk, and other similar flags into a central place next to the
        code that actually uses those flags in PortFactory to get the
        right Port object.

        * Scripts/webkitpy/layout_tests/port/__init__.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (port_options):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintBaselines.__init__):

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

        Add a chromeless view to the individual tests view
        https://bugs.webkit.org/show_bug.cgi?id=83541

        Reviewed by Daniel Bates.

        This is the view suitable to inlining in other contexts (e.g. garden-o-matic).

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (testHtmlForIndividualTestOnAllBuilders):
        (testHtmlForIndividualTestOnAllBuildersWithChromeNonexistant):
        (testHtmlForIndividualTestOnAllBuildersWithChrome):
        (testHtmlForIndividualTestOnAllBuildersWithChromeWebkitMaster):
        (testHtmlForIndividualTests):
        (htmlEscape):
        (runTests):

2012-04-10  Dirk Pranke  <dpranke@chromium.org>

        remove 'win' from chromium-win, chromium-linux fallback paths
        https://bugs.webkit.org/show_bug.cgi?id=83613

        Reviewed by Ojan Vafai.

        The chromium ports no longer need to look at the apple 'win'
        directory for baseline results.

        Also remove the old '-gpu-' entries from the flakiness dashboard
        map since I'm touching lines nearby.

        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort):
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2012-04-10  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] Manage graphics buffers in the web process
        https://bugs.webkit.org/show_bug.cgi?id=78675

        Enable graphics surfaces on Mac for Qt.

        Reviewed by Kenneth Rohde Christiansen.

        * qmake/mkspecs/features/features.prf:

2012-04-10  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Enable USE_FOLDERS property
        https://bugs.webkit.org/show_bug.cgi?id=83571

        Reviewed by Daniel Bates.

        Setting the FOLDER property on targets gives more structure
        to the generated Visual Studio solutions.
        This does not affect other CMake generators.

        * DumpRenderTree/efl/CMakeLists.txt:
        * EWebLauncher/CMakeLists.txt:
        * WinCELauncher/CMakeLists.txt:

2012-04-10  David Dorwin  <ddorwin@chromium.org>

        Add Encrypted Media Extensions methods to HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=82971

        Reviewed by Adam Barth.

        The extensions are behind the ENABLE(ENCRYPTED_MEDIA) feature define.
        Implementation is based on v0.1 of the draft proposal at
        http://dvcs.w3.org/hg/html-media/raw-file/tip/encrypted-media/encrypted-media.html.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2012-04-10  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][DRT] Catch the "title,changed" signal
        https://bugs.webkit.org/show_bug.cgi?id=82174

        Reviewed by Gustavo Noronha Silva.

        EFL's DumpRenderTree now catches the "title,changed" signal, and
        prints out the needed information.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onTitleChanged):

2012-04-10  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] DRT should support LayoutTestController's willSendRequestReturnsNull()
        https://bugs.webkit.org/show_bug.cgi?id=82443

        Reviewed by Philippe Normand.

        EFL's DRT needs to support LayoutTestController's
        willSendRequestReturnsNull() and return NULL when expected. This
        allows for several tests to be removed from the skip list.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onWillSendRequest):

2012-04-10  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] LayoutTestController needs implementation of addUserStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=82446

        Adding missing implementation addUserStyleSheet to EFL's LayoutTestController 
        so that we can unskip related tests from the skip list. 

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::addUserStyleSheet): Implemented.

2012-04-10  Philip Rogers  <pdr@google.com>

        Adding myself to committers.py!

        Unreviewed update to committers.py.

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

2012-04-10  Dinu Jacob  <dinu.jacob@nokia.com>

        [Qt][WK2] Title in MiniBrowser is not updated for a page with no title
        https://bugs.webkit.org/show_bug.cgi?id=82483

        Reviewed by Kenneth Rohde Christiansen.

        Set window title to default if there is no page title.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::onTitleChanged):
        * MiniBrowser/qt/BrowserWindow.h:
        (BrowserWindow):

2012-03-23  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] Implement PageClient::isViewWindowActive()
        https://bugs.webkit.org/show_bug.cgi?id=81143

        Reviewed by Kenneth Rohde Christiansen.

        Fix the WrapperWindow from our PlatformWebView
        so it correctly creates the platform related
        stuff for QWindow, which is not created unless
        QWindow::setVisible() or QWindow::show() are called.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2012-04-10  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] TestNetscapePlugin is broken
        https://bugs.webkit.org/show_bug.cgi?id=83024

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        Fix X11 availability check. embedded is always true with QPA.
        * Tools.pro:
        Build the test plugin if plugins are enabled for WebKit2.
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/functions.prf:
        Added a convenience function to determine availability
        of X11 libraries.

2012-04-10  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Fix build without precompiled header.

        * DumpRenderTree/cg/ImageDiffCG.cpp: Define max as max as we do for min.

2012-04-10  Arko Saha  <arko@motorola.com>

        Unreviewed: adding myself to committers.py.

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

2012-04-09  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        Unreviewed: adding myself to committers.py.

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

2012-04-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113656.
        http://trac.webkit.org/changeset/113656
        https://bugs.webkit.org/show_bug.cgi?id=83542

        test is broken on chromium-win (Requested by simonjam on
        #webkit).

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::dispatchIntent):

2012-04-09  Takashi Toyoshima  <toyoshim@chromium.org>

        Update pywebsocket to 0.7.4.
        https://bugs.webkit.org/show_bug.cgi?id=83461

        Reviewed by Kent Tamura.

        This version supports TLS by using ssl in addition to pyOpenSSL.
        Other functional difrerences from 0.7.2 are:
         - strict Sec-WebSocket-Key validation conforming RFC 4648
         - compression ratio logging in debug

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_pywebsocket):

2012-04-09  Dirk Pranke  <dpranke@chromium.org>

        add a webkit-patch print-baselines command
        https://bugs.webkit.org/show_bug.cgi?id=83348

        Reviewed by Adam Barth.

        This adds a simple 'print-baselines' command to webkit-patch
        that can be used in one of two forms: to print where the
        baselines for a given test (or set of tests) on a single port
        will be found, or to generate a report for multiple ports.

        Example of the former:

        $ webkit-patch print-baselines fast/html/keygen.html
        // For mac-snowleopard
        platform/mac/fast/html/keygen-expected.txt
        platform/mac/fast/html/keygen-expected.png
        $

        The latter is most useful for finding out which fallback dirs are
        used by which ports for which tests, for example,
        'chromium-mac-leopard' uses 100 results from 'platform/mac/leopard'.
        No example output is given because the reports are pretty wordy :).

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.baseline_extensions): Added.
        (Port.expected_baseline_dict): Added.
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintBaselines):
        (PrintBaselines.__init__):
        (PrintBaselines.execute):
        (PrintBaselines._print_baselines):
        (PrintBaselines._platform_for_path):

2012-04-09  Florin Malita  <fmalita@chromium.org>

        Unreviewed: adding myself to committers.py.

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

2012-04-09  Ming Xie  <mxie@rim.com>

        [BlackBerry] Allow simulator to use GLES2 acceleration
        https://bugs.webkit.org/show_bug.cgi?id=81672

        Reviewed by Rob Buis.

        * Scripts/webkitdirs.pm:
        (blackberryCMakeArguments):

2012-04-09  Dana Jansens  <danakj@chromium.org>

        Mark myself as a committer
        https://bugs.webkit.org/show_bug.cgi?id=83510

        Reviewed by Adrienne Walker.

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

2012-04-09  Dirk Pranke  <dpranke@chromium.org>

        nrwt is failing to upload test results on the chromium-mac-leopard bots
        https://bugs.webkit.org/show_bug.cgi?id=83230

        Unreviewed, build fix.

        It looks like the change in r113399 to use the per-request
        timeout variable didn't actually work, so I am removing the
        timeout code altogether and counting on the idea that upload
        just isn't likely to take that long and the timeouts and
        retransmits are largely unused and largely unnecessary. We'll
        see if this breaks anywhere else.

        * Scripts/webkitpy/common/net/file_uploader.py:
        (FileUploader.__init__):
        (FileUploader._upload_data.callback):
        (FileUploader):

2012-04-09  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Cleanup LayoutTestControllerBlackBerry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=83469

        Reviewed by Dirk Schulze.

        Remove WTF:: prefixes and fix a warning with the length variable.

        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        (jsStringRefToWebCoreString):
        (LayoutTestController::execCommand):
        (LayoutTestController::isCommandEnabled):
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::counterValueForElementById):
        (LayoutTestController::overridePreference):
        (LayoutTestController::setMockGeolocationError):
        (LayoutTestController::findString):

2012-04-09  Patrick Gansterer  <paroga@webkit.org>

        Build fix for WinCE after r113570.

        * Scripts/build-webkit: Do not use FastMalloc for WinCE.

2012-04-09  Eric Carlson  <eric.carlson@apple.com>

        Subscribe eric.carlson@apple.com to Media-related changes
        https://bugs.webkit.org/show_bug.cgi?id=83421

        Reviewed by Dan Bernstein.

        * Scripts/webkitpy/common/config/watchlist:

2012-04-09  Martin Robinson  <mrobinson@igalia.com>

        check-webkit-style should ignore NULL usage in gtk_style_context_get_style
        https://bugs.webkit.org/show_bug.cgi?id=83412

        Reviewed by David Levin.

        Accept NULL as an argument for gtk_style_context_get_style, because it's
        used as a sentinel in a variable argument list. 

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_null): Add an exception.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_null_false_zero): Add a test for the exception.

2012-04-09  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: use the filesystem object properly in fileuploader
        https://bugs.webkit.org/show_bug.cgi?id=83326

        Reviewed by Adam Barth.

        We should be using the filesystem object rather than the codecs
        object.

        * Scripts/webkitpy/common/net/file_uploader.py:
        (FileUploader.upload_as_multipart_form_data):

2012-04-09  Eric Seidel  <eric@webkit.org>

        Enable webkit_unit_tests for commit queue and EWS while tracking failures
        https://bugs.webkit.org/show_bug.cgi?id=83329

        Unreviewed.  Add a missing import to unbreak all the Chromium EWS/CQ bots. :)

        line 62, in _create_unit_test_results
         return UnitTestResults.results_from_string(results_xml)
         NameError: global name 'UnitTestResults' is not defined

        * Scripts/webkitpy/tool/bot/layouttestresultsreader.py:
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        (LayoutTestResultsReaderTest.test_create_unit_test_results):

2012-04-08  Adam Barth  <abarth@webkit.org>

        The port object is missing unit_tests_results_path
        https://bugs.webkit.org/show_bug.cgi?id=83448

        Unreviewed.

        This is causing the cr-linux-ews to throw an exception.

        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.unit_tests_results_path):

2012-04-07  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Cleanup WTF include directories
        https://bugs.webkit.org/show_bug.cgi?id=82716

        Reviewed by Eric Seidel.

        * DumpRenderTree/efl/CMakeLists.txt:
        * WinCELauncher/CMakeLists.txt:

2012-04-07  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Add Battery Status API support
        https://bugs.webkit.org/show_bug.cgi?id=82615

        Reviewed by George Staikos.

        Enable BATTERY_STATUS.

        * Scripts/build-webkit:

2012-04-06  Ami Fischman  <fischman@chromium.org>

        Subscribe feature-media-reviews@c.o to Media-related changes.
        https://bugs.webkit.org/show_bug.cgi?id=83397

        Reviewed by David Levin.

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

2012-04-06  Adrienne Walker  <enne@google.com>

        [chromium] Add virtual test suite for threaded compositing
        https://bugs.webkit.org/show_bug.cgi?id=82263

        Reviewed by James Robinson.

        Add compositing/visibility as a virtual test suites to test threaded
        compositing with. This is a reasonable smoke test of 9 tests, none of
        which have any expectations in the non-threaded case.

        To fix many of the remaining tests in this virtual test suite, there
        will need to be some serious refactoring to merge the conflict between
        the way CCScheduler wants to draw frames and the way DRT also wants to
        control things. So, in the short term, enable a few simple tests that
        are known to be passing.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.virtual_test_suites):

2012-04-06  Enrica Casucci  <enrica@apple.com>

        Provide Obj-C private API to simplify markup.
        https://bugs.webkit.org/show_bug.cgi?id=83334
        <rdar://problem/11033861>

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/SimplifyMarkup.mm: Added.
        (-[SimplifyMarkupTest webView:didFinishLoadForFrame:]):
        * TestWebKitAPI/Tests/mac/verboseMarkup.html: Added.

2012-04-06  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests: fix bugs in 'mock' drt implementation
        https://bugs.webkit.org/show_bug.cgi?id=83341

        Reviewed by Eric Seidel.

        The current implementation crashed in some circumstances for
        reference tests and files that were missing expected results.
        This patch fixes those cases and adds more unit tests; it is a
        precursor to adding unit tests each port that actually uses this
        code, in order to get better coverage of the port/*
        implementations.

        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        (parse_options):
        (MockDRT.input_from_line):
        (MockDRT.output_for_test):
        (MockDRT.run_one_test):
        (MockChromiumDRT.input_from_line):
        (MockChromiumDRT.output_for_test):
        (MockChromiumDRT.run_one_test):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTTest.make_input_output):
        (MockDRTTest.expected_output):
        (MockDRTTest):
        (MockDRTTest.assertTest):
        (MockDRTTest.test_missing_image):
        (MockDRTTest.test_missing_text):
        (MockDRTTest.test_reftest_match):
        (MockDRTTest.test_reftest_mismatch):
        (MockChromiumDRTTest.expected_output):

2012-04-06  James Robinson  <jamesr@chromium.org>

        Enable webkit_unit_tests for commit queue and EWS while tracking failures
        https://bugs.webkit.org/show_bug.cgi?id=83329

        Reviewed by Adam Barth.

        This adds a step to parse XML output from webkit_unit_tests and consider regressions in the PatchAnalysisTask so
        the commit queue and EWS can reject patches that cause regressions.

        * Scripts/webkitpy/common/config/ports.py:
        (ChromiumPort.run_webkit_unit_tests_command):
        * Scripts/webkitpy/common/config/ports_mock.py:
        (MockPort.unit_tests_results_path):
        * Scripts/webkitpy/common/net/layouttestresults.py:
        (LayoutTestResults.__init__):
        (LayoutTestResults.failing_tests):
        (LayoutTestResults):
        (LayoutTestResults.add_unit_test_failures):
        * Scripts/webkitpy/common/net/unittestresults.py: Copied from Tools/Scripts/webkitpy/tool/steps/runtests_unittest.py.
        (UnitTestResults):
        (UnitTestResults.results_from_string):
        * Scripts/webkitpy/common/net/unittestresults_unittest.py: Added.
        (UnitTestResultsTest):
        (UnitTestResultsTest.test_nostring):
        (UnitTestResultsTest.test_emptystring):
        (UnitTestResultsTest.test_nofailures):
        (test_onefailure):
        (test_multiple_failures_per_test):
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        (MockCommitQueue.test_results):
        (MockCommitQueue.archive_last_test_results):
        (FailingTestCommitQueue.test_results):
        (test_flaky_test_failure):
        (test_failed_archive):
        * Scripts/webkitpy/tool/bot/layouttestresultsreader.py:
        (LayoutTestResultsReader._create_unit_test_results):
        (LayoutTestResultsReader.results):
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        (LayoutTestResultsReaderTest.test_missing_layout_test_results):
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (PatchAnalysisTaskDelegate.test_results):
        (PatchAnalysisTaskDelegate.archive_last_test_results):
        (PatchAnalysisTask._test):
        (PatchAnalysisTask._build_and_test_without_patch):
        (PatchAnalysisTask._test_patch):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.test_results):
        (AbstractEarlyWarningSystem.archive_last_test_results):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSytemTest._test_testing_ews):
        * Scripts/webkitpy/tool/commands/queues.py:
        (CommitQueue.test_results):
        (CommitQueue.archive_last_test_results):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (CommitQueueTest.test_commit_queue):
        (test_rollout):
        (test_manual_reject_during_processing):
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        (RunTestsTest.test_webkit_run_unit_tests):

2012-04-06  Aaron Colwell  <acolwell@chromium.org>

        Enable MediaSource feature for DumpRenderTree so
        MediaSource LayoutTests will pass for Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=83053

        Reviewed by Dimitri Glazkov.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2012-04-06  George Staikos  <staikos@webkit.org>

        Turn on vibration support for BlackBerry.

        Reviewed by Rob Buis.

        * Scripts/build-webkit:

2012-04-06  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10912476> HiDPI: Have canvas use a hidpi backing store, but downsample upon access

        Reviewed by Sam Weinig.

        * Scripts/build-webkit: Added high-dpi-canvas option to control ENABLE_HIGH_DPI_CANVAS.

2012-04-05  Dirk Pranke  <dpranke@chromium.org>

        nrwt is failing to upload test results on the chromium-mac-leopard bots
        https://bugs.webkit.org/show_bug.cgi?id=83230

        Reviewed by Ojan Vafai.

        This should fix things properly; FileUploader() was setting the
        socket default timeout value, and apparently that doesn't work
        properly with urllib. Also, the class had a bad try/finally
        block that was causing the exceptions to be swallowed :(.

        * Scripts/webkitpy/common/net/file_uploader.py:
        (FileUploader.__init__):
        (FileUploader._upload_data.callback):
        (FileUploader):
        (FileUploader._upload_data):
        * Scripts/webkitpy/common/net/networktransaction.py:
        (NetworkTimeout.__str__):
        (NetworkTransaction.run):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGeneratorBase.upload_json_files):

2012-04-05  Patrick Gansterer  <paroga@webkit.org>

        [Qt] Correct <wtf/*.h> include paths.
        https://bugs.webkit.org/show_bug.cgi?id=83270

        Reviewed by Eric Seidel.

        Modify the #include declerations so that the
        wtf types are included using the full path.

        * WebKitTestRunner/qt/TestInvocationQt.cpp:

2012-04-05  Philippe Normand  <pnormand@igalia.com>

        gtk_unittest.GtkPortTest.test_get_crash_log failing on windows
        https://bugs.webkit.org/show_bug.cgi?id=83176

        Reviewed by Tony Chang.

        Refactored the test to use os.path.join() to specify the
        core_pattern value of the empty crash log mock.

        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        (GtkPortTest):
        (GtkPortTest.assertLinesEqual):
        (GtkPortTest.test_get_crash_log):
        (_mock_gdb_output):

2012-04-05  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Fix includes after QtDeclarative -> QtQML renaming
        https://bugs.webkit.org/show_bug.cgi?id=82195

        Relanding r112651, because Qt5 is updated everywhere.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::updateVisualMockTouchPoints):
        * MiniBrowser/qt/main.cpp:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        * qmake/mkspecs/features/unix/default_post.prf:

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

        [Qt] WK1/WK2 layout test results are diverging
        https://bugs.webkit.org/show_bug.cgi?id=82720

        The resolving of default font families was altered in Qt5.
        This directly affects the font picked by DRT for layout
        tests. Since we want to keep the Qt4 and Qt5 results in line,
        we can trick DRT in picking the same font as before for now.

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/qt/QtInitializeTestFonts.cpp:
        (WebKit::initializeTestFonts):

2012-04-05  Kinuko Yasuda  <kinuko@chromium.org>

        Expose DataTransferItem.getAsEntry() to allow users access dropped files as FileEntry
        https://bugs.webkit.org/show_bug.cgi?id=82592

        Reviewed by David Levin.

        Added filesystem hook support in EventSender.beginDragWithFiles() for DumpRenderTree.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::beginDragWithFiles):

2012-04-04  Tim Horton  <timothy_horton@apple.com>

        [mac] WKTR should always keep its windows offscreen
        https://bugs.webkit.org/show_bug.cgi?id=83244
        <rdar://problem/11188764>

        Reviewed by Simon Fraser.

        We don't want to allow windows onto the main display; intercept attempts to
        change WebKitTestRunnerWindow's frame origin and prevent it from happening.

        Also keep around and respond with a new "fake" origin, in case someone is
        expecting it to change (I couldn't find any tests that expected this, however).

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (-[WebKitTestRunnerWindow setFrameOrigin:]):
        (-[WebKitTestRunnerWindow setFrame:display:animate:]):
        (-[WebKitTestRunnerWindow setFrame:display:]):
        (-[WebKitTestRunnerWindow frame]):

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

        Fix typo introduced in r113271.

        Unreviewed, build fix.

        * Scripts/webkitpy/common/net/file_uploader.py:
        (FileUploader._upload_data.callback):
        (FileUploader):

2012-04-04  Scott Graham  <scottmg@google.com>

        [Chromium, DRT] Bounds check indices on gamepadController
        https://bugs.webkit.org/show_bug.cgi?id=83192

        Invalid test data would cause bad array accesses. Add simple checks to
        ignore such invalid data.

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/GamepadController.cpp:
        (GamepadController::connect):
        (GamepadController::disconnect):
        (GamepadController::setId):
        (GamepadController::setButtonCount):
        (GamepadController::setButtonData):
        (GamepadController::setAxisCount):
        (GamepadController::setAxisData):

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

        nrwt is failing to upload test results on the chromium-mac-leopard bots
        https://bugs.webkit.org/show_bug.cgi?id=83230

        Reviewed by Ojan Vafai.

        More debugging info and a possible fix - stop messing with the
        default network timeout, and don't swallow URLErrors.

        * Scripts/webkitpy/common/net/file_uploader.py:
        (FileUploader._upload_data):
        * Scripts/webkitpy/common/net/networktransaction.py:
        (NetworkTransaction.run):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGeneratorBase.upload_json_files):

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

        nrwt is failing to upload test results on the chromium-mac-leopard bots
        https://bugs.webkit.org/show_bug.cgi?id=83230

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/common/net/file_uploader.py:
        (FileUploader.__init__):
        (FileUploader._upload_data.callback):
        (FileUploader):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._upload_json_files):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGeneratorBase.upload_json_files):

2012-04-04  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        WKTR needs to implement layoutTestController.setPageVisibility()
        https://bugs.webkit.org/show_bug.cgi?id=69554

        Reviewed by Simon Fraser.

        This patch implements the layoutTestController.setPageVisibility
        so WKTR supports the Page Visibility API implementation by using InjectedBundle
        to set the visibility state directly to Page.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setPageVisibility):
        (WTR):
        (WTR::LayoutTestController::resetPageVisibility):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):

2012-04-04  Adam Barth  <abarth@webkit.org>

        [Chromium] TestWebKitAPI links in WebCore twice
        https://bugs.webkit.org/show_bug.cgi?id=83177

        Reviewed by Dimitri Glazkov.

        This is causing link errors in the Windows component build. This patch
        moves the dependencies a bit lower down in the dependency diagram in
        the hopes of removing the duplicate symbols.

        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2012-04-04  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][DRT] Catch the "resource,request,willsend" signal
        https://bugs.webkit.org/show_bug.cgi?id=82192

        Reviewed by Gustavo Noronha Silva.

        EFL's DumpRenderTree now catches the "resource,request,willsend"
        signal in order to implement the "Blocked access to external URL"
        behavior and avoid potential network-related timeouts in the tests.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::onWillSendRequest):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):

2012-04-04  Patrick Gansterer  <paroga@webkit.org>

        [EFL][DRT] Correct <wtf/*.h> include paths.
        https://bugs.webkit.org/show_bug.cgi?id=83168

        Reviewed by Eric Seidel.

        Modify the #include declarations so that the 
        wtf types are included using the full path.

        * DumpRenderTree/efl/DumpRenderTree.cpp:

2012-04-04  Philippe Normand  <pnormand@igalia.com>

        gtk_unittest.GtkPortTest.test_get_crash_log failing on windows
        https://bugs.webkit.org/show_bug.cgi?id=83176

        Reviewed by Tony Chang.

        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        (test_get_crash_log): Skip the test on non-linux platforms.

2012-04-04  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] DRT support for computedStyleIncludingVisitedInfo
        https://bugs.webkit.org/show_bug.cgi?id=82190

        Adding missing implementation computedStyleIncludingVisitedInfo to EFL's
        LayoutTestController so that we can unskip related tests from the skip list.

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::computedStyleIncludingVisitedInfo):

2012-04-04  Raphael Kubo da Costa  <rakuco@webkit.org>

        Unreviewed; update my email address once again in the committers
        and watch list.

        * Scripts/webkitpy/common/config/committers.py: Prefer my
        webkit.org email over my FreeBSD.org one.
        * Scripts/webkitpy/common/config/watchlist: Ditto.

2012-04-04  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] QtWebKit2 should support Page Visibility API
        https://bugs.webkit.org/show_bug.cgi?id=81164

        Reviewed by Kenneth Rohde Christiansen.

        Enabling Page Visiblity API for Qt WebKit2.

        * qmake/mkspecs/features/features.prf:

2012-04-04  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Make the WebView a subclass of Flickable
        https://bugs.webkit.org/show_bug.cgi?id=83033

        Reviewed by Kenneth Rohde Christiansen.

        Remove workaround in MiniBrowser and the ScrollIndicator
        now that the WebView is a Flickable.

        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/ScrollIndicator.qml:
        * WebKitTestRunner/Target.pri:

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

        REGRESSION(r113144): It made run-webkit-tests always fail
        https://bugs.webkit.org/show_bug.cgi?id=83142

        Unreviewed trivial fix after r113144.

        * Scripts/run-webkit-tests:

2012-04-03  Ryosuke Niwa  <rniwa@webkit.org>

        I really hope this is the last build fix. Apparently exec doesn't quite arguments with
        double quotations on Windows. Use system instead.

        Hopefully, this won't break anything.

        * Scripts/run-webkit-tests:

2012-04-03  Keishi Hattori  <keishi@webkit.org>

        Disable ENABLE_DATALIST for now
        https://bugs.webkit.org/show_bug.cgi?id=82871

        Reviewed by Kent Tamura.

        * Scripts/build-webkit: Disabled ENABLE_DATALIST.

2012-04-03  Ryosuke Niwa  <rniwa@webkit.org>

        Sigh... this isn't going well. I can't even reproduce this issue locally.
        Another speculative fix.

        * Scripts/run-webkit-tests:

2012-04-03  Ryosuke Niwa  <rniwa@webkit.org>

        I don't know why I'm so sloppy today. Another build fix.

        * Scripts/run-webkit-tests:

2012-04-03  Ryosuke Niwa  <rniwa@webkit.org>

        Hopefully the last build fix for Chromium Windows.

        Explicitly execute new-run-webkit-tests and old-run-webkit-tests by python and perl.

        * Scripts/run-webkit-tests:

2012-04-03  Dirk Pranke  <dpranke@chromium.org>

        [Chromium] Lots of timeouts causing Mac10.6 to exit early.
        https://bugs.webkit.org/show_bug.cgi?id=83076

        Unreviewed, build fix (slightly reviewed by Simon Fraser and Eric Seidel, but not approved).

        Add logic to the apple mac and chromium mac code to not use
        too many workers; it looks like the xserves (and possibly mac
        pros) count hyperthreaded cores when they really shouldn't and
        we end up using too many workers at a time; this leads to tests
        thrashing and timing out.

        This change is a temporary fix to make the bots happy while I
        look into more profiling and other fixes.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (ChromiumMacPort.default_child_processes):

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.default_child_processes):

2012-04-03  Simon Fraser  <simon.fraser@apple.com>

        WebKitTestRunner's EventSender is leaky
        https://bugs.webkit.org/show_bug.cgi?id=83099

        Reviewed by Beth Dakin.
        
        Fix leaks of WKNumbers by using the adoptWK idiom, and make
        all the code consistent.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::mouseDown):
        (WTR::EventSendingController::mouseUp):
        (WTR::EventSendingController::mouseMoveTo):
        (WTR::EventSendingController::leapForward):
        (WTR::EventSendingController::keyDown):
        (WTR::EventSendingController::mouseScrollBy):
        (WTR::EventSendingController::addTouchPoint):
        (WTR::EventSendingController::updateTouchPoint):
        (WTR::EventSendingController::setTouchModifier):
        (WTR::EventSendingController::releaseTouchPoint):
        (WTR::EventSendingController::cancelTouchPoint):

2012-04-03  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix. Don't use old-run-webkit-tests on Chromium Windows bots.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2012-04-03  Ryosuke Niwa  <rniwa@webkit.org>

        kill-old-processes should kill apache2 and httpd
        https://bugs.webkit.org/show_bug.cgi?id=83065

        Reviewed by Tony Chang.

        Kill apache2 and httpd on Mac and Linux (Windows uses lighttpd) to free up port 8000.

        * BuildSlaveSupport/kill-old-processes:

2012-04-03  Tony Chang  <tony@chromium.org>

        run the same test steps on test only bots as on build-and-test bots
        https://bugs.webkit.org/show_bug.cgi?id=83090

        Reviewed by Ryosuke Niwa.

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

2012-04-03  Ami Fischman  <fischman@chromium.org>

        Add a Media watchlist.
        https://bugs.webkit.org/show_bug.cgi?id=83071

        Reviewed by David Levin.

        * Scripts/webkitpy/common/config/watchlist:

2012-04-03  Simon Fraser  <simon.fraser@apple.com>

        Fix large leak in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=83084

        Reviewed by Beth Dakin.
        
        Fix a leak of the bimap backing store created when doing pixel and
        ref tests. This leak was causing serious thrash on the test bots.
        
        We don't need to allocate memory for CGBitmapContextCreate(); if we
        pass NULL, it will allocate and manage its own backing store.

        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::createCGContextFromImage):

2012-04-03  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix after r113067. Close the zipfile after extracting all files so that we can remove it.

        * BuildSlaveSupport/built-product-archive:
        (unzipArchive):

2012-04-03  Ojan Vafai  <ojan@chromium.org>

        Give more human friendly error message when builders fail to load or have stale data.
        https://bugs.webkit.org/show_bug.cgi?id=83058

        Reviewed by Eric Seidel.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (addError):
        (addBuilderLoadErrors):
        (handleLocationChange):
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2012-04-03  Ryosuke Niwa  <rniwa@webkit.org>

        Again, a build fix after r113067. Don't call r113067 twice on the configuration build directory.

        * BuildSlaveSupport/built-product-archive:
        (extractBuiltProduct):

2012-04-03  Ryosuke Niwa  <rniwa@webkit.org>

        Yet another build fix after r113067. Don't trigger Chromium testers right away
        since they're now triggered by builders.

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

2012-04-03  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix after r113067 for Mac port.
        It turned out that archiving the entire build directory doesn't work.

        * BuildSlaveSupport/built-product-archive:
        (createZipManually):
        (createZip):
        (archiveBuiltProduct):

2012-04-03  Mike Lattanzio  <mlattanzio@rim.com>

        [BlackBerry] Expose CaseSensitive, Wrap, and HighlightAllMatches in WebPage::findNextString()
        https://bugs.webkit.org/show_bug.cgi?id=82643

        Update LayoutTestController to accomodate the new find API.
        It now provides caseSensitive functionality to DRT.

        Internal Review by Andy Chen.

        Reviewed by Rob Buis.

        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        (LayoutTestController::findString):

2012-04-03  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix after r113067. CreateWebKitBuildDirectory step is no longer needed
        because download-built-product creates the build directory as needed.

        This step fails on Chromium Windows due to -p option not supported by Windows' native mkdir.

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

2012-04-03  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r113067. Don't delete the build directory.

        * BuildSlaveSupport/built-product-archive:
        (extractBuiltProduct):

2012-04-02  Ojan Vafai  <ojan@chromium.org>

        Load all builder lists from the buildbot json
        https://bugs.webkit.org/show_bug.cgi?id=82998

        Reviewed by Adam Barth.

        Also, remove an unnecessary list of test types. Now we don't hard-code
        builder names anywhere and we only have a single hard-coded list of
        test types.

        * TestResultServer/static-dashboards/builders.js:
        (BuilderMaster.prototype.logPath):
        (BuilderMaster.prototype.builderJsonPath):
        (requestBuilderList.xhr.onload):
        (requestBuilderList.xhr.onerror):
        (isChromiumDepsFyiGpuTestRunner):
        (isChromiumTipOfTreeGpuTestRunner):
        (isChromiumDepsGTestRunner):
        (isChromiumDepsCrosGTestRunner):
        (isChromiumTipOfTreeGTestRunner):
        (onBuilderListLoad):
        (loadBuildersList):
        * TestResultServer/static-dashboards/dashboard_base.js:
        (parseCrossDashboardParameters):
        (currentBuilderGroupCategory):
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (testHtmlForTestsWithExpectationsButNoFailures):
        (testGenerateChromiumTipOfTreeGpuBuildersFromBuilderList):
        (testGenerateChromiumDepsGTestBuildersFromBuilderList):
        (testGenerateChromiumDepsCrosGTestBuildersFromBuilderList):
        (testGenerateChromiumTipOfTreeGTestBuildersFromBuilderList):
        * TestResultServer/static-dashboards/timeline_explorer.html:

2012-04-02  Ryosuke Niwa  <rniwa@webkit.org>

        Chromium testers should extract builds instead of building on their own
        https://bugs.webkit.org/show_bug.cgi?id=82996

        Reviewed by Tony Chang.

        Make Chromium builders triggger Chromium testers and make testers download and extract builds
        from the buildbot master instead of building binaries on their own.

        Add download-built-product to wrap curl used in the download-built-product step since Windows
        does not provide "curl" natively.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add new triggerables for Chromium testers and make
        Chromium builders trigger them. Also change the type of Chromium testers from NewBuildAndTest to Test.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (DownloadBuiltProduct): Call download-built-product instead of curl.
        * BuildSlaveSupport/built-product-archive:
        (createZip): Don't zip the parent configuration build directory like "release" and "debug". While Mac port
        needs this behavior for compatibility reasons, Chromium Mac port doesn't want this behavior.
        (archiveBuiltProduct): Zip the configuration build directory on Mac port.
        (unzipArchive): Extracted. Use ditto on Mac, unzip on linux and cygwin, and zipfile package on Windows.
        (extractBuiltProduct): Refactor the code to use removeDirectoryIfExists and unzipArchive. Support Chromium.
        * BuildSlaveSupport/download-built-product: Added to wrap curl which isn't available on Windows.

2012-04-03  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Tools/Scripts/run-gtk-tests should not force you to use the WebKit jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=82473

        Reviewed by Philippe Normand.

        Only use jhbuild if WebKitBuild/Dependencies exists (if update-webkitgtk-libs)
        was ever run.

        * gtk/run-with-jhbuild: Instead of using jhbuild unconditionally, first
        check if the user has ever run update-gtk-libs and, if so, then use jhbuild.

2012-04-03  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] DRT support for setInteractiveFormValidationEnabled
        https://bugs.webkit.org/show_bug.cgi?id=82050

        Enable interactive form validation and unskip tests from the
        skip list.

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):

2012-04-03  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, another test-webkitpy fix-up after r113037.

        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py: Adapt mock
        crash dump depending on current environment.

2012-04-03  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, test-webkitpy build fix after r113037.

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

2012-04-03  Philippe Normand  <pnormand@igalia.com>

        [GTK] crash log reports support
        https://bugs.webkit.org/show_bug.cgi?id=81659

        Reviewed by Martin Robinson.

        Removed the daemontools crashmon/xvfb scripts and implemented the crash
        log reporting in the NRWT Gtk port. To get proper crash logs one
        needs to set the core pattern like this:
        echo "/path/to/cores/core-pid_%p-_-process_%e" > /proc/sys/kernel/core_pattern
        Then enable coredumps with "ulimit -c unlimited" and set the WEBKIT_CORE_DUMPS_DIRECTORY
        environment variable.

        * BuildSlaveSupport/gtk/README:
        * BuildSlaveSupport/gtk/crashmon/crashmon: Removed.
        * BuildSlaveSupport/gtk/crashmon/log/run: Removed.
        * BuildSlaveSupport/gtk/crashmon/run: Removed.
        * BuildSlaveSupport/gtk/daemontools-buildbot.conf:
        * BuildSlaveSupport/gtk/xvfb/log/run: Removed.
        * BuildSlaveSupport/gtk/xvfb/run: Removed.
        * Scripts/new-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkDriver.stop):
        (GtkPort.show_results_html_file):
        (GtkPort):
        (GtkPort._get_gdb_output):
        (GtkPort._get_crash_log):
        (GtkPort._get_crash_log.match_filename):
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        (GtkPortTest):
        (test_show_results_html_file):
        (assertLinesEqual):
        (_mock_gdb_output):
        (test_get_crash_log):

2012-04-02  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Enable and connect the WebInspectorServer with WebKit2 pages.
        https://bugs.webkit.org/show_bug.cgi?id=73094

        Reviewed by Simon Hausmann.

        Enable developer extras on pages in MiniBrowser for Qt.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-04-03  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] LayoutTestController needs implementation of setDefersLoading
        https://bugs.webkit.org/show_bug.cgi?id=82890

        Reviewed by Philippe Normand.

        Implement setDefersLoading() in EFL's LayoutTestController so that the
        corresponding test case can be removed from the skip list.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setDefersLoading):

2012-04-03  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] LayoutTestController needs implementation of goBack
        https://bugs.webkit.org/show_bug.cgi?id=81914

        Reviewed by Philippe Normand.

        Implement goBack() in EFL's LayoutTestController by calling
        ewk_frame_back().

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::goBack):

2012-04-03  Alexander Shalamov  <alexander.shalamov@intel.com>

        [EFL] LayoutTestController needs implementation of pageSizeAndMarginsInPixels
        https://bugs.webkit.org/show_bug.cgi?id=82589

        Add missing implementation for pageSizeAndMarginsInPixels to EFL's LayoutTestController
        in order to unskip printing/page-format-data.html

        Reviewed by Philippe Normand.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::pageSizeAndMarginsInPixels):

2012-04-03  Simon Pena  <spena@igalia.com>

        [GTK] DRT missing didRunInsecureContent notification
        https://bugs.webkit.org/show_bug.cgi?id=59367

        Reviewed by Philippe Normand.

        Connect DumpRenderTree to WebFrame's "insecure-content-run", in both
        the main WebFrame or any other WebFrame created later. Added
        "didRunInsecureContent" notification in the callback in order to
        get the LayoutTests passing.

        * DumpRenderTree/gtk/DumpRenderTree.cpp: Connect
        to WebFrame's "insecure-content-run" signal and add
        didRunInsecureContent notification in the callback to get the
        LayoutTests passing.
        (didRunInsecureContent):
        (createWebView):

2012-04-03  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        rebaseline-server: Make it possible to not launch a browser with the server.
        https://bugs.webkit.org/show_bug.cgi?id=82999

        Reviewed by Adam Barth.

        Add the `--no-show-results' option, which lets one decide not to
        launch a web browser when running the rebaseline server.  This is
        especially useful if the default browser is not the wanted one, or
        if the rebaseline server page is already open.

        * Scripts/webkitpy/tool/commands/abstractlocalservercommand.py:
        (AbstractLocalServerCommand.__init__):
        (AbstractLocalServerCommand.execute):

2012-04-02  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        EFL's LayoutTestController disableImageLoading implementation.
        https://bugs.webkit.org/show_bug.cgi?id=82848

        Reviewed by Hajime Morita.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::disableImageLoading):

2012-04-02  Alexander Shalamov  <alexander.shalamov@intel.com>

        [EFL] LayoutTestController needs implementation of isPageBoxVisible
        https://bugs.webkit.org/show_bug.cgi?id=82591

        Add missing implementation to isPageBoxVisible to EFL's LayoutTestController
        in order to unskip printing/page-format-data.html

        Reviewed by Hajime Morita.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::isPageBoxVisible):

2012-04-02  Simon Fraser  <simon.fraser@apple.com>

        run-webkit-tests with a relative --root causes tests to fail because DYLD_LIBRARY_PATH is not set
        https://bugs.webkit.org/show_bug.cgi?id=82962

        Reviewed by Dirk Pranke.

        Ensure that _build_path() returns an absolute path.

        Eric Seidel also had to deploy MockConfig in a bunch of places
        in order to correct previous testing errors where we were
        pretending that "Mock Output from child process" (returned by MockExecutive.run_command)
        was a real path.  The real Config object calls run_command("webkit-build-directory")
        to read the WebKit build directory from the webkitdirs.pm perl code.
        MockConfig abstracts this away and always returns "/mock-build" during
        testing.  This change is much larger than one would think necessary
        because of needing to deploy this MockConfig class.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._build_path):

2012-04-02  Ojan Vafai  <ojan@chromium.org>

        Fix snafu in r112971. We were never calling parseParameter for builder.

        * TestResultServer/static-dashboards/dashboard_base.js:

2012-04-02  Ojan Vafai  <ojan@chromium.org>

        Generate the lists of all layout test builders from the buildbot json
        https://bugs.webkit.org/show_bug.cgi?id=82924

        Reviewed by Mihai Parparita.

        In order to make this work, cleaned up a lot of existing technical debt.
        -Got rid of expectations builder. This concept is outdated and just dead code.
        -Split hash parameter parsing into two functions. One for dashboard_base
        (crossDashboardParameters) and one for the specific dashboard html file
        (dashboardSpecificParameters). In the old world, parseParameters needed to
        be called twice and depended on it's own output the first time through.
        Now we only need to parse crossDashboardParameters first and crossDashboardParameters
        doesn't depend on the output of crossDashboardParameters.
        -Lots of variable/method renames due to the above.
        -g_defaultDashboardSpecificStateValues now has to list all possible hash parameters
        for that dashboard.

        * TestResultServer/static-dashboards/aggregate_results.html:
        * TestResultServer/static-dashboards/builders.js:
        (BuilderGroup):
        (BuilderGroup.prototype.setup):
        (jsonRequest.xhr.onload):
        (jsonRequest.xhr.onerror):
        (isWebkitTestRunner):
        (isChromiumWebkitTipOfTreeTestRunner):
        (isChromiumWebkitDepsTestRunner):
        (generateBuildersFromBuilderList):
        (onLayoutTestBuilderListLoad):
        (onErrorLoadingBuilderList):
        (loadBuildersList):
        * TestResultServer/static-dashboards/dashboard_base.js:
        (handleValidHashParameterWrapper):
        (queryHashAsMap):
        (parseParameter):
        (parseCrossDashboardParameters):
        (parseDashboardSpecificParameters):
        (parseParameters):
        (diffStates):
        (defaultValue):
        (isLayoutTestResults):
        (isGPUTestResults):
        (currentBuilderGroupCategory):
        (currentBuilderGroup):
        (initBuilders):
        Now that we've split parameter parseing, these methods no longer need
        to take an optional state. They can always just use the global cross-dashboard state.

        (pathToBuilderResultsFile):
        (appendJSONScriptElementFor):
        (appendJSONScriptElements):
        (handleResourceLoadError):
        (haveJsonFilesLoaded):
        (combinedDashboardState):
        (setQueryParameter):
        (permaLinkURLHash):
        (toggleQueryParameter):
        (queryParameterValue):
        (selectHTML):
        (htmlForTestTypeSwitcher):
        (g_handleBuildersListLoaded):
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (testPlatformAndBuildType):
        (testSubstringList):
        (testHtmlForTestTypeSwitcherGroup):
        (testLookupVirtualTestSuite):
        (testBaseTest):
        (generateBuildersFromBuilderListHelper):
        (testGenerateChromiumWebkitTipOfTreeBuildersFromBuilderList):
        (testGenerateChromiumWebkitDepsBuildersFromBuilderList):
        (assertObjectsDeepEqual):
        (testQueryHashAsMap):
        (testDiffStates):
        * TestResultServer/static-dashboards/timeline_explorer.html:
        * TestResultServer/static-dashboards/treemap.html:

2012-04-02  Tony Chang  <tony@chromium.org>

        check-webkit-style errors when removing .png files
        https://bugs.webkit.org/show_bug.cgi?id=82933

        Reviewed by David Levin.

        * Scripts/webkitpy/style/patchreader.py:
        (PatchReader.check): Make sure the file exists and pass in a FileSystem() object (for mocking).
        * Scripts/webkitpy/style/patchreader_unittest.py:
        (test_check_patch_with_png_deletion):

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

        Unreviewed, rolling out r112948.
        http://trac.webkit.org/changeset/112948
        https://bugs.webkit.org/show_bug.cgi?id=82961

        Someone else already checked in a similar change (Requested by
        sundiamonde on #webkit).

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver._start):

2012-04-02  Adam Barth  <abarth@webkit.org>

        garden-o-matic isn't able to rebaseline audio failures
        https://bugs.webkit.org/show_bug.cgi?id=82957

        Reviewed by Chris Rogers.

        This patch just adds "wav" to the list of test suffixes and updates the
        unit tests to show that we're rebaselining audio tests results now too.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_rebaseline_updates_expectations_file):

2012-04-02  Adam Barth  <abarth@webkit.org>

        garden-o-matic should let you listen to audio failures
        https://bugs.webkit.org/show_bug.cgi?id=82953

        Reviewed by Chris Rogers.

        Now that we've actually got an audio failure on the bots, we can clean
        up the last stray bugs.  This patch doesn't have any tests because I'm
        lame.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        (.):

2012-04-02  Stephanie Lewis  <slewis@apple.com>

        run-webkit-tests --root fails if /usr/local/lib/libWebCoreTestSupport.dylib is not installed.
        https://bugs.webkit.org/show_bug.cgi?id=82552

        Reviewed by Dirk Pranke.

        Use DYLD_LIBRARY_PATH so we pick up the libWebCoreTestSupport.dylib located in the root.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver._start):

2012-04-02  Dirk Pranke  <dpranke@chromium.org>

        NRWT is not printing out the builder it's uploading JSON files for
        https://bugs.webkit.org/show_bug.cgi?id=82834

        Reviewed by Ojan Vafai.

        Handle log messages of the form log.info("%s", arg) properly ...
        I didn't even know you could do that :).

        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (_LogHandler.emit):
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (RegularTest.test_log_args):
        (VerboseTest.test_log_args):

2012-04-02  Tim Horton  <timothy_horton@apple.com>

        [mac] LayoutTestHelper crashes if there is no main display
        https://bugs.webkit.org/show_bug.cgi?id=82944
        <rdar://problem/11162954>

        Reviewed by Simon Fraser.

        If there's no main display attached, ColorSyncDeviceCopyDeviceInfo returns
        a null dictionary, so we shouldn't go ahead and try to read from it.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (installLayoutTestColorProfile):

2012-04-02  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Set up plugin process on Unix
        https://bugs.webkit.org/show_bug.cgi?id=72121

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/features.prf: Reenable plugins
        and turn on plugin process.

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

        Unreviewed, rolling out r112868, r112879, and r112881.
        http://trac.webkit.org/changeset/112868
        http://trac.webkit.org/changeset/112879
        http://trac.webkit.org/changeset/112881
        https://bugs.webkit.org/show_bug.cgi?id=82901

        "Build fail on bots." (Requested by kbalazs on #webkit).

        * MiniBrowser/gtk/GNUmakefile.am:
        * qmake/mkspecs/features/features.prf:

2012-04-02  Philippe Normand  <pnormand@igalia.com>

        [GTK] Enable shadow-dom in build-webkit.

        Rubber-stamped by Gustavo Noronha Silva.

        * Scripts/build-webkit: Enable shadow-dom build, this is need to
        have a working build currently.

2012-04-02  Andreas Kling  <kling@webkit.org>

        Adding Zalan Bujtas to committers list.

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

2012-04-02  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Set up plugin process on Unix
        https://bugs.webkit.org/show_bug.cgi?id=72121

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/features.prf: Reenable plugins
        and turn on plugin process.

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

        Unreviewed, rolling out r112651.
        http://trac.webkit.org/changeset/112651
        https://bugs.webkit.org/show_bug.cgi?id=82887

        It doesn't work with older Qt5 (Requested by Ossy on #webkit).

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::updateVisualMockTouchPoints):
        * MiniBrowser/qt/main.cpp:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        * qmake/mkspecs/features/unix/default_post.prf:

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

        [GTK] Fix names of failed unit tests in Tools/Scripts/run-gtk-tests
        https://bugs.webkit.org/show_bug.cgi?id=82877

        Reviewed by Philippe Normand.

        * Scripts/run-gtk-tests:
        (TestRunner.run_tests): Use replace instead of lstrip to remove
        the programs_path from the full path of unit tests.

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

        Unreviewed. Skip flaky unit tests.

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

2012-04-02  Ryosuke Niwa  <rniwa@webkit.org>

        webkitpy rebaseline.

        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_test_set_with_json_output):
        (test_run_test_set_with_json_source):

2012-04-01  Ryosuke Niwa  <rniwa@webkit.org>

        perf-o-matic should store test results' units
        https://bugs.webkit.org/show_bug.cgi?id=82852

        Reviewed by Kentaro Hara.

        Include units in the results JSON.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._process_chromium_style_test_result):
        (PerfTestsRunner._process_parser_test_result):

2012-04-01  Tony Tseung  <tseung@apple.com>

        Composite Font References is a new established standard (ISO/IEC 14496-28:2012) for specifying
        composite fonts from existing physical fonts.
        <rdar://problem/10717370>
        https://bugs.webkit.org/show_bug.cgi?id=82810
            
        A new test font of this kind as been added to the test tools for running the webkit-tests

        Reviewed by Dan Bernstein.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Added new dependency SampleFont.sfont
        
        * DumpRenderTree/fonts/SampleFont.sfont: Added.
        
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        Added the Composite Font Referene sample font "Hiragino Maru Gothic Monospaced" entry to the fonts white-list
        
        (activateTestingFonts):
        Added the registration of the Composite Font Referene sample font
        
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:
        (WTR::allowedFontFamilySet):
        Added the Composite Font Referene sample font "Hiragino Maru Gothic Monospaced" entry to the fonts white-list

        (WTR::activateFonts):
        Added the registration of the Composite Font Referene sample font

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        Added new dependency SampleFont.sfont

        * WebKitTestRunner/fonts/SampleFont.sfont: Added.

2012-04-01  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Support the Network Information API
        https://bugs.webkit.org/show_bug.cgi?id=73528

        Reviewed by Adam Barth.

        Add network information API feature to build script.

        * Scripts/build-webkit:

2012-03-31  Ojan Vafai  <ojan@chromium.org>

        Generate the flakiness dashboard's list of webkit.org builders from the buildbot JSON
        https://bugs.webkit.org/show_bug.cgi?id=82839

        Reviewed by Adam Barth.

        Also, update various hard-coded lists for WIN7 and Lion ports.
        This is necessary since the new list of builders grabbed off the
        buildbot includes Lion.

        * TestResultServer/static-dashboards/builders.js:
        (generateWebkitBuildersFromBuilderList):
        (xhr.onreadystatechange):
        Don't use dashboard_base's request method to avoid layering violation.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (parseParameters):
        (initBuilders):
        (haveJsonFilesLoaded):
        (g_handleBuildersListLoaded):
        Block loading the JSON files for each builder until we actually have a list of builders.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (testPlatformAndBuildType):
        (testGenerateWebkitBuildersFromBuilderList):
        * TestResultServer/static-dashboards/timeline_explorer.html:
        * TestResultServer/static-dashboards/treemap.html:
        Delay generating the page until the builder list has loaded.

2012-03-31  Ojan Vafai  <ojan@chromium.org>

        If NRWT gets killed halfway through a run, it incorrectly reports tests that weren't run as passes
        https://bugs.webkit.org/show_bug.cgi?id=82799

        Reviewed by Eric Seidel.

        If we don't run a test, mark it as skipped.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._mark_interrupted_tests_as_skipped):
        (Manager._interrupt_if_at_failure_limits.interrupt_if_at_failure_limit):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_interrupt_if_at_failure_limits):

2012-03-31  Ryosuke Niwa  <rniwa@webkit.org>

        One more build fix after r112781 for Chromium Windows.
        Don't copy zip .idb files.

        * BuildSlaveSupport/built-product-archive:
        (copyBuildFiles):

2012-03-31  Ryosuke Niwa  <rniwa@webkit.org>

        Yet another build fix after r112781 for Chromium Windows.
        Run webkit-build-directory by perl explicitly.

        * BuildSlaveSupport/built-product-archive:
        (determineWebKitBuildDirectory):

2012-03-31  Ryosuke Niwa  <rniwa@webkit.org>

        Fix the syntax error in master.cfg after r112734.

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

2012-03-31  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix after r112781.

        * BuildSlaveSupport/built-product-archive:
        (createZip):

2012-03-31  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r112781.

        * BuildSlaveSupport/built-product-archive:
        (createZipManually):
        (createZip):

2012-03-30  Ryosuke Niwa  <rniwa@webkit.org>

        Chromium bots should upload archived built files
        https://bugs.webkit.org/show_bug.cgi?id=82666

        Reviewed by Tony Chang.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/built-product-archive:
        (main):
        (determineWebKitBuildDirectory): Instead of hard-coding WebKitBuild as the build outout directory,
        call out to webkit-build-directory.
        (removeDirectoryIfExists): Extracted.
        (copyBuildFiles): Added to avoid archiving useless intermedinate files.
        (createZipManually): Used in Chromium Windows where we don't execute python scripts inside cygwin.
        (createZipManually.addToArchive):
        (createZip): Extracted. Calls out to appropraite command line scripts or createZipManually.
        (archiveBuiltProduct): Add support for Chromium port.
        * Scripts/webkit-build-directory: Add support for --platform options.

2012-03-30  Dan Bernstein  <mitz@apple.com>

        Reverted r112767, because it caused many vertical text tests to fail.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/fonts/SampleFont.sfont: Removed.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        (activateTestingFonts):
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:
        (WTR::allowedFontFamilySet):
        (WTR::activateFonts):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/fonts/SampleFont.sfont: Removed.

2012-03-30  Malcolm MacLeod  <malcolm.macleod@tshwanedje.com>

        [wx] Move wxWebKit API into WebKit namespace.
        https://bugs.webkit.org/show_bug.cgi?id=82740

        Reviewed by Kevin Ollivier.

        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (LayoutWebViewEventHandler::LayoutWebViewEventHandler):
        (LayoutWebViewEventHandler::bindEvents):
        (LayoutWebViewEventHandler::OnLoadEvent):
        (LayoutWebViewEventHandler::OnAlertEvent):
        (LayoutWebViewEventHandler::OnConfirmEvent):
        (LayoutWebViewEventHandler::OnPromptEvent):
        (LayoutWebViewEventHandler::OnConsoleMessageEvent):
        (LayoutWebViewEventHandler::OnReceivedTitleEvent):
        (LayoutWebViewEventHandler::OnWindowObjectClearedEvent):
        (LayoutWebViewEventHandler):
        (dumpFramesAsText):
        (dump):
        (MyApp::OnInit):
        * wx/browser/browser.cpp:
        (MyApp::OnInit):

2012-03-30  Eli Fidler  <efidler@rim.com>

        Enable OpenType Sanitizer for BlackBerry port.
        https://bugs.webkit.org/show_bug.cgi?id=82782

        Reviewed by Eric Seidel.

        * Scripts/webkitdirs.pm:
        (blackberryCMakeArguments): add OTS to include path

2012-03-30  Simon Fraser  <simon.fraser@apple.com>

        run-webkit-tests needs to set DYLD_LIBRARY_PATH as well
        as DYLD_FRAMEWORK_PATH, so that libWebCoreTestSupport.dylib
        is found.

        <rdar://problem/11158581>
        
        Reviewed by Mark Rowe.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver._start):

2012-03-30  Simon Fraser  <simon.fraser@apple.com>

        Disable run-api-tests on release mac builds
        https://bugs.webkit.org/show_bug.cgi?id=82788

        Reviewed by Ryosuke Niwa.
        
        TestWebKitAPI crashes every time in release builds currently
        (https://bugs.webkit.org/show_bug.cgi?id=82652) so disable
        run-api-tests on mac release builders.

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

2012-03-30  Chang Shu  <cshu@webkit.org>

        Unreviewed. Update my email.

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

2012-03-30  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash at WebCore::renderObjectContainsPosition(WebCore::RenderObject*, WebCore::Position const&)
        https://bugs.webkit.org/show_bug.cgi?id=82745

        Reviewed by Simon Fraser.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (rangeForPositionCallback):
        (AccessibilityUIElement::rangeForPosition):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::rangeForPosition):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::rangeForPosition):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::rangeForPosition):
        (WTR):

2012-03-30  David Barr  <davidbarr@chromium.org>

        Split up top-level .gitignore and .gitattributes
        https://bugs.webkit.org/show_bug.cgi?id=82687

        Reviewed by Tor Arne Vestbø.

        * .gitattributes: Added.
        * .gitignore: Added.
        * DumpRenderTree/DumpRenderTree.gyp/.gitignore: Added.
        * TestWebKitAPI/TestWebKitAPI.gyp/.gitignore: Added.

2012-03-30  Mihai Parparita  <mihaip@chromium.org>

        Actually remove the ChromiumOS GTK builder, like r112673 said it would.

        * TestResultServer/static-dashboards/builders.js:

2012-03-30  Mihai Parparita  <mihaip@chromium.org>

        Update ChromiumOS bot names in builders.js to reflect changes made by
        http://crrev.com/129835
        
        Also removes the ChromiumOS GTK builder, which was removed by
        http://crrev.com/129835

        * TestResultServer/static-dashboards/builders.js:

2012-03-30  Vineet Chaudhary  <rgf748@motorola.com>

        [GTK] Disable introspection build in the at-spi2-core module.
        https://bugs.webkit.org/show_bug.cgi?id=82729

        Reviewed by Philippe Normand.

        This change is a follow-up of bug 82395 which initially disabled for other modules of the set.

        * gtk/jhbuild.modules: Disable introspection.

2012-03-30  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Add a "preview" state to Page Visibility API implementation
        https://bugs.webkit.org/show_bug.cgi?id=81355

        Reviewed by Adam Barth.

        Updating the Page Visibility API implementation to the current spec version.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setPageVisibility):

2012-03-30  Keishi Hattori  <keishi@webkit.org>

        Change ENABLE_INPUT_COLOR to ENABLE_INPUT_TYPE_COLOR and enable it for chromium
        https://bugs.webkit.org/show_bug.cgi?id=80972

        Reviewed by Kent Tamura.

        * Scripts/build-webkit:
        * qmake/mkspecs/features/features.prf:

2012-03-29  Ádám Kallai  <kadam@inf.u-szeged.hu>

        [Qt] Build fix by renameing QtDeclarative to QtQml in header calls.
        https://bugs.webkit.org/show_bug.cgi?id=82195

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::updateVisualMockTouchPoints):
        * MiniBrowser/qt/main.cpp:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        * qmake/mkspecs/features/unix/default_post.prf:

2012-03-30  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] Implement LayoutTestController::setMinimumTimerInterval
        https://bugs.webkit.org/show_bug.cgi?id=81220

        Add missing implementation setMinimumTimerInterval to EFL's
        LayoutTestController so that we can unskip related tests from the skip list.

        Reviewed by Philippe Normand.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setMinimumTimerInterval):

2012-03-29  Dan Bernstein  <mitz@apple.com>

        Removed “Intel” from the Lion builders’ names.

        Rubber-stamped by Mark Rowe.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.js:
        (LeaksViewer._displayURLPrompt):

2012-03-29  Mihai Parparita  <mihaip@chromium.org>

        [Chromium] Add sharded ChromiumOS debug bots to builders.js
        https://bugs.webkit.org/show_bug.cgi?id=82639

        Reviewed by Eric Seidel.

        The bots were sharded by http://crrev.com/129613, update builders.js
        to reflect this.

        * TestResultServer/static-dashboards/builders.js:

2012-03-29  Dirk Pranke  <dpranke@chromium.org>

        remove support for junit-style xml output from test-webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=82279

        Reviewed by Eric Seidel.

        This was added when we were looking into integrating w/ Jenkins
        rather than buildbot, but I believe that project got shelved, so
        this is unused. We can always add it back in later as necessary.

        * Scripts/webkitpy/test/main.py:
        (Tester._parse_args):
        (Tester._run_tests):
        * Scritps/webkitpy/thirdparty/__init__.py:

2012-03-29  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests: crashes when it fails to decode a stack trace
        https://bugs.webkit.org/show_bug.cgi?id=82673

        Unreviewed, build fix.

        We are assuming the stdout/stderr output from the driver is utf-8
        encoded when we get stack traces; this may not be a valid
        assumption generally, but if we do get strings that aren't valid
        utf-8, we would crash. Now we will ignore any decoding errors.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_get_crash_log):

2012-03-29  Simon Fraser  <simon.fraser@apple.com>

        Scripts fail to detect when a tool crashes
        https://bugs.webkit.org/show_bug.cgi?id=82659

        Reviewed by Mark Rowe.
        
        Have exitStatus() detect when the process fail to exit cleanly
        (possibly because of a crash), and return a non-zero exit code
        in that case.

        * Scripts/VCSUtils.pm:
        (exitStatus):

2012-03-29  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        [GTK][EFL] run-javascriptcore-tests should be run through jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=82581

        Reviewed by Martin Robinson.

        Running Javascriptcore tests through jhbuild
        for consistency with run-webkit-tests and in order to
        avoid confusing libraries when facing regressions.

        * Scripts/run-javascriptcore-tests:

2012-03-29  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: add --timing
        https://bugs.webkit.org/show_bug.cgi?id=82550

        Reviewed by Eric Seidel.

        This patch adds a --timing option that will display the time
        each test takes. It also removes the --silent option, since
        probably no one ever used it, and cleans up the logging
        option parsing code to be easier to follow.

        * Scripts/webkitpy/test/main.py:
        (Tester._parse_args):
        (Tester._configure):
        * Scripts/webkitpy/test/runner.py:
        (TestRunner.write_result):
        * Scripts/webkitpy/test/runner_unittest.py:
        (RunnerTest.test_regular):
        (RunnerTest.test_verbose):
        (RunnerTest):
        (RunnerTest.test_timing):

2012-03-29  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        HashMap<>::add should return a more descriptive object
        https://bugs.webkit.org/show_bug.cgi?id=71063

        Reviewed by Ryosuke Niwa.

        Update code to use AddResult instead of a pair.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::evaluateScriptInIsolatedWorld):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::evaluateScriptInIsolatedWorld):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::evaluateScriptInIsolatedWorld):

2012-03-29  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: chromium: DRT --no-timeout option doesn't work.
        https://bugs.webkit.org/show_bug.cgi?id=82608

        Initial value for m_timeout was initialized in constructor and was overwritten in DRT::main.
        This was broken by r112354 and the sequence became opposite.

        Reviewed by Yury Semikhatsky.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::initialize):

2012-03-29  Vineet Chaudhary  <rgf748@motorola.com>

        Remove custom bindings form Internals.idl of attribute type Array.
        https://bugs.webkit.org/show_bug.cgi?id=82319

        Reviewed by Kentaro Hara.

        Remove JSInternalsCustom.cpp and V8InternalsCustom.cpp as no longer required.

        * GNUmakefile.am:

2012-03-28  Mark Rowe  <mrowe@apple.com>

        Fix --no-saved-state.

        Ignore the flag before Lion, rather than making it specific to Lion.

        Rubber-stamped by Dan Bernstein.

        * Scripts/webkitdirs.pm:
        (argumentsForRunAndDebugMacWebKitApp):

2012-03-28  Dave Tharp  <dtharp@codeaurora.org>

        Add dtharp to contributors list
        https://bugs.webkit.org/show_bug.cgi?id=82545

        Reviewed by Adam Barth.

        Adding dtharp as Contributor.

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

2012-03-28  Stuart Eichert  <stuart.eichert@palm.com>

        build-webkit : the word "pass" is spelled incorrectly as "passs"
        https://bugs.webkit.org/show_bug.cgi?id=82532

        Reviewed by Julien Chaffraix.

        Corrected spelling of the word "pass" in build-webkit.

        * Scripts/build-webkit:

2012-03-28  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests doesn't log correctly after retrying failures
        https://bugs.webkit.org/show_bug.cgi?id=82541

        Unreviewed, build fix.

        r112189 introduced a regression where we would accidentally
        delete the log handler after we retried any failing tests - that
        meant that any log messages around uploading the results got
        dropped.

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

2012-03-28  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Build fix, move WTF back into JSCore target
        until issues with JSCore not linking in all WTF symbols are resolved.

        * waf/build/settings.py:

2012-03-28  Simon Fraser  <simon.fraser@apple.com>

        download-built-product build step should detect 404 errors
        https://bugs.webkit.org/show_bug.cgi?id=82491

        Reviewed by Ryosuke Niwa.
        
        Pass --fail to curl so that it reports 404 errors.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (DownloadBuiltProduct): Pass --fail to curl so that it reports errors.
        * BuildSlaveSupport/built-product-archive:
        (extractBuiltProduct): Remove trailing whitespace.

2012-03-28  Dirk Pranke  <dpranke@chromium.org>

        flakiness dashboard should only keep the last 500 runs
        https://bugs.webkit.org/show_bug.cgi?id=82530

        Reviewed by Ojan Vafai.

        If a bot has an overly large amount of failing tests, then
        storing 750 runs' worth takes a lot of memory and CPU time to
        process and we end up getting killed by AppEngine; this cases
        data corruption and confusion down the road when we have to
        retry the upload of the data and the tests show up as multiple
        runs.

        * TestResultServer/model/jsonresults.py:
        (JsonResults.update_file):

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

        extract-built-product build step should fail if unzipping fails
        https://bugs.webkit.org/show_bug.cgi?id=82493

        Reviewed by Simon Fraser.

        Forward non-zero exit code from subprocesses so that the master can detect any failures
        and bail out early.

        * BuildSlaveSupport/built-product-archive:
        (main):

2012-03-28  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy should support files, directories, and packages as command line args
        https://bugs.webkit.org/show_bug.cgi?id=76765

        Reviewed by Adam Barth.

        This patch adds support for specifying files, directories, and
        packages to test-webkitpy along with the already existing
        support for modules, test classes, and individual test names.

        Also, fix a bug in filesystem_mock where we wouldn't normalize a
        path containing a reference to the current directory properly,
        for example, '/foo/./bar.py'.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.normpath):
        * Scripts/webkitpy/test/main.py:
        (Tester._configure_logging):
        (Tester._run_tests):
        * Scripts/webkitpy/test/test_finder.py:
        (TestDirectoryTree.find_modules):
        (TestDirectoryTree.subpath):
        (TestFinder.is_dotted_name):
        (TestFinder.find_names):
        (TestFinder):
        (TestFinder._find_names_for_arg):
        (TestFinder._find_in_trees):
        (TestFinder._default_names):
        * Scripts/webkitpy/test/test_finder_unittest.py:
        (TestFinderTest.setUp):
        (TestFinderTest.tearDown):
        (TestFinderTest.check_names):
        (TestFinderTest.test_default_names):
        (TestFinderTest):
        (TestFinderTest.test_paths):

2012-03-28  Simon Fraser  <simon.fraser@apple.com>

        Fix inspector tests when running in internal builds.

        <rdar://problem/11050694>

        Reviewed by Tim Hatcher.

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

2012-03-28  David Kilzer  <ddkilzer@apple.com>

        Use xcrun to find nm and ranlib on OS X builds
        <http://webkit.org/b/82466>

        Reviewed by Dan Bernstein.

        * Scripts/build-webkit: Use xcrun to find ranlib.
        * Scripts/webkitdirs.pm:
        (determineNmPath): Added.  Use xcrun to find nm on OS X.
        (nmPath): Added.
        * Scripts/webkitperl/features.pm:
        (libraryContainsSymbol): Use nmPath().

2012-03-28  Ojan Vafai  <ojan@chromium.org>

        Add history navigation to garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=82495

        Reviewed by Dimitri Glazkov.

        Also, maintain scroll offsets when returning to a tab. This makes addressing
        expected failures considerably easier when dealing with below-the-fold tests.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        -Store the scrollTop before switching to a new tab and restore the appropriate scrollTop after
        switching.
        -Modify window.location with the tabName in the hash. Can't use pushState because this is served
        from a file URL and Chrome puts each different file URL in it's own origin.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        Remove the href so that clicking on the accordion item does not modify window.location.hash.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:

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

        [GTK] generate-gtk-doc doesn't cope with custom build directory
        https://bugs.webkit.org/show_bug.cgi?id=82448

        Reviewed by Martin Robinson.

        Pass the product directory in generate-gtkdoc arguments from
        build-webkit.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject):
        * gtk/common.py:
        (get_build_path):

2012-03-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add --skipped command line option to Tools/Scripts/run-gtk-tests
        https://bugs.webkit.org/show_bug.cgi?id=82341

        Reviewed by Martin Robinson.

        Add --skipped=skip|ignore|only command line option.

        * Scripts/run-gtk-tests:
        (TestRunner._test_cases_to_skip): Return the list of test cases
        to skip for the given test depending on the skipped action.
        (TestRunner._should_run_test): Decide whether to run the test or
        not depending on the skipped action.
        (TestRunner.run_tests): Only show the list of skipped tests when
        skipped action is 'skip'.

2012-03-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use gtester -s to skip individual test cases instead of unit tests as a whole
        https://bugs.webkit.org/show_bug.cgi?id=82333

        Reviewed by Martin Robinson.

        * Scripts/run-gtk-tests:
        (TestRunner.SkippedTest): Add SkippedTest class to store more
        information about skipped tests.
        (TestRunner._setup_testing_environment): Use SkippedTest to add
        TestWebKitAccessibility to the skipped list.
        (TestRunner._find_skipped_test): Return the SkippedTest object for
        a given test path.
        (TestRunner._test_cases_to_skip): Returns the list of test cases
        that should be skipped for a given test path.
        (TestRunner._should_run_test): Helper funtion to decide whether
        the given test path should be run or not. Tests in the skipped
        list that don't have a list of failing test cases are not run at
        all. Tests in the skipped list that contain a list of test cases
        are run with gtester -s to skip the individual test cases.
        (TestRunner._run_test): Helper funtion to run a given test.
        (TestRunner.run_tests): Build the list of tests to run based on
        _should_run_test() and use helper function _run_test() to run
        every test.

2012-03-28  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Couple of tests have different results on 64 bit and/or in debug mode compared to 32 bit and/or release mode
        https://bugs.webkit.org/show_bug.cgi?id=52810

        Reviewed by Simon Hausmann.

        Use SSE2 floating point math on 32 bit instead of the default
        387 to make layout test result same on 32 and on 64 bit builds.

        * qmake/mkspecs/features/unix/default_post.prf:

2012-03-28  Sergio Villar Senin  <svillar@igalia.com>

        [Soup] DNS prefetching spams resolver, shoots self in the foot
        https://bugs.webkit.org/show_bug.cgi?id=41630

        Reviewed by Martin Robinson.

        Bump libsoup and glib dependencies.

        * efl/jhbuild.modules:
        * gtk/jhbuild.modules:

2012-03-28  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Disable introspection for jhbuild modules
        https://bugs.webkit.org/show_bug.cgi?id=82395

        Reviewed by Philippe Normand.

        * efl/jhbuild.modules: add --disable-introspection to all modules
        that support it
        * gtk/jhbuild.modules: ditto.

2012-03-28  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed, fix API tests after adding full platforms. (r111658)

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

2012-03-28  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed typo fix after r112383.

        * Scripts/run-qtwebkit-tests:
        (Main.check_crash_occurences):

2012-03-28  Ádám Kallai  <kadam@inf.u-szeged.hu>

        [Qt] run-qtwebkit-tests should report crashes
        https://bugs.webkit.org/show_bug.cgi?id=76905

        Added checking of crashing tests. Now final summary includes the total number of crashing tests too.
        Made unit test for this modification by János Badics <jbadics@inf.u-szeged.hu>.

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunQtAPITests.commandComplete):
        (RunQtAPITests.evaluateCommand):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (RunQtAPITestsTest):
        (test_failure):
        (test_crash):
        * Scripts/run-qtwebkit-tests:
        (Main.announce_results_html):
        (Main):
        (Main.check_crash_occurences):
        (Main.convert_to_stdout):
        (Main.convert_to_html):

2012-03-28  Kwonjin Jeong  <gram@company100.net>

        Add support for Intel compiler on Linux QT port.
        https://bugs.webkit.org/show_bug.cgi?id=81077

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/default_post.prf:
        Don't hide symbols when building with Intel compiler.
        The symbols are needed when building QtWebKit tests.

        * qmake/mkspecs/features/unix/icc.prf:
        Added to ignore icc-specific warnings.
        This feature is used with command-line arguments for build-webkit script.

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

        Unreviewed, trivial update-webkit-libs-jhbuild system call fix.

        * Scripts/update-webkitgtk-libs: This script is written in
        Perl. Not Python. So use perl vocabulary to refer to command line arguments.

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

        kill-old-processes doesn't do anything on linux
        https://bugs.webkit.org/show_bug.cgi?id=82388

        Reviewed by Tony Chang.

        Kill cc1plus, ld, etc... on linux. Also ps aux + grep to kill old run-webkit-tests processes.
        This should help stabilizing Chromium linux bots.

        * BuildSlaveSupport/kill-old-processes:

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

        [GTK] jhbuild wrongly tricked into clean-up
        https://bugs.webkit.org/show_bug.cgi?id=82216

        Reviewed by Gustavo Noronha Silva.

        Save jhbuild{rc,.modules}.md5sum in Dependencies instead of the
        build tree. Also when checking if the jhbuild configuration
        changed use absolute md5sum paths.

        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProjectIfNecessary):
        (jhbuildConfigurationChanged):
        (buildAutotoolsProject):

2012-03-28  Csaba Osztrogonác  <ossy@webkit.org>

        kill-old-processes doesn't do anything on linux
        https://bugs.webkit.org/show_bug.cgi?id=82388

        One more attempt to disable kill-old-processes on the Qt bots not to kill each others.

        The platform in Factory comes from config.json, accordingly platform is fullplatform,
        for example: qt-4.8, qt-5.0-wk2. We have to check only the prefix of platform.

        Reviewed by Ryosuke Niwa.

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

2012-03-28  Hao Zheng  <zhenghao@chromium.org>

        Make Chromium port for Android use hardware gpu path default.
        https://bugs.webkit.org/show_bug.cgi?id=82033

        Reviewed by Dirk Pranke.

        Skip canvas tests, which are run in virtual gpu test suites.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        (ChromiumAndroidPort.skipped_tests):

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

        kill-old-processes doesn't do anything on linux
        https://bugs.webkit.org/show_bug.cgi?id=82388

        Disable kill-old-processes on the Qt bots not to kill each others.

        Reviewed by Ryosuke Niwa.

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

2012-03-27  Hao Zheng  <zhenghao@chromium.org>

        Handle DRT crash caused by Android OOM.
        https://bugs.webkit.org/show_bug.cgi?id=82310

        Reviewed by Tony Chang.

        When Android is OOM, it sends a SIGKILL (137) signal to DRT. DRT
        is stopped silently and regarded as crashed. Re-run the test for
        such crash.

        Add some debug log to NRWT.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.run_test):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        (ChromiumAndroidPort.get_last_stacktrace):
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._start):
        (ChromiumAndroidDriver.run_test):
        (ChromiumAndroidDriver._get_drt_return_value):

2012-03-27  Ojan Vafai  <ojan@chromium.org>

        Fix expected results for some unittest failures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js:

2012-03-27  Adrienne Walker  <enne@google.com>

        [chromium] Fix --enabled-threaded-compositing flag in DRT
        https://bugs.webkit.org/show_bug.cgi?id=82405

        Reviewed by James Robinson.

        --enable-threaded-compositing wasn't working because there was no way
        to set the value before it was used in the TestShell constructor.

        To avoid adding yet another boolean parameter to TestShell's
        constructor, add an explicit initialize function that can operate on
        any boolean settings that are set post-constructor.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::initialize):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        (TestShell::setTestShellMode):

2012-03-27  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests: suppress debug output from run-safari on results file
        https://bugs.webkit.org/show_bug.cgi?id=82400

        Reviewed by Ryosuke Niwa.

        Send the run-safari output to /dev/null rather than the console.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.show_results_html_file):

2012-03-27  Simon Fraser  <simon.fraser@apple.com>

        Improve error reporting in run-javascriptcore-tests
        https://bugs.webkit.org/show_bug.cgi?id=82379

        Reviewed by Jessie Berlin.
        
        When the script dies, have it print out the reason for dying.

        * Scripts/run-javascriptcore-tests:

2012-03-27  Eric Seidel  <eric@webkit.org>

        Add Dave Barton to the Contributors list so I can more easily CC him on bugs
        https://bugs.webkit.org/show_bug.cgi?id=82373

        Reviewed by Ryosuke Niwa.

        Dave's committer-status in in-progress, so until then
        list him as a Contributor so at least I can more easily CC him on bugs.

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

2012-03-26  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        [jhbuild] Prepend jhbuildrc's directory to sys.path instead of appending.
        https://bugs.webkit.org/show_bug.cgi?id=82252

        Reviewed by Gustavo Noronha Silva.

        Appending the directory containing common.py may be problematic if
        another path in sys.path also contains either a common.py or a
        common/ module, so prepend to select our version instead. This is
        the case with fail2ban, which has a common/ directory which may
        end up being in Python's default path.

        * efl/jhbuildrc:
        * gtk/jhbuildrc:

2012-03-27  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: prepare for better test run output
        https://bugs.webkit.org/show_bug.cgi?id=82290

        Reviewed by Adam Barth.

        This code basically re-implements the output of the TextTestRunner default
        runner code from unittest, although the implementation is quite
        different, in preparation for changing the test output to be
        metered and possibly running in parallel.

        The output is almost identical to before, except that instead of
        logging "test_regular (webkitpy.main.RunnerTest) passed" we log
        "webkitpy.main.RunnerTest.test_regular passed". It has always
        annoyed me that they invert the names to be harder to read and
        so that you can't copy & paste back to the input for
        test-webkitpy.

        This patch is provided to add a skeleton for unit tests and for
        comparison to an upcoming patch that will actually add new
        functionality.

        * Scripts/webkitpy/test/main.py:
        (Tester.__init__):
        (Tester._configure_logging):
        (Tester._run_tests):
        * Scripts/webkitpy/test/runner.py: Added.
        (TestRunner):
        (TestRunner.__init__):
        (TestRunner.test_name):
        (TestRunner.all_test_names):
        (TestRunner.run):
        (TestRunner.write_result):
        (TestRunner.write_summary):
        * Scripts/webkitpy/test/runner_unittest.py: Added.
        (FakeModuleSuite):
        (FakeModuleSuite.__init__):
        (FakeModuleSuite.__str__):
        (FakeModuleSuite.run):
        (FakeTopSuite):
        (FakeTopSuite.__init__):
        (FakeLoader):
        (FakeLoader.__init__):
        (FakeLoader.top_suite):
        (FakeLoader.loadTestsFromName):
        (RunnerTest):
        (RunnerTest.test_regular):
        (RunnerTest.test_verbose):

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

        [GTK] Build gnutls without p11-kit support
        https://bugs.webkit.org/show_bug.cgi?id=82212

        Reviewed by Martin Robinson.

        * gtk/jhbuild.modules: pass --without-p11-kit to gnutls'
        configure, to avoid requiring that dependency, which is not used
        by libsoup and WebKit anyway

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

        [Qt] Make debug build work on 32 bit
        https://bugs.webkit.org/show_bug.cgi?id=82331

        Use --no-keep-memory option of ld not to cache the symbol tables of input files in
        memory to avoid memory exhaustion during the linking phase for x86-debug builds.

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/unix/default_post.prf:
        * qmake/mkspecs/features/unix/default_pre.prf:

2012-03-23  Balazs Ankes  <bank@inf.u-szeged.hu>

        Add png checking to check-webkit-style
        https://bugs.webkit.org/show_bug.cgi?id=75824

        Reviewed by NOBODY Tony Chang.

        * Scripts/webkitpy/style/checker.py:
        (_all_categories):
        (FileType):
        (CheckerDispatcher._should_skip_file_path):
        (CheckerDispatcher._file_type):
        (CheckerDispatcher._create_checker):
        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherDispatchTest.test_none_paths):
        * Scripts/webkitpy/style/checkers/png.py: Added.
        (PNGChecker):
        (PNGChecker.__init__):
        (PNGChecker.check):
        (PNGChecker._config_file_path):
        * Scripts/webkitpy/style/checkers/png_unittest.py: Added.
        (MockSCMDetector):
        (MockSCMDetector.__init__):
        (MockSCMDetector.display_name):
        (MockSCMDetector.propget):
        (PNGCheckerTest):
        (PNGCheckerTest.test_init):
        (PNGCheckerTest.test_init.mock_handle_style_error):
        (PNGCheckerTest.test_check):
        (PNGCheckerTest.test_check.mock_handle_style_error):
        * Scripts/webkitpy/style/patchreader.py:
        (PatchReader.check):

2012-03-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Skip GTK+ unit tests that fail in the bots

        * Scripts/run-gtk-tests:
        (TestRunner): Add failing tests to the skipped list.

2012-03-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Unskip all GTK+ unit test.

        Currently, skipped tests contains the list of unit tests that have
        failed in one or more bots. In this moment it's not possible to
        skip just the test cases that fail, so the complete unit test is
        skipped when a single test case fails. For that reason, we don't
        know which test cases are actually failing for every skipped
        test. We are planning to land a patch to allow skipping individual
        test cases, but first we need to know which test cases are
        currently failing in the bots to skip them. So, this patch simply
        unskips all unit tests in order to watch the bots and get the list
        of test cases failing. Failing tests will be skipped again as soon
        as we have the new list of failing test cases.

        * Scripts/run-gtk-tests:
        (TestRunner): Reset the list of skipped tests.

2012-03-26  Scott Byer  <scottbyer@chromium.org>

        Enable layout testing of the scroll animator.
        https://bugs.webkit.org/show_bug.cgi?id=81858
        Add a call to the InternalSettings that layout tests can use to
        turn on scroll animation. Enable animation updates for the
        Chromium platform DRT when scroll animation has been turned on in
        a test. This should be a no-op for all current layout tests.

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::serviceAnimation):
        (WebViewHost::scheduleAnimation):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-03-26  Dinu Jacob  <dinu.jacob@nokia.com>

        [Qt][WK2] Support multi-file upload
        https://bugs.webkit.org/show_bug.cgi?id=81589

        Reviewed by Simon Hausmann.

        Modified filePicker to support multi-file upload.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/icons/checkbox_checked.png: Added.
        * MiniBrowser/qt/icons/checkbox_unchecked.png: Added.
        * MiniBrowser/qt/js/MultiSelect.js: Added.
        (values):
        (isSelected):
        (removeValue):
        * MiniBrowser/qt/qml/CheckBox.qml: Added.
        * MiniBrowser/qt/qml/FilePicker.qml:

2012-03-26  Mark Hahnenberg  <mhahnenberg@apple.com>

        Retry crashing tests serially at the end of NRWT on Apple Mac
        https://bugs.webkit.org/show_bug.cgi?id=82233

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.should_retry_crashes):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.should_retry_crashes):

2012-03-26  Mark Hahnenberg  <mhahnenberg@apple.com>

        NRWT should retry failures serially
        https://bugs.webkit.org/show_bug.cgi?id=82241

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests): Add another parameter to specify the number of workers to use.
        (Manager.run): Run the failures serially.

2012-03-26  Adrienne Walker  <enne@google.com>

        Allow expectations on directories in virtual test suites
        https://bugs.webkit.org/show_bug.cgi?id=82250

        Reviewed by Dirk Pranke.

        lookup_virtual_test_base was only returning valid results for files
        and not directories. Fix by falling back to the virtual test suite
        mapping if possible.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.lookup_virtual_test_base):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.skipped_tests):
        (TestPort.virtual_test_suites):

2012-03-26  Dirk Pranke  <dpranke@chromium.org>

        Fix duplicated ChangeLog entry from r112171.

        Unreviewed, build fix.

2012-03-26  Dirk Pranke  <dpranke@chromium.org>

        nrwt: remove --worker-model flag
        https://bugs.webkit.org/show_bug.cgi?id=82112

        Reviewed by Adam Barth.

        The --worker-model=inline flag is basically redundant with the
        --child-processes=1 flag (technically, you could one run child
        process, but this is only useful for testing); this patch
        removes this flag, which simplifies things and enables more
        cleanup down the road.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        (Manager.print_config):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (get):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (make_broker):
        (FunctionTests.test_get__inline):
        (FunctionTests.test_get__processes):
        (_TestsMixin.setUp):
        (_TestsMixin.make_broker):
        (InlineBrokerTests.setUp):
        (MultiProcessBrokerTests.setUp):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.default_child_processes):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.check_sys_deps):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidPortTest):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest.make_port):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase):
        (PortTestCase.make_port):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.default_child_processes):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        (parse_args):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (parse_args):
        (MainTest.test_batch_size):
        (MainTest.test_child_processes_2):
        (MainTest.test_child_processes_min):
        (MainTest.test_exception_raised):
        (MainTest.test_keyboard_interrupt):
        (MainTest.test_exit_after_n_crashes):
        (MainTest.assert_run_order):
        (MainTest.test_run_order__inline):
        (MainTest.test_virtual):

2012-03-26  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: split test-finding code into a different module
        https://bugs.webkit.org/show_bug.cgi?id=82253

        Reviewed by Adam Barth.

        Per suggestion from abarth, this change splits all the
        filesystem-crawling, test-finding code in test-webkitpy out into
        a separate module and switches to using a FileSystem object.
        This makes things much more testable, so we also add tests :).

        We also add a realpath() method to the Filesystem object, since
        test-webkitpy needs that in order to be able to resolve symlinks
        properly to determine whether a file is under a particular tree
        or not.

        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.realpath):
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.realpath):
        * Scripts/webkitpy/test/main.py:
        (Tester.__init__):
        (Tester.add_tree):
        (Tester.run):
        (Tester._run_tests):
        (Tester._log_exception):
        * Scripts/webkitpy/test/test_finder.py: Added.
        (TestDirectoryTree):
        (TestDirectoryTree.__init__):
        (TestDirectoryTree.find_modules):
        (TestDirectoryTree.find_modules.file_filter):
        (TestDirectoryTree.to_module):
        (TestDirectoryTree.clean):
        (TestFinder):
        (TestFinder.__init__):
        (TestFinder.add_tree):
        (TestFinder.additional_paths):
        (TestFinder.clean_trees):
        (TestFinder.is_module):
        (TestFinder.to_module):
        (TestFinder.find_names):
        (TestFinder._exclude):
        * Scripts/webkitpy/test/test_finder_unittest.py: Added.
        (TestFinderTest):
        (TestFinderTest.setUp):
        (TestFinderTest.tearDown):
        (TestFinderTest.test_additional_system_paths):
        (TestFinderTest.test_is_module):
        (TestFinderTest.test_to_module):
        (TestFinderTest.test_clean):
        (TestFinderTest.test_find_names):

2012-03-26  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        [jhbuild] Use $MAKE if it is defined to build jhbuild itself.
        https://bugs.webkit.org/show_bug.cgi?id=82209

        Reviewed by Martin Robinson.

        Respecting the $MAKE environment variable when it is defined makes
        building jhbuild more portable, as some platforms may have GNU
        make as gmake, for example.

        * jhbuild/jhbuild-wrapper:
        (install_jhbuild):

2012-03-26  Dirk Pranke  <dpranke@chromium.org>

        add a Tree abstraction to test-webkitpy to better encapsulate things
        https://bugs.webkit.org/show_bug.cgi?id=82158

        Reviewed by Adam Barth.

        There are no functional changes in this patch, but adding a
        basic abstraction for the trees we are looking in for python
        tests will allow me to add some features later on more easily
        (like ignoring certain directories like webkitpy/thirdparty),
        and it makes things slightly less hard-coded.

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/test/main.py:
        (Tester.__init__):
        (Tester):
        (Tester.add_tree):
        (Tester._parse_args):
        (Tester._configure):
        (Tester.run):
        (Tester._find_modules):
        (Tester._run_tests):
        (Tester._is_module):
        (Tester._log_exception):
        (TestDirectoryTree):
        (TestDirectoryTree.__init__):
        (TestDirectoryTree.find_modules):
        (TestDirectoryTree.clean):

2012-03-26  Ojan Vafai  <ojan@chromium.org>

        garden-o-matic should special case reftests
        https://bugs.webkit.org/show_bug.cgi?id=81812

        Reviewed by Adam Barth.

        On the examine page, don't show a rebaseline button for reftests.
        We still show it on the failure summary page because tests are grouped
        together. Long-term, we should make sure webkit-patch rebaseline-test
        never tries to rebaseline reftests.

        * 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/styles/results.css:

2012-03-26  Dirk Pranke  <dpranke@chromium.org>

        clean up NRWT logging/metering, be less verbose
        https://bugs.webkit.org/show_bug.cgi?id=73846

        Reviewed by Ojan Vafai.

        Re-land r112014 with a build fix for Python 2.6 compatibility.

        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_http_locking):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (AbstractWorker.run):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.__init__):
        (Worker._set_up_logging):
        (Worker):
        (Worker._set_up_host_and_port):
        (Worker.run):
        (Worker.cleanup):
        * Scripts/webkitpy/layout_tests/controllers/worker_unittest.py:
        (WorkerTest.test_default_platform_in_worker):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):
        (main):
        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream):
        (MeteredStream.implements):
        (MeteredStream._erasure):
        (MeteredStream._ensure_newline):
        (MeteredStream.__init__):
        (MeteredStream.__del__):
        (MeteredStream.cleanup):
        (MeteredStream.write_throttled_update):
        (MeteredStream.write_update):
        (MeteredStream.write):
        (MeteredStream.writeln):
        (MeteredStream._erase_last_partial_line):
        (_LogHandler):
        (_LogHandler.__init__):
        (_LogHandler.emit):
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (RegularTest):
        (RegularTest.setUp):
        (RegularTest.tearDown):
        (RegularTest.time_fn):
        (RegularTest.test_logging_not_included):
        (RegularTest._basic):
        (RegularTest.test_basic):
        (RegularTest._log_after_update):
        (RegularTest.test_log_after_update):
        (TtyTest):
        (TtyTest.test_basic):
        (TtyTest.test_log_after_update):
        (VerboseTest):
        (VerboseTest.test_basic):
        (VerboseTest.test_log_after_update):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (parse_print_options):
        (Printer.__init__):
        (Printer.cleanup):
        (Printer.print_progress):
        (Printer.print_update):
        (Printer._write):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.get_printer):
        (Testprinter.test_print_progress):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_test_pause_before_testing):

2012-03-26  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        [jhbuild] Revert $MAKE environment hack introduced in r101929.
        https://bugs.webkit.org/show_bug.cgi?id=82234

        Reviewed by Martin Robinson.

        The problem it was supposedly fixing was fixed in jhbuild itself
        in git revision da8944d8ca987ca48c91b350257a530050406092, so we
        can remove the workaround added to the script.

        * jhbuild/jhbuild-wrapper:
        (install_jhbuild):

2012-03-26  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Skeleton code of AsyncFileSystemBlackBerry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=82157

        Reviewed by Rob Buis.

        * Scripts/build-webkit:
        Make ENABLE_FILE_SYSTEM default on for blackberry.

2012-03-26  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        [jhbuild] Explicitly disable DTrace when building glib.
        https://bugs.webkit.org/show_bug.cgi?id=82145

        Reviewed by Gustavo Noronha Silva.

        DTrace support is not really needed by WebKit, so disabling it
        helps avoid some build errors on more exotic platforms (such as
        FreeBSD).

        * efl/jhbuild.modules:
        * gtk/jhbuild.modules:

2012-03-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r111993.
        http://trac.webkit.org/changeset/111993
        https://bugs.webkit.org/show_bug.cgi?id=82184

        It broke layout and API tests and made WTR crash (Requested by
        Ossy on #webkit).

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2012-03-25  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Move WTF to its own static lib build.

        * waf/build/settings.py:
        (common_configure):

2012-03-24  Chris Fleizach  <cfleizach@apple.com>

        AX: Support solution to handle invalid ax text marker
        https://bugs.webkit.org/show_bug.cgi?id=82023

        Reviewed by Oliver Hunt.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (indexForTextMarkerCallback):
        (isTextMarkerValidCallback):
        (textMarkerForIndexCallback):
        (AccessibilityUIElement::indexForTextMarker):
        (AccessibilityUIElement::isTextMarkerValid):
        (AccessibilityUIElement::textMarkerForIndex):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::indexForTextMarker):
        (AccessibilityUIElement::textMarkerForIndex):
        (AccessibilityUIElement::isTextMarkerValid):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::indexForTextMarker):
        (WTR::AccessibilityUIElement::isTextMarkerValid):
        (WTR::AccessibilityUIElement::textMarkerForIndex):
        (WTR):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR):
        (WTR::AccessibilityUIElement::indexForTextMarker):
        (WTR::AccessibilityUIElement::isTextMarkerValid):
        (WTR::AccessibilityUIElement::textMarkerForIndex):

2012-03-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r112014.
        http://trac.webkit.org/changeset/112014
        https://bugs.webkit.org/show_bug.cgi?id=82138

        Broke SnowLeopard, Chromium and GTK+ bots (Requested by kov on
        #webkit).

        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_http_locking):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (AbstractWorker.run):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.__init__):
        (Worker.safe_init):
        (Worker.run):
        (Worker.cleanup):
        * Scripts/webkitpy/layout_tests/controllers/worker_unittest.py:
        (WorkerTest.test_default_platform_in_worker):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):
        (main):
        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream):
        (MeteredStream.is):
        (MeteredStream.__init__):
        (MeteredStream.write):
        (MeteredStream.update):
        (MeteredStream._overwrite):
        (MeteredStream._reset):
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (TestMeteredStream):
        (TestMeteredStream.test_regular):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (_configure_logging):
        (_restore_logging):
        (Printer.__init__):
        (Printer.cleanup):
        (Printer.print_progress):
        (Printer.print_update):
        (Printer._write):
        (Printer):
        (Printer._update):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (TestUtilityFunctions.assertEmpty):
        (TestUtilityFunctions):
        (TestUtilityFunctions.assertNotEmpty):
        (TestUtilityFunctions.assertWritten):
        (TestUtilityFunctions.test_configure_logging):
        (Testprinter.get_printer):
        (Testprinter.test_print_progress):
        (Testprinter.test_print_progress.mock_time):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_test_pause_before_testing):

2012-03-24  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Fix the build after WTF move.

        * waf/build/build_utils.py:
        (get_excludes):
        (get_excludes_in_dirs):
        * waf/build/settings.py:
        (get_port_excludes):
        (common_configure):

2012-03-24  Dirk Pranke  <dpranke@chromium.org>

        clean up NRWT logging/metering, be less verbose
        https://bugs.webkit.org/show_bug.cgi?id=73846

        Reviewed by Ojan Vafai.

        This patch totally rewrites the metered_stream module and
        changes the way it and the printing module now interact with the
        logging subsystem.

        The printing module becomes a dumb layout_tests-specific wrapper around
        the metered stream. All of the intelligence of how and when to
        actually write (or erase) lines and how things interact with
        logging moves into the metered stream.

        As of now, anything written to the metered stream *bypasses the
        logging system*. If a logger is passed to the meter constructor,
        the metered stream will also attach a log handler so that all
        messages fed to the logger will also be written to the metered
        stream. This detangles the logic that used to exist where
        sometimes the meter would write to the logger and sometimes the
        logger would write to the meter.

        All of this makes the logic generic and reusable for
        test-webkitpy (coming in another patch). It also helps clarify
        what the mysterious "configure_logging" parameter to the printer
        constructor used to do (that parameter itself is gone now, and
        by default the printer and metered_stream will not ever touch
        the logging system; this makes a bunch of tests less fragile).

        All of the above should produce no user-visible changes.

        However, to also fix the bug in question, we change the message
        format in --verbose mode to %H:%M:%S.%frac %pid %message,
        eliminating the date, file:lineno, and level parameters. I am
        making this change at the same time because it would be
        difficult to write things consistently between the logs and the
        metered stream if we were still logging the file:lineno.

        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
          Remove the configure_logging parameter
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
          Use metered stream to configure the logging (we don't need a printer)
          and be careful about when and how we manipulate the log level
          and handlers on the root logger.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
          Pass in the root logger so that log messages are formatted
          properly, and set the log level outside of any routines called
          by unit tests so as to not interfere.
        * Scripts/webkitpy/layout_tests/views/manager_worker_broker.py:
          remove a duplicate log message.
        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
          complete rewrite :).
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
          complete rewrite :).
        * Scripts/webkitpy/layout_tests/views/printing.py:
          move the logging configuration into metered_stream, and also
          move the "when should I log progress messages" into metered stream.
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
          remove tests that are no longer necessary.
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
          remove the configure_logging parameter.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
          update the test; since the printer no longer writes to the log,
          we need to check what is written to the regular_output instead.
          (test_run_test_pause_before_testing):

2012-03-24  Gustavo Noronha Silva  <gns@gnome.org>

        Add myself and Martin Robinson to:
          * GStreamerGraphics
          * GtkWebKit2PublicAPI
          * SoupNetwork
        and to the newly created WebKitGTKTranslations.

        Rubber-stamped by Martin Robinson.

        * Scripts/webkitpy/common/config/watchlist:

2012-03-24  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] Implement PageClient::isViewWindowActive()
        https://bugs.webkit.org/show_bug.cgi?id=81143

        Reviewed by Kenneth Rohde Christiansen.

        Fix the WrapperWindow from our PlatformWebView
        so it correctly creates the platform related
        stuff for QWindow, which is not created unless
        QWindow::setVisible() or QWindow::show() are called.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2012-03-23  Dirk Pranke  <dpranke@chromium.org>

        nrwt: don't wait for safari to exit before exiting after showing the results file
        https://bugs.webkit.org/show_bug.cgi?id=81845

        Reviewed by Ryosuke Niwa.

        Prior to this change, if you ran new-run-webkit-tests and
        displayed the HTML results file at the end, we would block
        waiting for the user to quit the browser. There doesn't seem to
        be a need for that, and the Chromium ports don't do this.

        Also, update the mac tests to capture the output and be quiet :).

        * Scripts/webkitpy/common/system/executive_mock.py:
          Make popen() testable, implement should_log for it.
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.show_results_html_file):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
          Silence some of the tests via outputcapture.

2012-03-23  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] libgcrypt and p11-kit should not be in jhbuild modules
        https://bugs.webkit.org/show_bug.cgi?id=82073

        Reviewed by Martin Robinson.

        * Scripts/webkitdirs.pm:
        (jhbuildConfigurationChanged): new function that isolates the
        jhbuild configuration change checking from the autogen logic.
        (mustReRunAutogen): code for the new function lived here.
        (buildAutotoolsProject): now calls jhbuildConfigurationChanged
        itself, and cleans up the jhbuild root if configuration has
        changed; it also forces autogen to be run in that case, to
        make sure the new libraries are used.
        * gtk/jhbuild.modules: removed libgcrypt and p11-kit.
        * jhbuild/jhbuild-wrapper:
        (ensure_jhbuild): this might be run inside a jhbuild environment,
        in which case aclocal fails when trying to use the now deleted
        aclocal directory in the jhbuild prefix, so work around that.

2012-03-23  Ojan Vafai  <ojan@chromium.org>

        garden-o-matic scrolls to the top of the page when you click an accordion item
        https://bugs.webkit.org/show_bug.cgi?id=82088

        Reviewed by Adam Barth.

        Check the scroll position and make sure that the clicked accordion item is visible.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:

2012-03-23  Dirk Pranke  <dpranke@chromium.org>

        LayoutTestHelper could get torn down earlier (mostly to reset color profile)
        https://bugs.webkit.org/show_bug.cgi?id=80567

        Reviewed by Ryosuke Niwa.

        Move clean_up_run to occur right after we finish testing and
        before we start processing the results. Also makes set_up_run()
        and clean_up_run() private since there's no real need for
        callers to be aware of them.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._set_up_run):
        (Manager.run):
        (Manager._clean_up_run):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_http_locking):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):

2012-03-23  Dean Jackson  <dino@apple.com>

        Disable CSS_SHADERS in Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=81996

        Reviewed by Simon Fraser.

        Default enableCSSShaders to be 0 on all builds that use
        this script. Use the flag to turn it back on.

        * Scripts/build-webkit:

2012-03-23  Tony Chang  <tony@chromium.org>

        [chromium] rename newwtf target back to wtf
        https://bugs.webkit.org/show_bug.cgi?id=82064

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-03-23  Jessie Berlin  <jberlin@apple.com>

        Assertion failure in PlatformPasteboardMac constructor causing multiple tests to "crash" on
        the Lion Intel WebKit2 Debug bots.
        https://bugs.webkit.org/show_bug.cgi?id=81012.

        Rubber-stamped by Dan Bernstein.

        Add a step to kill the pasteboard server while we investigate what is causing these
        assertion failures (to get the bots green).

        * BuildSlaveSupport/kill-old-processes:

2012-03-22  Martin Robinson  <mrobinson@igalia.com>

        [check-webkit-style] Alphabetical sorting errors in headers are reported for the line after the first out of order header
        https://bugs.webkit.org/show_bug.cgi?id=81986

        Reviewed by David Levin.

        Track whether or not errors are filtered in error handlers. If an
        alphabetical sorting error is reported for a header and filtered, try
        reporting it for the other potential source of the error. This ensures
        that the style bot can still find new sorting errors in both potential
        situations:

            #include <foo.h> <-- 1. edited line
            #include <baz.h> <-- 2. edited line

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_include_line): Potentially report the error for both lines,
        if the first error is filtered.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Implement a new style of
        test that allows only reporting errors for certain lines. This verifies that
        when one line of an ordering error is filtered, the error is reported on the
        other line.
        (ErrorCollector.__init__):
        (ErrorCollector.__call__):
        (CppStyleTestBase.perform_lint):
        (CppStyleTestBase.perform_language_rules_check):
        (CppStyleTestBase.assert_language_rules_check):
        (OrderOfIncludesTest.test_check_alphabetical_include_order_errors_reported_for_both_lines):
        Added a new test that verifies that when one line of the two lines of an ordering
        error occur, the error is reported on the other line.
        * Scripts/webkitpy/style/checkers/jsonchecker_unittest.py:
        (MockErrorHandler.__call__): Report True because the error is handled.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (ErrorCollector.__call__): Ditto.
        * Scripts/webkitpy/style/checkers/watchlist_unittest.py:
        (MockErrorHandler.__call__): Ditto.
        * Scripts/webkitpy/style/checkers/xcodeproj_unittest.py:
        (TestErrorHandler.__call__): Ditto.
        * Scripts/webkitpy/style/checkers/xml_unittest.py:
        (MockErrorHandler.__call__): Ditto.
        * Scripts/webkitpy/style/error_handlers.py:
        (DefaultStyleErrorHandler.__call__): Report True if the error is handled
        and False if it is filtered.

2012-03-23  Patrick Gansterer  <paroga@webkit.org>

        Build fix for WinCE after r111778.

        * WinCELauncher/CMakeLists.txt:

2012-03-23  Peter Beverloo  <peter@chromium.org>

        Unreviewed buildfix for the Chromium Android builder.

        Disable the ImageDiff target for now. Android needs to build this for
        host rather than for target (as other configurations do), but since the
        WTF move the dependency chain got significantly more complicated.

        I'll work out a proper fix in the following bug, but since several
        things are broken due to this, this buildfix should be landed first.
        https://bugs.webkit.org/show_bug.cgi?id=82039

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-03-23  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL][DRT] Implement LayoutTestController's methods related with editing.
        https://bugs.webkit.org/show_bug.cgi?id=80136

        Reviewed by Ryosuke Niwa.

        Implements EFL's LayoutTestController methods e.i. setSmartInsertDeleteEnabled,
        setSelectTrailingWhitespaceEnabled.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setSmartInsertDeleteEnabled):
        (LayoutTestController::setSelectTrailingWhitespaceEnabled):

2012-03-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Convert hasGrammarMarker to use Internals interface
        https://bugs.webkit.org/show_bug.cgi?id=82004

        Reviewed by Ryosuke Niwa.

        Remove hasGrammarMarker functions, because it is able to work in the
        cross-port way through the Internals interface.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:

2012-03-22  Adam Barth  <abarth@webkit.org>

        sync-master-with-upstream creates non-linear git history
        https://bugs.webkit.org/show_bug.cgi?id=82006

        Reviewed by Julien Chaffraix.

        Previously this script would create a merge commit at the HEAD of
        origin/master, causing your fork of WebKit to diverge from upstream.
        The new version of this script pushes directly from upstream to origin
        (without round-tripping through any local branches), avoiding this
        problem.

        * Scripts/sync-master-with-upstream:

2012-03-22  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed build fix. Add knowledge of the WTF project to
        the autotools build system scripts so that build-jsc works
        correctly for GTK+.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject): handle the WTF project, build the
        libWTF.la target.
        (buildGtkProject): add WTF to the list of supported projects.

2012-03-22  Eric Seidel  <eric@webkit.org>

        Make svn-apply re-write JavaScriptCore/wtf to WTF/wtf
        https://bugs.webkit.org/show_bug.cgi?id=81984

        Reviewed by Adam Barth.

        * Scripts/VCSUtils.pm:
        (adjustPathForRecentRenamings):

2012-03-22  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        [CMake] Fix build-jsc after r111778 and r111797.
        https://bugs.webkit.org/show_bug.cgi?id=82001

        Reviewed by Filip Pizlo.

        Contrary to the comment in build-jsc, buildCMakeProjectOrExit()
        does return if no error occurred, and build-jsc failed with
        "building not defined for this platform".

        * Scripts/build-jsc: Always exit after caling
        buildCMakeProjectOrExit().
        * Scripts/webkitdirs.pm:
        (buildCMakeProjectOrExit): Return 0 if no error occurred.

2012-03-22  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        [CMake] Unreviewed build fix after r111778.

        * DumpRenderTree/efl/CMakeLists.txt: Replace
        ${JAVASCRIPTCORE_DIR}/wtf with ${WTF_DIR}/wtf in the include
        paths.
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp: Use the right
        wtf include.
        * DumpRenderTree/efl/WorkQueueItemEfl.cpp: Ditto.
        * WinCELauncher/CMakeLists.txt: Replace ${JAVASCRIPTCORE_DIR}/wtf
        with ${WTF_DIR}/wtf in the include paths.

2012-03-22  Filip Pizlo  <fpizlo@apple.com>

        Tools/Scripts/build-jsc doesn't work after WTF move
        https://bugs.webkit.org/show_bug.cgi?id=81999

        Reviewed by Eric Seidel.
        
        For ports that require WTF and JSC to be built as two projects and where
        the machinery to build both does not already exist, teach the tool to do
        so for us.

        * Scripts/build-jsc:
        (buildMyProject):

2012-03-22  Ojan Vafai  <ojan@chromium.org>

        Fix accidental missing line in r111793.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:
        Remove base.values. It was unused and duplicates the builtin Object.values.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        Accidentally deleted this line before committing r111793.

2012-03-22  Ojan Vafai  <ojan@chromium.org>

        Move garden-o-matic progress feedback from non-modal dialogs to a status console anchored to the bottom of the page
        https://bugs.webkit.org/show_bug.cgi?id=81983

        Reviewed by Adam Barth.

        The dialogs get in the way if you are doing multiple rebaselines. Also,
        a number of people didn't realize that you could do multiple rebaselines
        in parallel. A non-modal dialog is just confusing.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        If we're only rebaselining 1 test, show the test name in the initial message. Otherwise,
        show the number of tests being rebaselined.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        Turn MessageBox into StatusArea. StatusArea is a singleton and messages in the StatusArea are grouped
        by ID. That way, the results of each UI action (e.g. clicking rebaseline) are grouped together
        into a single area.

        Once addFinalMessage has been called for all IDs, we show the close button. Clicking close
        also serves to clear all teh content in the StatusArea. 

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:

2012-03-22  Tony Chang  <tony@chromium.org>

        Unreviewed, fix chromium build after wtf move.

        Only use newwtf, remove references to wtf.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-03-22  Csaba Osztrogonác  <ossy@webkit.org>

        Actually move WTF files to their new home
        https://bugs.webkit.org/show_bug.cgi?id=81844

        [Qt] Unreviewed buildfix after r111778.

        * DumpRenderTree/qt/DumpRenderTree.pro:

2012-03-22  Dan Bernstein  <mitz@apple.com>

        Font fallback in WebKitTestRunner depends on user settings
        https://bugs.webkit.org/show_bug.cgi?id=81978

        Reviewed by Jessie Berlin.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize): Added an AppleLanguages key
        with a value consisting of the array ("en") to the override defaults
        dictionary. This is the same value used in DumpRenderTree, and it
        ensures that font fallback follows a consistent path that is not
        affected by the language preferences of the user running the test.

2012-03-22  Andy Estes  <aestes@apple.com>

        check-for-inappropriate-objc-class-names should ignore the class defined by libarclite.
        https://bugs.webkit.org/show_bug.cgi?id=81971

        Reviewed by Dan Bernstein.

        Xcode will automatically link ObjC binaries against libarclite in some
        cases, which defines a class called __ARCLite__.
        check-for-inappropriate-objc-class-names shouldn't complain about this
        class name.

        * Scripts/check-for-inappropriate-objc-class-names:

2012-03-22  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests blames the wrong test for crashing
        https://bugs.webkit.org/show_bug.cgi?id=81951

        Reviewed by Adam Barth.

        NRWT wasn't extracting the WebProcess pid correct; should've
        used re.search instead of re.match :(. Add more tests!

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.has_crashed):
        (WebKitDriver._check_for_driver_crash):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitDriverTest.test_no_timeout):
        (WebKitDriverTest):
        (WebKitDriverTest.test_check_for_driver_crash):
        (WebKitDriverTest.test_check_for_driver_crash.FakeServerProcess):
        (WebKitDriverTest.test_check_for_driver_crash.FakeServerProcess.__init__):
        (WebKitDriverTest.test_check_for_driver_crash.FakeServerProcess.pid):
        (WebKitDriverTest.test_check_for_driver_crash.FakeServerProcess.name):
        (WebKitDriverTest.test_check_for_driver_crash.FakeServerProcess.has_crashed):
        (WebKitDriverTest.test_check_for_driver_crash.assert_crash):

2012-03-22  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [DRT] Implement LayoutTestController::markerTextForListItem()
        https://bugs.webkit.org/show_bug.cgi?id=81512

        Adding missing implementation markerTextForListItem to EFL's
        LayoutTestController so that we can unskip related tests from
        the skip list.

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::markerTextForListItem): Implemented.

2012-03-22  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] Enable view mode media feature layout tests
        https://bugs.webkit.org/show_bug.cgi?id=81205

        Adding missing implementation setViewModeMediaFeature to EFL's 
        LayoutTestController so that we can unskip view mode 
        media feature layout tests.

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setViewModeMediaFeature): Implemented.

2012-03-22  Dirk Pranke  <dpranke@chromium.org>

        nrwt: crash while stopping layout test helper on apple mac lion
        https://bugs.webkit.org/show_bug.cgi?id=81949

        Reviewed by Eric Seidel.

        stop_helper() didn't work right if the helper process wasn't
        still running or didn't respond properly to being shut down. Fix
        this and add some tests. Also add code to MockExecutive() to be
        able to mock executive.popen() properly.

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockProcess.__init__):
        (MockProcess.wait):
        (MockExecutive.__init__):
        (MockExecutive.popen):
        * Scripts/webkitpy/common/system/systemhost_mock.py:
        (MockSystemHost.__init__):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.start_helper):
        (MacPort.stop_helper):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_get_crash_log):
        (test_helper_starts):
        (test_helper_fails_to_start):
        (test_helper_fails_to_stop):
        (test_helper_fails_to_stop.bad_waiter):

2012-03-22  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Add make to the jhbuild moduleset
        https://bugs.webkit.org/show_bug.cgi?id=81769

        Reviewed by Martin Robinson.

        Mostly based on a patch by Carlos Garcia Campos <cgarcia@igalia.com>.
        Add GNU make with custom patches to fix several issues:

        - make-3.82-arg-list-length.patch: Patch by Ralf Wildenhues to
          fix the argument list limit of GNU make when running make
          distcheck.
        - make-3.82-parallel-build.patch: Patch by Kamil Mierzejewski
          and Jeremy Devenport to fix parallel build issues present in
          GNU make 3.82

        * gtk/jhbuild.modules: Added make with patches.
        * gtk/patches/make-3.82-arg-list-length.patch: Added.
        * gtk/patches/make-3.82-parallel-build.patch: Added.

2012-03-22  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Adding Source/WTF to the build and updating
        waf port list.

        * DumpRenderTree/wscript:
        * waf/build/settings.py:

2012-03-22  Dirk Pranke  <dpranke@chromium.org>

        Re-land fix for r81603 yet again (!) with latest build fix.
        https://bugs.webkit.org/show_bug.cgi?id=81603

        Unreviewed, build fix.

        The latest problem was a bad sprintf() in
        BasePort._get_crash_log(). I've reworked that routine and added
        unit tests for coverage.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._handle_error):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):
        (TestResultWriter.write_crash_log):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.diff_text):
        (Port._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.run_test):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.test_crash_log):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverOutput.__init__):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.is_lion):
        (MacPort._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_default_child_processes):
        (test_get_crash_log):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest.test_get_crash_log):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_get_crash_log):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestDriver.run_test):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.__init__):
        (WebKitDriver._start):
        (WebKitDriver.has_crashed):
        (WebKitDriver._check_for_driver_crash):
        (WebKitDriver.run_test):

2012-03-22  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Enable support for handling database quota's in the MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=81928

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-03-22  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] Implement LayoutTestController::setEditingBehavior
        https://bugs.webkit.org/show_bug.cgi?id=81124

        Adding missing implementation setEditingBehavior to EFL's
        LayoutTestController. This implementation allows us to
        unskip some tests from the skip list.

        Reviewed by Martin Robinson.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setEditingBehavior): Implemented.

2012-03-22  Carlos Garcia Campos  <cgarcia@bb-webkit-rel-64.local.igalia.com>

        [GTK] Use the angle-bracket form to include wtf headers
        https://bugs.webkit.org/show_bug.cgi?id=81884

        Reviewed by Eric Seidel.

        Use #include <wtf/foo> instead of #include "foo".

        * DumpRenderTree/gtk/AccessibilityCallbacks.cpp:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        * DumpRenderTree/gtk/EditingCallbacks.cpp:
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:

2012-03-22  Alexander Færøy  <alexander.faeroy@nokia.com>

        Unreviewed, add Michael Brüning and Allan Jensen to committers.py.

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

2012-03-22  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Enable FAST_MOBILE_SCROLLING when scrolling is delegated.
        https://bugs.webkit.org/show_bug.cgi?id=81889

        Reviewed by Kenneth Rohde Christiansen.

        Enable FAST_MOBILE_SCROLLING feature.

        * qmake/mkspecs/features/features.prf:

2012-03-22  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        [EFL] DRT: Do not pass a relative path to DOWNLOADED_FONTS_DIR.
        https://bugs.webkit.org/show_bug.cgi?id=81900

        Reviewed by Gustavo Noronha Silva.

        r111598 added the DOWNLOADED_FONTS_DIR define, but it used a relative
        path which assumed a certain directory structure for the build
        directory which may noy be true.

        Instead, hardcode the path to the downloaded fonts starting from the
        top-level source directory. While this solution is also far from
        perfect, it makes it more consistent and reliable, and easier to
        tackle at once with the rest of bug 81475.

        * DumpRenderTree/efl/CMakeLists.txt:

2012-03-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Allow to run any jhbuild command with jhbuild-wrapper script
        https://bugs.webkit.org/show_bug.cgi?id=81888

        Reviewed by Philippe Normand.

        * Scripts/update-webkit-libs-jhbuild:
        (runJhbuild): Helper function to run jhbuild with a given command.
        Instead of running jhbuild directly, use the jhbuild-wrapper, so
        that we don't need to run it first to check whether jhbuild is
        installed or not.
        * efl/run-with-jhbuild: Call jhbuild-wrapper with run command.
        * gtk/run-with-jhbuild: Ditto.
        * jhbuild/jhbuild-wrapper: Allow to execute any jhbuild command,
        not only run.

2012-03-22  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, test-webkitpy fix after r111661.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_crash_log):
        (MainTest.test_web_process_crash_log):

2012-03-22  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, test-webkitpy fix after r111642.

        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.setUp):
        (ChromiumDriverTest.test_two_drivers):

2012-03-22  Csaba Osztrogonác  <ossy@webkit.org>

        webkitpy: clean up actually getting crash logs from DRT/WTR crashes
        https://bugs.webkit.org/show_bug.cgi?id=81603

        Unreviewed rolling out r111609 and part of r111615,
        because it broke NRWT on Qt-WK2 platform.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._handle_error):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):
        (TestResultWriter.write_crash_report):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.is_crash_reporter):
        (Port._driver_class):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.run_test):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.test_crashed_process_name):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverOutput.__init__):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort):
        (MacPort.is_crash_reporter):
        (MacPort.release_http_lock):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestDriver.run_test):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.__init__):
        (WebKitDriver._start):
        (WebKitDriver.has_crashed):
        (WebKitDriver._check_for_driver_crash):
        (WebKitDriver.run_test):

2012-03-22  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Add full platforms to Qt buildslaves
        https://bugs.webkit.org/show_bug.cgi?id=81877

        Reviewed by Ryosuke Niwa.

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

2012-03-21  Johnny Ding  <jnd@chromium.org>

        Customize layout test timeout value for different ports.
        https://bugs.webkit.org/show_bug.cgi?id=79859

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.default_test_timeout_ms):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.stop):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.default_test_timeout_ms):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):

2012-03-21  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        Ensure that our test tools don't try and use RTTI unnecessarily.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2012-03-21  Adam Barth  <abarth@webkit.org>

        WebKit should have some scripts to smooth interactions with GitHub
        https://bugs.webkit.org/show_bug.cgi?id=81842

        Reviewed by Eric Seidel.

        These scripts support the workflow in
        https://trac.webkit.org/wiki/UsingGitHub by automating the
        configuration and syncing operations needed for a GitHub fork of WebKit
        to track the main WebKit repository.

        * Scripts/configure-github-as-upstream: Added.
        * Scripts/sync-master-with-upstream: Added.

2012-03-21  Dirk Pranke  <dpranke@chromium.org>

        WTR - log the pid of a crashing WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=81575

        Reviewed by Alexey Proskuryakov.

        This allows run-webkit-tests to find the right crash log for a
        given crashed WebProcess in WebKit2.

        * WebKitTestRunner/TestController.cpp:
        (WTR::exceededDatabaseQuota):
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::runTest):
        (WTR::TestController::processDidCrash):

2012-03-21  Enrica Casucci  <enrica@apple.com>

        WebKitURLWithTitles pasteboard format should support URLs containing Emoji characters.
        https://bugs.webkit.org/show_bug.cgi?id=81835
        <rdar://problem/11082749>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/mac/ContextMenuCanCopyURL.html:
        * TestWebKitAPI/Tests/mac/ContextMenuCanCopyURL.mm:
        (TestWebKitAPI::contextMenuCopyLink):

2012-03-21  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Make CSS Shaders compile on Chromium
        https://bugs.webkit.org/show_bug.cgi?id=81435

        Reviewed by Stephen White.
        
        I've added WebKitCSSCustomFilterEnabled support for the layoutTestController.overridePreference function.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):

2012-03-21  Dirk Pranke  <dpranke@chromium.org>

        fix regression on gtk port introduced by r111609
        https://bugs.webkit.org/show_bug.cgi?id=81839

        Reviewed by Philippe Normand.

        r111609 should've initialized a couple of missing fields in
        WebKitDriver, and also should've checked for method overrides
        in the other ports :(.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkDriver._start):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.__init__):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_crash_log):
        (MainTest.test_web_process_crash_log):

2012-03-21  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up actually getting crash logs from DRT/WTR crashes
        https://bugs.webkit.org/show_bug.cgi?id=81603

        Reviewed by Adam Barth.

        Add a new _get_crash_log() overridable method on the Port
        object to customize how we fetch crash logs per port.
        Mac will now slow-spin with a timeout waiting for the crash log, rather
        than waiting for the ReportCrash process to exit (it appears
        that the mac will manage multiple crashes with a single
        ReportCrash process, the process waits around longer than
        necessary, presumably to avoid thrashing if processes are
        repeatedly crashing).

        Also, add the DriverOutput should contain the crash log and other info,
        which is created in a port-specific manner but can then be
        treated generically. Previously single_test_runner would get
        told that something crashed and attempt to do something to get
        the crash log, but it didn't have the information it needed to
        od the right thing; better to make the driver hand back the
        right info.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._handle_error):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):
        (TestResultWriter.write_crash_log):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.diff_text):
        (Port._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.run_test):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.test_crash_log):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverOutput.__init__):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.is_lion):
        (MacPort._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestDriver.run_test):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.__init__):
        (WebKitDriver._start):
        (WebKitDriver.has_crashed):
        (WebKitDriver._check_for_driver_crash):
        (WebKitDriver.run_test):

2012-03-21  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        [EFL] Use jhbuild downloaded fonts instead of hardcoded system font paths
        https://bugs.webkit.org/show_bug.cgi?id=81507

        Now that we're only loading from one directory, no need to
        iterate over a list of directories anymore.

        Reviewed by Martin Robinson.

        * DumpRenderTree/efl/CMakeLists.txt:
        * DumpRenderTree/efl/FontManagement.cpp:
        (addFontDirectory):
        (addFontsToEnvironment):

2012-03-21  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: get ServerProcess out of the reportcrash business
        https://bugs.webkit.org/show_bug.cgi?id=81600

        Unreviewed, build fix.

        Re-land r111307 and r111293 with another fix for a crash in NRWT;
        we need to check if the driver has crashed before attempting to
        read from it.


        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess._reset):
        (ServerProcess._handle_possible_interrupt):
        (ServerProcess.write):
        (ServerProcess.read_stdout):
        (ServerProcess.has_crashed):
        (ServerProcess._read):
        (ServerProcess.stop):
        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
        (TrivialMockPort.check_for_leaks):
        (TestServerProcess.test_broken_pipe):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._read_image_diff):
        (WebKitDriver.has_crashed):
        (WebKitDriver._check_for_driver_crash):
        (WebKitDriver.run_test):
        (WebKitDriver._read_block):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (MockServerProcess.__init__):
        (MockServerProcess):
        (MockServerProcess.has_crashed):

2012-03-21  Zeno Albisser  <zeno@webkit.org>

        [Qt][Mac] ranlib segfaults when creating symbol tables for libWebCore.a.
        https://bugs.webkit.org/show_bug.cgi?id=81750

        Building WebCore on mac currently creates an archive that is bigger than
        4GB. But ranlib fails to create a symbol table for such a big archive,
        even on 64bit machines.
        Therefore we start using SVGAllInOne.cpp when building debug
        on mac. This reduces the size of the archive by about 300MB.

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/mac/default_pre.prf:

2012-03-21  Szilard Ledan  <szledan@inf.u-szeged.hu>

        Updated the address list of committers.py.

        Reviewed by Csaba Osztrogonác.

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

2012-03-21  W. James MacLean  <wjmaclean@chromium.org>

        Updating my nick in committers file.

        Unreviewed.

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

2012-03-21  Peter Beverloo  <peter@chromium.org>

        [Chromium] Remove Android build-fix when the proper fix rolled into WebKit
        https://bugs.webkit.org/show_bug.cgi?id=80861

        Reviewed by Tony Chang.

        Remove most Android-specific logic from webkitdirs.pm in favor of
        handling this during project generation time.

        * Scripts/webkitdirs.pm:
        (buildChromiumMakefile):

2012-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Allow running javascript from location bar in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=81331

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (activateUriEntryCallback): Use browser_window_load_uri().
        (browser_window_load_uri): Check whether uri starts with
        javascript: and run the given script, or just call
        webkit_web_view_load_uri() to load the given uri.
        * MiniBrowser/gtk/BrowserWindow.h:
        * MiniBrowser/gtk/main.c:
        (createBrowserWindow): Use browser_window_load_uri().

2012-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_web_view_run_javascript() to WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=75543

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/GNUmakefile.am: Add javascriptcore_cppflags to
        MiniBrowser CPP flags.

2012-03-20  Eric Seidel  <eric@webkit.org>

        Move wtf/Platform.h from JavaScriptCore to Source/WTF/wtf
        https://bugs.webkit.org/show_bug.cgi?id=80911

        Reviewed by Adam Barth.

        Update include paths for Source/WTF.

        * DumpRenderTree/efl/CMakeLists.txt:
        * DumpRenderTree/qt/DumpRenderTree.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * Scripts/build-webkit: Build Source/WTF on AppleWin as well.

2012-03-20  Adam Barth  <abarth@webkit.org>

        svn-apply should move inflight patches from WebCore/webaudio to WebCore/Modules/webaudio
        https://bugs.webkit.org/show_bug.cgi?id=81567

        Reviewed by Eric Seidel.

        This temporary measure should help us avoid disrupting the folks
        working on WebAudio when we move the webaudio directory to Modules.

        * Scripts/VCSUtils.pm:
        (adjustPathForRecentRenamings):
        (parseGitDiffHeader):
        (parseSvnDiffHeader):

2012-03-20  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, rolling out r111453.
        http://trac.webkit.org/changeset/111453
        https://bugs.webkit.org/show_bug.cgi?id=81600

        still broken

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess._reset):
        (ServerProcess.handle_interrupt):
        (ServerProcess.write):
        (ServerProcess._check_for_crash):
        (ServerProcess._handle_timeout):
        (ServerProcess._check_for_abort):
        (ServerProcess._read):
        (ServerProcess.stop):
        (ServerProcess):
        (ServerProcess.set_crashed):
        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
        (TrivialMockPort.is_crash_reporter):
        (TestServerProcess.test_broken_pipe):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._read_image_diff):
        (WebKitDriver.has_crashed):
        (WebKitDriver._check_for_driver_crash):
        (WebKitDriver):
        (WebKitDriver._detected_crash):
        (WebKitDriver._subprocess_crashed):
        (WebKitDriver._crashed_process_name):
        (WebKitDriver.run_test):
        (WebKitDriver._read_block):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (MockServerProcess.__init__):

2012-03-20  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: get ServerProcess out of the reportcrash business
        https://bugs.webkit.org/show_bug.cgi?id=81600

        Unreviewed, build fix.

        Re-land r111307 and r111293 with fix for crash in NRWT; I
        was failing to set the crashing process name.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess._reset):
        (ServerProcess._handle_possible_interrupt):
        (ServerProcess.write):
        (ServerProcess.read_stdout):
        (ServerProcess.has_crashed):
        (ServerProcess._read):
        (ServerProcess.stop):
        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
        (TrivialMockPort.check_for_leaks):
        (TestServerProcess.test_broken_pipe):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._read_image_diff):
        (WebKitDriver.has_crashed):
        (WebKitDriver._check_for_driver_crash):
        (WebKitDriver.run_test):
        (WebKitDriver._read_block):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (MockServerProcess.__init__):
        (MockServerProcess):
        (MockServerProcess.has_crashed):

2012-03-20  Tim Horton  <timothy_horton@apple.com>

        [mac] Restore color space switching code to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=80571
        <rdar://problem/11008529>

        Reviewed by Simon Fraser.

        http://trac.webkit.org/changeset/111429 broke tools build on Snow Leopard.
        
        Use the old CM* API on Snow Leopard, since CGDisplayCreateUUIDFromDisplayID
        didn't exist until Lion.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (installLayoutTestColorProfile):
        (restoreUserColorProfile):

2012-03-20  Adele Peterson  <adele@apple.com>

        Update the last test to use EXPECT_WK_STREQ.

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/mac/AttributedString.mm: (TestWebKitAPI::TEST):

2012-03-20  Adele Peterson  <adele@apple.com>

        "Attempt to insert nil value " exception when calling attributed string APIs on content with a custom font
        https://bugs.webkit.org/show_bug.cgi?id=81630
        <rdar://problem/10650660>

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/Ahem.ttf: Added.
        * TestWebKitAPI/Tests/mac/AttributedString.mm: Added.
        (-[AttributedStringTest webView:didFinishLoadForFrame:]):
        (TestWebKitAPI):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/attributedStringCustomFont.html: Added.

2012-03-20  Eric Seidel  <eric@webkit.org>

        Add link on queues.webkit.org to kov's fancy queue-depth graph
        https://bugs.webkit.org/show_bug.cgi?id=81690

        Reviewed by Adam Barth.

        * QueueStatusServer/templates/recentstatus.html:

2012-03-20  Tim Horton  <timothy_horton@apple.com>

        [mac] Restore color space switching code to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=80571
        <rdar://problem/11008529>

        Reviewed by Simon Fraser.

        Make use of the layout test helper hooks to restore the Mac system-wide
        color profile switching code. This makes WkTR and DRT results match, and
        causes the main display's color profile to not affect results on Lion.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/LayoutTestHelper.m: Added.
        (installLayoutTestColorProfile):
        (restoreUserColorProfile):
        (simpleSignalHandler):
        (main):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.release_http_lock):
        (MacPort):
        (MacPort._path_to_helper):
        (MacPort.start_helper):
        (MacPort.stop_helper):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::windowSnapshotImage):

2012-02-24  Darin Fisher  <darin@chromium.org>

        Add more Chromium WebKit API reviewers
        https://bugs.webkit.org/show_bug.cgi?id=81576

        Reviewed by Adam Barth and David Levin.

        Simplify watchlist to lump all WebKit API into one.

        * Scripts/webkitpy/common/config/watchlist:

2012-03-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Convert hasSpellingMarker to use Internals interface.
        https://bugs.webkit.org/show_bug.cgi?id=81300

        Reviewed by Ryosuke Niwa.

        Remove hasSpellingMarker functions, because it is able to work in the
        cross-port way through the Internals interface.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:

2012-03-20  Csaba Osztrogonác  <ossy@webkit.org>

        Add new Qt-WK2 performance tester bot to build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=80842

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunAndUploadPerfTestsWebKit2):
        (RunAndUploadPerfTestsWebKit2.start):
        (BuildAndPerfTestWebKit2Factory):
        (BuildAndPerfTestWebKit2Factory.__init__):
        (DownloadAndPerfTestWebKit2Factory):
        (DownloadAndPerfTestWebKit2Factory.__init__):

2012-03-20  Peter Beverloo  <peter@chromium.org>

        [Chromium] Update to Android NDK r7b
        https://bugs.webkit.org/show_bug.cgi?id=81005

        Reviewed by Adam Barth.

        Update to version r7b of the Android NDK, release notes of which are
        available on the following page:
        http://developer.android.com/sdk/ndk/index.html

        * Scripts/update-webkit-chromium:

2012-03-20  Csaba Osztrogonác  <ossy@webkit.org>

        x86 GCC bug triggers a compilation error in generated copy constructor of CollapsedBorderValue
        https://bugs.webkit.org/show_bug.cgi?id=81502

        Unreviewed.

        * qmake/mkspecs/features/unix/default_post.prf: Reenable Werror after r111171.

2012-03-19  Jessie Berlin  <jberlin@apple.com>

        Unreviewed; roll out http://trac.webkit.org/changeset/111307 and http://trac.webkit.org/changeset/111293
        because they broke running the layout tests on mac.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver._check_for_driver_crash):

2012-03-16  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Allow running run-gtk-tests during 'make distcheck'
        https://bugs.webkit.org/show_bug.cgi?id=81415

        Reviewed by Philippe Normand.

        Modify the build and run-gtk-tests so that it can run during 'make distcheck'

        * GNUmakefile.am: Distribute run-gtk-tests during 'make dist' and make it the
        main command run during 'make check.'
        * Scripts/run-gtk-tests: Refactored run-gtk-tests so that jhbuild is no longer
        a requirement to run it. If jhbuild isn't around it will simply not start the
        SPI daemons and skip the WebKit2 accessibility test. Remove test runs from the
        main loop and simply use the main loop in a synchronous method to start SPI
        daemons. Did a bunch of general cleanup around these tasks.

2012-03-19  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        jhbuild: Use the multiprocessing module to get the number of CPUs.
        https://bugs.webkit.org/show_bug.cgi?id=81585

        Reviewed by Martin Robinson.

        Now that support for Python 2.5 has been dropped, we can safely
        use multiprocessing.cpu_count() to obtain the current number of
        CPUs in the system instead of running a webkitperl script for
        that.

        * efl/common.py:
        (top_level_path):
        * efl/jhbuildrc:
        * gtk/common.py:
        (build_path):
        * gtk/jhbuildrc:

2012-03-19  Ojan Vafai  <ojan@chromium.org>

        We should only add a live event listener once, not once per TestSelector.
        Adding one per TestSelector would cause accordion('option', 'active') to
        incorrectly be "false" if you examine multiple sets of tests.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:

2012-03-19  Dirk Pranke  <dpranke@chromium.org>

        Fix typo introduced in r111293.

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver._check_for_driver_crash):

2012-03-19  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: get ServerProcess out of the reportcrash business
        https://bugs.webkit.org/show_bug.cgi?id=81600

        Reviewed by Adam Barth.

        ServerProcess was half-aware that ReportCrash might run
        sometimes, and that the process ServerProcess was talking to
        might have its own crashing subprocesses; neither of these
        things really worked right and it made the logic convoluted, so
        this change makes handling crashes completely separate from the
        server_process code, so that it can focus on just I/O to the
        subprocess.

        There should be no functional changes resulting from this patch.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess._reset):
        (ServerProcess._handle_possible_interrupt):
        (ServerProcess.write):
        (ServerProcess.read_stdout):
        (ServerProcess.has_crashed):
        (ServerProcess._read):
        (ServerProcess.stop):
        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
        (TrivialMockPort.check_for_leaks):
        (TestServerProcess.test_broken_pipe):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._read_image_diff):
        (WebKitDriver.has_crashed):
        (WebKitDriver._check_for_driver_crash):
        (WebKitDriver.run_test):
        (WebKitDriver._read_block):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (MockServerProcess.__init__):
        (MockServerProcess):
        (MockServerProcess.has_crashed):

2012-03-19  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: crashlog parsing is broken
        https://bugs.webkit.org/show_bug.cgi?id=81586

        Reviewed by Adam Barth.

        Seeking on a file opened through codecs() appears to not work
        correctly (at least on SL).
        
        The code was more complicated than it needed to be, so I have
        revamped it to just read a full crashlog at once and then look
        for matches. 
        
        I have also added the ability to optionally propagate
        errors back (which can be helpful to debug races when ReportCrash is
        still running and you need to see that you couldn't open some
        files, rather than just ignoring them).

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs.find_newest_log):
        (CrashLogs._find_newest_log_darwin):
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (CrashLogsTest.test_find_log_darwin):

2012-03-19  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up some port._filesystem references to not reference private members
        https://bugs.webkit.org/show_bug.cgi?id=81595

        Reviewed by Eric Seidel.

        There should be no functional changes in this patch, just some
        refactoring. Also, fixes a minor nit in write_image_diff_files(()

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__):
        (SingleTestRunner._run_compare_test):
        (SingleTestRunner._run_rebaseline):
        (SingleTestRunner._save_baseline_data):
        (SingleTestRunner._handle_error):
        (SingleTestRunner._run_reftest):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):
        (TestResultWriter.__init__):
        (TestResultWriter._make_output_directory):
        (TestResultWriter.output_filename):
        (TestResultWriter._output_testname):
        (TestResultWriter.write_output_files):
        (TestResultWriter.write_stderr):
        (TestResultWriter.write_crash_report):
        (TestResultWriter.create_text_diff_and_write_result):
        (TestResultWriter.write_image_diff_files):
        (copy_file):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer_unittest.py:
        (TestResultWriterTest.test_reftest_diff_image):

2012-03-19  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: fix nit - incorrect reference to DRT in test_expectations.py
        https://bugs.webkit.org/show_bug.cgi?id=81598

        Reviewed by Eric Seidel.

        "DumpRenderTree" shouldn't be hard-coded here, since some other
        process may actually be crashing (WebKitTestRunner, WebProcess, etc.)
        
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations):

2012-03-19  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: allow instance data in TestFailure objects
        https://bugs.webkit.org/show_bug.cgi?id=81580

        Reviewed by Tony Chang.

        Current TestFailures are basically enums, but it would be nice,
        especially for crashes, if they contained the name and pid of
        the process that crashed.

        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (TestFailure.message):
        (FailureTimeout.message):
        (FailureCrash):
        (FailureCrash.__init__):
        (FailureCrash.message):
        (FailureMissingResult.message):
        (FailureTextMismatch.message):
        (FailureMissingImageHash.message):
        (FailureMissingImage.message):
        (FailureImageHashMismatch.message):
        (FailureImageHashIncorrect.message):
        (FailureReftestMismatch.message):
        (FailureReftestMismatchDidNotOccur.message):
        (FailureReftestNoImagesGenerated.message):
        (FailureMissingAudio.message):
        (FailureAudioMismatch.message):
        * Scripts/webkitpy/layout_tests/models/test_failures_unittest.py:
        (TestFailuresTest.test_equals):
        (TestFailuresTest):
        (TestFailuresTest.test_crashes):

2012-03-19  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10917120> and https://bugs.webkit.org/show_bug.cgi?id=81066
        Crash in 3rd party WebKit apps under XHR/Cache code

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/MemoryCachePruneWithinResourceLoadDelegate.html: Added.
        * TestWebKitAPI/Tests/mac/MemoryCachePruneWithinResourceLoadDelegate.mm: Added.
        (-[MemoryCachePruneTestResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        (-[MemoryCachePruneTestResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        (-[MemoryCachePruneTestResourceLoadDelegate webView:resource:didFinishLoadingFromDataSource:]):
        (-[MemoryCachePruneTestResourceLoadDelegate webView:resource:didFailLoadingWithError:fromDataSource:]):
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2012-03-19  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10848575> and https://bugs.webkit.org/show_bug.cgi?id=81516
        REGRESSION (r107435) URLs copied from WebKit apps aren't in the right pasteboard format

        Reviewed by Enrica Casucci.

        Bring up a context menu on a link, copy the link, then verify the pasteboard contents
        are in the correct format.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/ContextMenuCanCopyURL.html: Added.
        * TestWebKitAPI/Tests/mac/ContextMenuCanCopyURL.mm: Added.
        (-[ContextMenuCanCopyURLDelegate webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::contextMenuCopyLink):
        (TestWebKitAPI::TEST):

2012-03-19  Ojan Vafai  <ojan@chromium.org>

        Make the selected item in the accordion a link to the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=81571

        Reviewed by Dimitri Glazkov.

        Also, make it so that you can select the text of the link, instead of the current behavior
        of acting as if you had clicked on the accordion header.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:

2012-03-19  Dirk Pranke  <dpranke@chromium.org>

        NRWT runs some tests that are skipped with -i command line option
        https://bugs.webkit.org/show_bug.cgi?id=81535

        Reviewed by Ojan Vafai.

        This change modifies the interaction of Skipped files and
        test_expectations files so that entries in Skipped files (and
        the -i command line) override *everything* in the expectations
        file.

        Specifically, a directory in a Skipped file will cause all of
        the tests in the dir to be skipped even if individual tests in
        the dir are listed in the test_expectations.txt.

        Skipped files also override anything in an overrides files.

        This seems to make more intuitive sense, since if you list
        something in the Skips file (and even more specify it on the
        command line) you probably want it to be universally applied.

        Theoretically we could add more precedence levels and have full
        paths in an expectations file override dirs in a Skipped file
        (but not the command line), but I don't know yet that that level
        of complexity is justified.
        
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__):
        (TestExpectations._add_skipped_tests):
        (TestExpectations._add_test):
        (TestExpectations._add_expectations):
        (TestExpectations._add_expectation_line):
        (TestExpectations._already_seen_better_match):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_more_specific_override_resets_skip):
        (SkippedTests):
        (SkippedTests.get_exp):
        (SkippedTests.assert_exp):
        (SkippedTests.test_skipped_tests_work):
        (SkippedTests.test_duplicate_skipped_test_fails_lint):
        (SkippedTests.test_skipped_file_overrides_expectations):
        (SkippedTests.test_skipped_dir_overrides_expectations):
        (SkippedTests.test_skipped_file_overrides_overrides):
        (SkippedTests.test_skipped_dir_overrides_overrides):

2012-03-19  Eric Seidel  <eric@webkit.org>

        Fix WTF header include discipline in Chromium WebKit
        https://bugs.webkit.org/show_bug.cgi?id=81281

        Reviewed by James Robinson.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * Scripts/update-webkit-chromium: Made it possible to run this from a directory other than the root.

2012-03-19  Andy Chen  <andchen@rim.com>

        [BlackBerry] Add new layout test for text match marker
        https://bugs.webkit.org/show_bug.cgi?id=81531

        Make the LayoutTestControllerBlackBerry::findString to test the
        BlackBerry port implementation.

        Reviewed by Rob Buis.

        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        (LayoutTestController::findString):

2012-03-19  Ojan Vafai  <ojan@chromium.org>

        Don't show WONTFIX tests in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=81554

        Reviewed by Dimitri Glazkov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js:

2012-03-19  Chris Fleizach  <cfleizach@apple.com>

        platform/mac/accessibility/selected-rows-table.html failing on Lion Intel Debug WebKit2 testers
        https://bugs.webkit.org/show_bug.cgi?id=81530

        Reviewed by Jessie Berlin.

        Add rowAtIndex to WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::rowAtIndex):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR):
        (WTR::AccessibilityUIElement::rowAtIndex):

2012-03-19  Ojan Vafai  <ojan@chromium.org>

        Change garden-o-matic All Failures tab to Expected Failures
        https://bugs.webkit.org/show_bug.cgi?id=81540

        Reviewed by Dimitri Glazkov.

        Also, fix some broken unittests that had just gotten stale.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers/rebaseline.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:

2012-03-19  Hao Zheng  <zhenghao@chromium.org>

        [chromium] DRT crashes at shutdown.
        https://bugs.webkit.org/show_bug.cgi?id=81504

        Reviewed by James Robinson.

        WebCompositor must be destroyed after WebView is properly destroyed,
        or some compositor objects like CCLayerTreeHost may not be destroyed.
        However, it is really hard to make the destruction order correct
        explicitly in ~TestShell. So move it out to DumpRenderTree.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::~TestShell):

2012-03-19  Dirk Pranke  <dpranke@chromium.org>

        add dpranke to webkitpy watchlist
        https://bugs.webkit.org/show_bug.cgi?id=81433

        Reviewed by Benjamin Poulain.

        * Scripts/webkitpy/common/config/watchlist:

2012-03-19  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy is failing on SL/Python 2.6.1
        https://bugs.webkit.org/show_bug.cgi?id=81533

        Reviewed by Ojan Vafai.

        It appears that itertools.combinations() is buggy in 2.6.1; this
        backports the implementation from 2.7.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        (TestConfigurationConverter.collapse_macros):
        (TestConfigurationConverter):
        (TestConfigurationConverter.combinations):

2012-03-19  David Michael Barr  <davidbarr@google.com>

        Optimize the cleanup sequence in the start-queue.sh script
        https://github.com/abarth/webkit/pull/1

        Reviewed by Adam Barth.

        Updating the working copy is an expensive operation
        for a repository the size of WebKit.
        Attempt to reset only to the target revision.

        * EWSTools/start-queue.sh:

2012-03-19  Raphael Kubo da Costa  <kubo@profusion.mobi>

        Adjust architecture type of the EFL build bot.
        https://bugs.webkit.org/show_bug.cgi?id=81452

        Reviewed by Tony Chang.

        * BuildSlaveSupport/build.webkit.org-config/config.json: The
        buildslave is a 64-bit machine, therefore describe it as being
        x86_64, not i386.

2012-03-19  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] printLoadedUrls prints "Object" instead of the actual URL.
        https://bugs.webkit.org/show_bug.cgi?id=81514

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-03-19  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        [EFL] jhbuild: Set CMAKE_PREFIX_PATH in jhbuildrc.
        https://bugs.webkit.org/show_bug.cgi?id=81491

        Reviewed by Philippe Normand.

        For the find_path(), find_library() etc CMake calls to find the
        dependencies built with jhbuild, CMAKE_PREFIX_PATH must be properly
        set, otherwise CMake cannot know the dependencies exist and will only
        look in the standard directories.

        * efl/jhbuildrc: Set the CMAKE_PREFIX_PATH environment variable with
        the jhbuild Root directory.

2012-03-19  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        [EFL] Add XDG env vars to jhbuildrc
        https://bugs.webkit.org/show_bug.cgi?id=81510

        Needed to ensure correct glib behaviour in jhbuild environment.

        Reviewed by Philippe Normand.

        * efl/jhbuildrc:

2012-03-19  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Select best target for tap gesture.
        https://bugs.webkit.org/show_bug.cgi?id=78801

        Reviewed by Kenneth Rohde Christiansen.

        Add TOUCH_ADJUSTMENT to enabled features.

        * qmake/mkspecs/features/features.prf:

2012-03-19  Robert Kroeger  <rjkroege@chromium.org>

        [chromium] synthesize wheel events for fling on main thread
        https://bugs.webkit.org/show_bug.cgi?id=81458

        Added the ability to dispatch GestureFlingStart and GestureFlingCancel from EventSender.

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::gestureFlingCancel):
        (EventSender::gestureFlingStart):
        * DumpRenderTree/chromium/EventSender.h:
        (EventSender):

2012-03-19  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Add command line option to set the user agent in the MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=81508

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::webViewExperimental):
        * MiniBrowser/qt/BrowserWindow.h:
        (BrowserWindow):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (printHelp):
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):
        (WindowOptions::setUserAgent):
        (WindowOptions::userAgent):
        (WindowOptions):

2012-03-19  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Remove dead user agent code from the MiniBrowser.

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/BrowserWindow.cpp:
        * MiniBrowser/qt/BrowserWindow.h:
        (BrowserWindow):
        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/useragentlist.txt: Removed.

2012-03-19  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        jhbuild: Call jhbuild's autogen.sh via bash.
        https://bugs.webkit.org/show_bug.cgi?id=81485

        Reviewed by Philippe Normand.

        jhbuild's autogen.sh uses "/bin/bash" in the shebang line, however
        this is usually true only on Linux systems, and even then bash for
        some reason might not be available in that location. It is safer to
        call bash directly and pass autogen.sh to it instead.

        * jhbuild/jhbuild-wrapper:
        (install_jhbuild):

2012-03-19  Philippe Normand  <pnormand@igalia.com>

        [GTK] Prefix run-launcher with run-with-jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=81503

        Reviewed by Hajime Morita.

        * Scripts/run-launcher:

2012-03-19  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        [EFL] Prefix run-launcher with run-with-jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=80026

        Reviewed by Hajime Morita.

        * Scripts/run-launcher:

2012-03-18  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed. Disable -Werror on x86 until proper fix.
        https://bugs.webkit.org/show_bug.cgi?id=81498

        * qmake/mkspecs/features/unix/default_post.prf:

2012-03-17  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        Unreviewed; switch to using my FreeBSD.org email address, the
        other one is going to disappear soon.

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

2012-03-17  Raphael Kubo da Costa  <kubo@profusion.mobi>

        Unreviewed; fix webkitpy unit test failures after r111116.

        It turns out that cmd_line in the patch in bug 80025 had the right
        signature when it was submitted, but r109242 added a few more
        required parameters, and since the method (and EflDriver) did not
        exist at the time we ended up committing a broken method.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflDriver.cmd_line): Add the `pixel_tests' and `per_test_args'
        arguments.

2012-03-17  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Enable Web Timing for performance profiling and improvement.
        https://bugs.webkit.org/show_bug.cgi?id=81085

        Reviewed by Rob Buis.

        * Scripts/build-webkit:

2012-03-17  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        Add a dependencies installation step for EFL to buildbot master.cfg
        https://bugs.webkit.org/show_bug.cgi?id=81337

        Reviewed by Gustavo Noronha Silva.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (InstallEflDependencies):
        (Factory.__init__):

2012-03-17  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        [EFL] Prefixing run-webkit-tests with run-with-jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=80025

        Reviewed by Gustavo Noronha Silva.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflDriver):
        (EflDriver.cmd_line):
        (EflPort._driver_class):

2012-03-17  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        [EFL] Add and use run-with-jhbuild and update-webkitefl-libs scripts for EFL
        https://bugs.webkit.org/show_bug.cgi?id=79904

        build-webkit --efl will use jhbuild for fetching and building dependencies.

        Reviewed by Gustavo Noronha Silva.

        * Scripts/update-webkitefl-libs: Added.
        * Scripts/webkitdirs.pm:
        (jhbuildWrapperPrefixIfNeeded):
        (generateBuildSystemFromCMakeProject):
        (buildCMakeGeneratedProject):
        * efl/common.py: Added.
        (script_path):
        (top_level_path):
        (number_of_cpus):
        * efl/jhbuild.modules: Added.
        * efl/jhbuildrc: Added.
        * efl/run-with-jhbuild: Added.

2012-03-16  Stephanie Lewis  <slewis@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=81065
        <rdar://problem/10944309> CrashTracer: [USER] 111 crashes in WebProcess at WebKitTestRunnerInjectedBundle: WTR::InjectedBundle::done + 142
        Fix crash preventing WebKitTestRunner from working in Release.  
        WebKitTestRunner used ostringstream to collect output from the test.  ostringstream is incompatible with our
        FastMalloc overrides.  When copying strings out ostringstream a new string is allocated with FastMalloc because
        the allocation is inlined.  When that string is freed is uses the system malloc because that call is not inlined.

        I removed ostringstream in favor of StringBuilder.  

        Properly set NDEBUG on Release builds so we don't crash when when we free the strings StringBuilder created.

        Reviewed by Geoff Garen.

        Add DEBUG_DEFINES to set NDEBUG on release builds.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

        Remove ostringstream member in favor of StringBuilder.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):
        (WTR::InjectedBundle::beginTesting):
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTF):
        (WTR::InjectedBundle::stringBuilder):
        (InjectedBundle):

        Append output to StringBuilder.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::hasPrefix):
        (WTR::dumpPath):
        (WTR::rangeToStr):
        (WTR::styleDecToStr):
        (WTR::frameToStr):
        (WTR::dumpFrameScrollPosition):
        (WTR::dumpFrameText):
        (WTR::dumpDescendantFramesText):
        (WTR::InjectedBundlePage::dump):
        (WTR::InjectedBundlePage::didReceiveTitleForFrame):
        (WTR::InjectedBundlePage::didFinishDocumentLoadForFrame):
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction):
        (WTR::lastFileURLPathComponent):
        (WTR::InjectedBundlePage::willAddMessageToConsole):
        (WTR::InjectedBundlePage::willSetStatusbarText):
        (WTR::InjectedBundlePage::willRunJavaScriptAlert):
        (WTR::InjectedBundlePage::willRunJavaScriptConfirm):
        (WTR::InjectedBundlePage::willRunJavaScriptPrompt):
        (WTR::InjectedBundlePage::shouldBeginEditing):
        (WTR::InjectedBundlePage::shouldEndEditing):
        (WTR::InjectedBundlePage::shouldInsertNode):
        (WTR::InjectedBundlePage::shouldInsertText):
        (WTR::InjectedBundlePage::shouldDeleteRange):
        (WTR::InjectedBundlePage::shouldChangeSelectedRange):
        (WTR::InjectedBundlePage::shouldApplyStyle):
        (WTR::InjectedBundlePage::didBeginEditing):
        (WTR::InjectedBundlePage::didEndEditing):
        (WTR::InjectedBundlePage::didChange):
        (WTR::InjectedBundlePage::didChangeSelection):
        (WTR::InjectedBundlePage::supportsFullScreen):
        (WTR::InjectedBundlePage::enterFullScreenForElement):
        (WTR::InjectedBundlePage::exitFullScreenForElement):
        (WTR::InjectedBundlePage::beganEnterFullScreen):
        (WTR::InjectedBundlePage::beganExitFullScreen):
        (WTR::dumpBackForwardListItem):
        (WTR::InjectedBundlePage::dumpBackForwardList):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::waitToDumpWatchdogTimerFired):
        (WTR::LayoutTestController::dumpConfigurationForViewport):
        
        Convert between WTF::String and WKStringRef.
        * WebKitTestRunner/StringFunctions.h:
        (WTR::toWTFString):
        (WTR):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2012-03-16  Eric Seidel  <eric@webkit.org>

        Add a land-from-url command
        https://bugs.webkit.org/show_bug.cgi?id=81411

        Reviewed by Adam Barth.

        Very basic so far.  The goal is to make it landing smarter
        so that users don't have to bother to parse out the ids out of the urls.

        * Scripts/webkitpy/common/config/urls.py:
        (parse_bug_id):
        (parse_attachment_id):
        * Scripts/webkitpy/common/config/urls_unittest.py:
        (URLsTest.test_parse_bug_id):
        (URLsTest):
        (URLsTest.test_parse_attachment_id):
        * Scripts/webkitpy/tool/commands/download.py:
        (ProcessURLsMixin):
        (ProcessURLsMixin._fetch_list_of_patches_to_process):
        (LandFromURL):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (test_land_from_bug):
        (test_land_from_url):

2012-03-16  Dave Tharp  <dtharp@codeaurora.org>

        build-webkit launcher instructions use wrong relative path for Qt
        https://bugs.webkit.org/show_bug.cgi?id=81357

        Reviewed by Eric Seidel.

        Ensure we are at the proper directory before generating run-launcher
        instructions.

        * Scripts/build-webkit:

2012-03-16  Brady Eidson  <beidson@apple.com>

        <rdar://problem/11027997> and https://bugs.webkit.org/show_bug.cgi?id=81412
        REGRESSION (r107435) Copy a link and paste to Mail: Nothing is pasted

        Reviewed by Geoff Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/WebViewCanPasteURL.mm: Added.

2012-03-16  Ojan Vafai  <ojan@chromium.org>

        Mark wontfix tests in full_results.json so we can ignore them in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=81407

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (summarize_results):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ResultSummaryTest.summarized_results):
        (ResultSummaryTest.test_no_svn_revision):
        (ResultSummaryTest.test_svn_revision):
        (ResultSummaryTest):
        (ResultSummaryTest.test_summarized_results_wontfix):

2012-03-16  Ojan Vafai  <ojan@chromium.org>

        Have webkit-patch rebaseline-test update test_expectations.txt
        https://bugs.webkit.org/show_bug.cgi?id=81054

        Recommit http://trac.webkit.org/changeset/110783 now that
        http://trac.webkit.org/changeset/111034 has landed.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.remove_configuration_from_test):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (RemoveConfigurationsTest):
        (RemoveConfigurationsTest.test_remove):
        (test_remove_line):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._update_expectations_file):
        (RebaselineTest._rebaseline_test_and_update_expectations):
        (RebaselineTest):
        (RebaselineTest.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline_updates_expectations_file_noop):
        (test_rebaseline_updates_expectations_file):

2012-03-15  Ojan Vafai  <ojan@chromium.org>

        Specifier collapsing when writing test expectations lines gets a number of cases wrong
        https://bugs.webkit.org/show_bug.cgi?id=81309

        Reviewed by Dimitri Glazkov.

        I've run this over all the lines in the current Chromium test_expectations.txt file,
        so I'm relatively confident we now cover all the cases.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        (TestConfigurationConverter.__init__):
        (TestConfigurationConverter.collapse_macros):
        (TestConfigurationConverter.collapse_macros.collapse_individual_specifier_set):
        (TestConfigurationConverter):
        (TestConfigurationConverter.intersect_combination):
        (TestConfigurationConverter.symmetric_difference):
        (TestConfigurationConverter.to_specifiers_list):
        (TestConfigurationConverter.to_specifiers_list.try_collapsing):
        (TestConfigurationConverter.to_specifiers_list.try_abbreviating):
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py:
        (make_mock_all_test_configurations_set):
        (TestConfigurationConverterTest.test_symmetric_difference):
        (TestConfigurationConverterTest.test_to_config_set):
        (TestConfigurationConverterTest.test_macro_expansion):
        (TestConfigurationConverterTest.test_to_specifier_lists):
        (TestConfigurationConverterTest.test_converter_macro_collapsing):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        The android port uses "arm" as it's architecture, which is technically correct,
        but considerably complicates making collapsing work. We probably should kill
        the concept of architecture entirely. The benefits are not worth the code
        complexity.

        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_all_test_configurations):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline_updates_expectations_file_noop):
        (test_rebaseline_updates_expectations_file):

2012-03-16  Dinu Jacob  <dinu.jacob@nokia.com>

        [Qt][Wk2] Assertion Failure and crash on file upload
        https://bugs.webkit.org/show_bug.cgi?id=80854

        Reviewed by Simon Hausmann.

        Added filePicker to WebView using experimental API.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/icons/folder.png: Added.
        * MiniBrowser/qt/icons/titlebar.png: Added.
        * MiniBrowser/qt/icons/up.png: Added.
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/FilePicker.qml: Added.

2012-03-16  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Updating email for committer.py script.

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

2012-03-16  Robert Kroeger  <rjkroege@chromium.org>

        [chromium] DRT: Add support for sending gesture scrolls without a begin
        https://bugs.webkit.org/show_bug.cgi?id=81292

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::gestureScrollFirstPoint):
        * DumpRenderTree/chromium/EventSender.h:
        (EventSender):

2012-03-02  Carlos Garcia Campos  <cgarcia@igalia.com> and Sergio Villar Senin  <svillar@igalia.com>

        [GTK] WebKitIconDatabase doesn't keep icons cached
        https://bugs.webkit.org/show_bug.cgi?id=56200

        Reviewed by Martin Robinson.

        Add support for favicons in GtkLauncher.

        * GtkLauncher/main.c:
        (activateUriEntryCb):
        (iconLoadedCb):
        (createBrowser):

2012-03-16  Adam Barth  <abarth@webkit.org>

        Remove sheriff-bot's last-green-revision command
        https://bugs.webkit.org/show_bug.cgi?id=81314

        Reviewed by Eric Seidel.

        This command is a cruel joke.  WebKit doesn't really ever have a
        last-green-revision.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot._find_green_revision):
        * Scripts/webkitpy/common/net/buildbot/buildbot_mock.py:
        (MockBuildBot.builder_statuses):
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (test_find_green_revision):
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (IRCCommand.execute):
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:
        (SheriffIRCBotTest.test_help):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PatchesToReview.execute):

2012-03-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make gccdepends test aware of broken icecream deps generation

        Icecream seems to build the files without passing -o to gcc with
        the original destination path, which means the target name in the
        dependency file is wrong.

        Also, echo something to the final file instead of just touching it,
        so it's not deleted on every build.

        Reviewed by Simon Hausmann.

        * qmake/config.tests/gccdepends/gccdepends.pro:

2012-03-16  Kihong Kwon  <kihong.kwon@samsung.com>

        Support for Battery Status API
        https://bugs.webkit.org/show_bug.cgi?id=62698

        Add include directory and file.
        http://www.w3.org/TR/battery-status/

        Reviewed by Adam Barth.

        * Scripts/build-webkit:

2012-03-16  Kishore Bolisetty  <kbolisetty@innominds.com>

        check-webkit-style fails on LayoutTests/platform/efl/test_expectations.txt
        https://bugs.webkit.org/show_bug.cgi?id=81007

        Reviewed by Adam Barth.

        A dedidcated build slave is available for efl on build.webkit.org. 
        This change add's an entry for the elf port in list of available port builders.
        This is required because test_expectations.py when triggered, looks for a valid port object for the specified port. 

        * Scripts/webkitpy/layout_tests/port/builders.py:

2012-03-16  Adam Barth  <abarth@webkit.org>

        [webkitpy] StatusServer.next_work_item has an incorrectly named local variable
        https://bugs.webkit.org/show_bug.cgi?id=81302

        Reviewed by Eric Seidel.

        This is a trivial patch, but the variable name turned up in a grep of
        webkitpy and looks like copy pasta.

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

2012-03-16  Andrew Lo  <anlo@rim.com>

        [BlackBerry] Enable PAGE_VISIBILITY_API
        https://bugs.webkit.org/show_bug.cgi?id=81257

        Enable Page Visibility API for BlackBerry.

        Reviewed by Rob Buis.

        * Scripts/build-webkit:

2012-03-16  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] Add computedStyleIncludingVisitedInfo to DumpRenderTreeSupport
        https://bugs.webkit.org/show_bug.cgi?id=81232

        Reviewed by Philippe Normand.

        Use the newly-added helper method in DumpRenderTreeSupportGtk.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::computedStyleIncludingVisitedInfo):

2012-03-15  Eric Seidel  <eric@webkit.org>

        Move parse_bug_id into config/urls in preparation for re-use elsewhere.
        https://bugs.webkit.org/show_bug.cgi?id=81313

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (parse_bug_id_from_changelog):
        * Scripts/webkitpy/common/config/urls.py:
        (parse_bug_id):
        * Scripts/webkitpy/common/config/urls_unittest.py: Copied from Tools/Scripts/webkitpy/common/config/urls.py.
        (URLsTest):
        (URLsTest.test_parse_bug_id):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        (test_parse_bug_id):
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (_post_error_and_check_for_bug_url):
        * Scripts/webkitpy/tool/bot/sheriff.py:
        (Sheriff.post_rollout_patch):
        (Sheriff.post_chromium_deps_roll):

2012-03-15  Adam Barth  <abarth@webkit.org>

        The commit-queue should fast-track patches that have already passed the testing EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=81305

        Reviewed by Eric Seidel.

        If a patch has already passed the testing EWS bots (currently only the
        chromium-ews bot), we should be able to land the patch without running
        the tests again.  This patch is somewhat risky in that the tests might
        have been broken between when the EWS bots ran and when the
        commit-queue is processing the patch.  If that turns out to be a
        problem in practice, we'll tighten up this fast-track in some way,
        likely by making sure that the pass status is recent.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        (CommitQueueTaskDelegate.did_pass_testing_ews):
        (CommitQueueTask._did_pass_tests_recently):
        (CommitQueueTask.run):
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        (MockCommitQueue.did_pass_testing_ews):
        (test_fast_success_case):
        * Scripts/webkitpy/tool/commands/queues.py:
        (CommitQueue.did_pass_testing_ews):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (test_did_pass_testing_ews):

2012-03-15  Kentaro Hara  <haraken@chromium.org>

        [PerformanceTests] run-perf-tests should output correct units
        https://bugs.webkit.org/show_bug.cgi?id=78303

        Reviewed by Ryosuke Niwa.

        Previously run-perf-tests just supported "ms" for units.
        Consequently, Dromaeo perf tests had been reporting runs/s as "ms".
        This patch fixes run-perf-tests so that they can support custom units.
        The default unit is "ms".

        The test result looks like this:

        $ ./Tools/Scripts/run-perf-tests Dromaeo/dom-attr.html
        RESULT Dromaeo: dom-attr= 6465.9525483 runs/s
        median= 0.0 runs/s, stdev= 24.2983433436 runs/s, min= 6435.87649402 runs/s, max= 6515.63693392 runs/s

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._process_parser_test_result):

2012-03-15  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build change after wtf path changes.

        * DumpRenderTree/win/ImageDiffWinCairoCommon.vsprops: Updated include
        directories to look at the private header directory to find 'wtf'.

2012-03-15  Kent Tamura  <tkent@chromium.org>

        REGRESSION(r110595): webkit-patch suggest-reviewers doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=81293

        Reviewed by Adam Barth.

        r110595 introduced new format of the author field of ChangeLog entry:
        "Adam Barth  <abarth@webkit.org> && Benjamin Poulain  <bpoulain@apple.com>"
        Updte chanelog.py to support it.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLogEntry._split_contributor_names):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_parse_authors):

2012-03-15  Lynn Neir  <lynn.neir@skype.net>

        Implement LayoutTestController::setValueForUser on Windows https://bugs.webkit.org/show_bug.cgi?id=55834

        Implemented setValueForUser in both DumpRenderTree and WebKitTestRunner.

        Reviewed by Jessie Berlin.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setValueForUser):
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setValueForUser):
        (WTR):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):

2012-03-15  Adam Barth  <abarth@webkit.org>

        Update the start-queue.sh script to match what we're using on the bots
        https://bugs.webkit.org/show_bug.cgi?id=81277

        Reviewed by Eric Seidel.

        Over time we've added more magic git commands to clean up the local repo after
        it has been borked in various ways. The idea behind this sequence is to clear
        out any changes in the working copy and then to rebuild the master branch from
        origin/master.

        This patch also removes the watchdog timer that we've stopped using on the
        bots.

        This patch was reviewed on <https://github.com/eseidel/webkit/pull/1>.
        Note: Eric and I are experimenting with GitHub to see if it might be
        useful for WebKit.  If you have thoughts on this topic, please feel
        free to grab Eric or me on #webkit to chat.  I assume that he and I are
        the only ones who care about this file so using this alternative
        process for this patch shouldn't cause any trouble.

        * EWSTools/start-queue.sh:

2012-03-15  Adam Barth  <abarth@webkit.org>

        The commit-queue can hang when the test_expectations.txt style check fails during commit
        https://bugs.webkit.org/show_bug.cgi?id=81251

        Reviewed by Eric Seidel.

        We forgot to check the --non-interactive flag, so we end up prompting
        the "user" who doesn't exist on the bot.  We might consider teaching
        the User class about non-interactive if we have this sort of bug again.

        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit.options):
        (Commit._check_test_expectations):
        (Commit.run):
        * Scripts/webkitpy/tool/steps/commit_unittest.py:
        (CommitTest.test_check_test_expectations):

2012-03-15  Jessie Berlin  <jberlin@apple.com>

        fast/dom/Window/window-properties.html and fast/dom/prototype-inheritance-2.html failing on
        Mac WK2 because WebAudio is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=81259

        Reviewed by Dan Bernstein.

        Enable WebAudio so that it appears in the window object in the tests.
        The webaudio tests are all still skipped in the Mac Skipped list.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2012-03-15  David Levin  <levin@chromium.org>

        Various autoresize fixes.
        https://bugs.webkit.org/show_bug.cgi?id=81199

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::reset): Stop using the deprecated api that was removed.

2012-03-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Actually use --release and --debug command line options in run-gtk-test
        https://bugs.webkit.org/show_bug.cgi?id=81234

        Reviewed by Philippe Normand.

        Actually handle --release and --debug command line options to
        create the build directory, falling back to current hack to detect
        whether it's a Release or Debug build when both options are missed.

        * Scripts/run-gtk-tests:
        (TestRunner.__init__): Receive options too.
        (TestRunner._get_top_level_directory): Helper function to get the
        top level directory.
        (TestRunner._get_build_directory): Helper function to get the
        build directory depending on --release/--debug command line
        options or gessing it if both options are missing.
        (TestRunner._ensure_accessibility_daemon_is_running): Use
        self-options now.
        (TestRunner.run): Ditto.
        (TestRunner.run.run_tests): Pass options to the constructor
        instead of run().

2012-03-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Run unit tests with --verbose in the bots
        https://bugs.webkit.org/show_bug.cgi?id=81230

        Reviewed by Martin Robinson.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunGtkAPITests): Add --verbose to run-gtk-test command.

2012-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        Move wx port to using export macros
        https://bugs.webkit.org/show_bug.cgi?id=77279

        Reviewed by Hajime Morita.

        * waf/build/settings.py:
        (common_configure):

2012-03-15  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix attempt after r110845.

        * Scripts/run-gtk-tests: Added --release and --debug options.

2012-03-15  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        Parametrize run-with-jhbuild and update-webkitgtk-libs with platform --gtk/--efl
        https://bugs.webkit.org/show_bug.cgi?id=79673

        Preparatory work for bringing jhbuild enabled build to EFL port.

        Reviewed by Philippe Normand.

        * Scripts/update-webkit-libs-jhbuild: Copied from Tools/Scripts/update-webkitgtk-libs.
        * Scripts/update-webkitgtk-libs:
        * gtk/run-with-jhbuild:
        * jhbuild/jhbuild-wrapper: Copied from Tools/gtk/run-with-jhbuild.
        (top_level_path):
        (jhbuild_installed):
        (jhbuild_cloned):
        (jhbuild_at_expected_revision):
        (update_jhbuild):
        (clone_jhbuild):
        (install_jhbuild):
        (update_webkit_libs_jhbuild):
        (determine_platform):
        (ensure_jhbuild):

2012-03-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add command line options to run-gtk-tests script
        https://bugs.webkit.org/show_bug.cgi?id=81218

        Reviewed by Philippe Normand.

        Following command line options have been added:

        -v, --verbose: to run gtester with --verbose. That would be used
        by the bots to make it easier to know which test case it failing.

        --display: to use a different display for Xvfb

        It's also possible to pass one or more tests as arguments.

        * Scripts/run-gtk-tests:
        (TestRunner.__init__): Receive command line arguments.
        (TestRunner._get_tests): Get all the tests or the ones passed by
        command line arguments.
        (TestRunner._ensure_accessibility_daemon_is_running): Use display
        command line argument.
        (TestRunner.run): Pas command line options.
        (TestRunner.run.run_tests): Pass command line arguments.

2012-03-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKit2APITests/TestPrinting timeout in the bots
        https://bugs.webkit.org/show_bug.cgi?id=81211

        Reviewed by Philippe Normand.

        Add gtk+ patch to fix timeout in the bots. A similar patch has
        already landed in updatream gtk+, see
        http://git.gnome.org/browse/gtk+/commit/?id=5ebfad5d091f4c9d9c6e60364fad4c60842f027f

        * gtk/jhbuild.modules:
        * gtk/patches/gtk+-3.0.12-gtkprinter.patch: Added.

2012-03-14  Gustavo Noronha Silva  <gns@gnome.org>

        sheriffbot should also be addressable with a comma in addition to colon
        https://bugs.webkit.org/show_bug.cgi?id=81101

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/net/irc/ircbot.py:
        (IRCBot.on_pubmsg):

2012-03-15  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] MiniBrowser scroll indicators should not scroll out of view
        https://bugs.webkit.org/show_bug.cgi?id=81131

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/qml/ScrollIndicator.qml:

2012-03-14  Chris Fleizach  <cfleizach@apple.com>

        AX: ARIA tables need to support selected rows attribute/select rows changed notification
        https://bugs.webkit.org/show_bug.cgi?id=79821

        Reviewed by Beth Dakin.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (rowAtIndexCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * DumpRenderTree/blackberry/AccessibilityUIElementBlackBerry.cpp:
        (AccessibilityUIElement::rowAtIndex):
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::rowAtIndex):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::rowAtIndex):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::rowAtIndex):

2012-03-14  Tim Horton  <timothy_horton@apple.com>

        NRWT should respect --additional-platform-directory's Skipped list
        https://bugs.webkit.org/show_bug.cgi?id=81172

        Reviewed by Timothy Hatcher.

        Respect the Skipped file inside all paths included via the --additional-platform-directory option. Test results
        from said path are already used, but the Skipped file is ignored.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._skipped_file_search_paths):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (test_skipped_file_search_paths):

2012-03-14  Ojan Vafai  <ojan@chromium.org>

        Unreviewed, rolling out r110783.
        http://trac.webkit.org/changeset/110783
        https://bugs.webkit.org/show_bug.cgi?id=81054

        Caused existing test expectation lines to expand to one for
        each test configuration.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.has_warnings):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_macro_overrides):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._save_baseline):
        (RebaselineTest._rebaseline_test):
        (RebaselineTest.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_tests_to_update):

2012-03-13  Jon Lee  <jonlee@apple.com>

        Separate NOTIFICATIONS and LEGACY_NOTIFICATIONS
        https://bugs.webkit.org/show_bug.cgi?id=80922
        <rdar://problem/11035082>

        Reviewed by Jian Li.

        You can include either NOTIFICATIONS or LEGACY_NOTIFICATIONS and have a complete API.
        LEGACY_NOTIFICATIONS should cover all of the previous functionality, and NOTIFICATIONS will cover the
        new API. Therefore, APIs that are common between the two will have:
        #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)

        This patch initially sets both to be exactly the same. As other bugs with patches begin to migrate to
        the new API, the defines will begin to split. This allows ports to decide which set of APIs to include.

        Update everything to be #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::grantDesktopNotificationPermission):
        (LayoutTestController::simulateDesktopNotificationClick):
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetTestController):
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp:
        (DRTDesktopNotificationPresenter::checkNotificationPermission):

2012-03-13  Ojan Vafai  <ojan@chromium.org>

        Have webkit-patch rebaseline-test update test_expectations.txt
        https://bugs.webkit.org/show_bug.cgi?id=81054

        Reviewed by Dirk Pranke.

        This will allow us to use the All Failures tab in garden-o-matic
        to rebaseline tests without making test_expectations.txt stale.

        It's conservative and only removes lines if the test is
        not flaky and fails in a way the rebaseline would fix (e.g.
        CRASH/TIMEOUT will not be touched).

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.remove_configuration_from_test):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (RemoveConfigurationsTest):
        (RemoveConfigurationsTest.test_remove):
        (test_remove_line):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._is_supported_port):
        (RebaselineTest):
        (RebaselineTest._update_expectations_file):
        (RebaselineTest._rebaseline_test_and_update_expectations):
        (RebaselineTest.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline_updates_expectations_file):

2012-03-14  Jessie Berlin  <jberlin@apple.com>

        Crash in WKTR under addChromeInputField due to using 0 as a key in a HashMap
        https://bugs.webkit.org/show_bug.cgi?id=81167

        Reviewed by Sam Weinig.

        Do not use 0 as a key in a HashMap.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        cacheLayoutTestControllerCallback uses the enum as keys for the callback map.

2012-03-14  Ojan Vafai  <ojan@chromium.org>

        Add the chromium lion bot to garden-o-matic and remove
        the platform_move_to in builders.py since the Chromium Lion
        port is now a normal port.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * Scripts/webkitpy/layout_tests/port/builders.py:

2012-03-14  Dirk Pranke  <dpranke@chromium.org>

        Fix regression/crash introduced in r110724 - bad type passed from skipped_tests() by default.

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.skipped_tests):

2012-03-14  Dirk Pranke  <dpranke@chromium.org>

        Please add a way to manually skip some tests in NRWT
        https://bugs.webkit.org/show_bug.cgi?id=81019

        Reviewed by Ojan Vafai.

        This patch implements the -i / --ignore-tests flag from ORWT
        and refactors the test_expectations.py code slightly to handle
        it.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.parse_expectations):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_add_skipped_tests):
        (test_add_skipped_tests_duplicate):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_ignore_tests):
        (MainTest.test_ignore_tests.assert_ignored):

2012-03-14  Dirk Pranke  <dpranke@chromium.org>

        nrwt: run with no args on lion, is putting baselines in platform/mac-lion, not platform/mac
        https://bugs.webkit.org/show_bug.cgi?id=81028

        Reviewed by Ojan Vafai.

        The mac port had incorrect lookups for 'mac-lion' and
        'mac-future' in some places. This patch fixes that and adds a
        bunch of tests.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.baseline_path):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacTest.assert_skipped_file_search_paths):
        (MacTest.test_skipped_file_search_paths):
        (_assert_search_path):
        (test_baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._skipped_file_search_paths):

2012-03-13  Jer Noble  <jer.noble@apple.com>

        Lion Intel Debug WebKit2 Tests crashing under [WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]
        https://bugs.webkit.org/show_bug.cgi?id=81056

        Reviewed by Jessie Berlin.

        Intercept beganEnterFullScreen and beganExitFullScreen and turn them into no-ops (plus logging).

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::beganEnterFullScreen):
        (WTR::InjectedBundlePage::beganExitFullScreen):

2012-03-14  Alexander Færøy  <alexander.faeroy@nokia.com>

        The width and height of the scroll indicators in the MiniBrowser does
        not consider the offset margins.
        https://bugs.webkit.org/show_bug.cgi?id=81112

        Reviewed by Kenneth Rohde Christiansen.

        This patch fixes the issue by withdrawing two times the anchor
        margins.

        * MiniBrowser/qt/qml/ScrollIndicator.qml:

2012-03-14  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] Implement LayoutTestController::clearBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=80142

        Adding missing implementation clearBackForwardList to EFL's
        LayoutTestController. This implementation allows us to unskip 
        tests connected with history.

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::clearBackForwardList): Implemented.

2012-03-13  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL][DRT] Expose window.internals object
        https://bugs.webkit.org/show_bug.cgi?id=79900

        Exposes window.internals for EFL's DRT. Makes possible to
        remove some tests from the skip list.

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/CMakeLists.txt:
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onWindowObjectCleared):

2012-03-13  Adam Barth  <abarth@webkit.org> && Benjamin Poulain  <bpoulain@apple.com>

        Always enable ENABLE(CLIENT_BASED_GEOLOCATION)
        https://bugs.webkit.org/show_bug.cgi?id=78853

        Reviewed by Adam Barth.

        * Scripts/build-webkit:
        * qmake/mkspecs/features/features.prf:

2012-03-12  Antonio Gomes  <agomes@rim.com>

        Convert nodesFromRect tests to use Internals interface
        https://bugs.webkit.org/show_bug.cgi?id=80886

        Reviewed by Ryosuke Niwa.

        This clean up allows to remove port specific bits of each
        DRT implementation that supports testing Document::nodesFromRect,
        in favor of making use of the 'Internals' interface to test it.

        This makes its code conveniently more expansible and cleaner.

        Also removed stubs from Win and EFL DRTs.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:

2012-03-13  Ojan Vafai  <ojan@chromium.org>

        Rebaselining for a new port doesn't work right with multiple fallback ports
        https://bugs.webkit.org/show_bug.cgi?id=80932

        Reviewed by Adam Barth.

        Since chromium-leopard also falls back to mac-leopard, we need to
        copy the existing result for both chromium-leopard and chromium-snowleopard
        before doing lion rebaselines.

        * Scripts/webkitpy/layout_tests/port/builders.py:
        (fallback_port_names_for_new_port):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest):
        (RebaselineTest._copy_existing_baseline):
        (RebaselineTest._rebaseline_test):
        (RebaselineTest.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler.rebaseline):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (GardeningServerTest.test_rebaseline_new_port):

2012-03-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Tweak minibrowser UI

        Add some margins to the scroll indicators, and set a dark background
        color so you see the page dimensions.

        Reviewed by Antonio Gomes.

        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/ScrollIndicator.qml:

2012-03-13  ChangSeok Oh  <shivamidow@gmail.com>

        [EFL] [DRT] Implement scheduleAsynchronousKeyDown.
        https://bugs.webkit.org/show_bug.cgi?id=79601

        Reviewed by Gustavo Noronha Silva.

        Extracted shareable code from keyDownCallback and then added createKeyEventInfo.
        createKeyEventInfo creates a new structure KeyEventInfo that has keyName and modifiers
        and is taken over to sendKeyDown.
        Added sendKeyDown and sendAsynchronousKeyDown to evaluate keyDown event directly
        and asynchronously. Eventually, sendAsynchronousKeyDown calls sendKeyDown.

        * DumpRenderTree/efl/EventSender.cpp:
        (KeyEventInfo::KeyEventInfo):
        (KeyEventInfo):
        (createKeyEventInfo):
        (sendKeyDown):
        (keyDownCallback):
        (sendAsynchronousKeyDown):
        (scheduleAsynchronousKeyDownCallback):

2012-03-12  Ojan Vafai  <ojan@chromium.org>

        webkit-patch optimize-baselines sometimes creates a mac-future result
        https://bugs.webkit.org/show_bug.cgi?id=80717

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        (_baseline_search_hypergraph):
        (BaselineOptimizer._find_optimal_result_placement):
        (BaselineOptimizer._filter_virtual_ports):
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        (BaselineOptimizerTest.test_no_add_mac_future):

2012-03-12  Jessie Berlin  <jberlin@apple.com>

        More Windows build fixing.

        * DumpRenderTree/win/WorkQueueItemWin.cpp:

2012-03-12  Jessie Berlin  <jberlin@apple.com>

        More Windows build fixing.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        * DumpRenderTree/win/EditingDelegate.cpp:
        * DumpRenderTree/win/EventSender.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/win/UIDelegate.cpp:

2012-03-12  Dirk Pranke  <dpranke@chromium.org>

        remove the 'gpu' group from the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=80353

        Reviewed by Adam Barth.

        Since those bots are obsolete, we don't need this any more.

        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (testPlatformAndBuildType):
        (testHtmlForTestTypeSwitcherGroup):

2012-03-12  Dirk Pranke  <dpranke@chromium.org>

        remove graphics_type from webkitpy.layout_tests.models.test_configuration
        https://bugs.webkit.org/show_bug.cgi?id=80643

        Reviewed by Ojan Vafai.

        Now that the chromium-gpu ports are gone, there's no need for
        the graphics_type CPU/GPU distinction. Most of this change is
        just updating tests accordingly.

        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor_unittest.py:
        (TestExpectationEditorTests):
        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        (TestConfiguration.__init__):
        (TestConfiguration.category_order):
        (TestConfiguration.__str__):
        (TestConfiguration.__repr__):
        (TestConfiguration.__hash__):
        (TestConfigurationConverter.to_specifiers_list):
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py:
        (make_mock_all_test_configurations_set):
        (TestConfigurationTest.test_items):
        (TestConfigurationTest.test_keys):
        (TestConfigurationTest.test_str):
        (TestConfigurationTest.test_repr):
        (TestConfigurationTest.test_hash):
        (TestConfigurationTest.test_hash.query_unknown_key):
        (TestConfigurationTest.test_eq):
        (TestConfigurationTest.test_values):
        (SpecifierSorterTest.test_specifier_priority):
        (SpecifierSorterTest.test_sort_specifiers):
        (TestConfigurationConverterTest.test_to_config_set):
        (TestConfigurationConverterTest.test_macro_expansion):
        (TestConfigurationConverterTest.test_to_specifier_lists):
        (TestConfigurationConverterTest.test_converter_macro_collapsing):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_error_on_different_build_type):
        (TestExpectationSerializerTests.test_parsed_to_string):
        (TestExpectationSerializerTests.test_reconstitute_only_these):
        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort._generate_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        (Port.name):
        (Port.version):
        (Port.test_configuration):
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        (ChromiumPort._generate_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        (ChromiumLinuxPortTest.test_check_illegal_port_names):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_baseline_path):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort._generate_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._generate_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._generate_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.all_test_configurations):
        (TestPort._all_build_types):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (BuildCoverageExtrapolatorTest.test_extrapolate):
        (GardeningExpectationsUpdaterTest.test_unknown_failure_type):
        (GardeningExpectationsUpdaterTest.test_add_new_expectation):
        (GardeningExpectationsUpdaterTest.test_replace_old_expectation):
        (GardeningExpectationsUpdaterTest.test_pass_expectation):
        (GardeningExpectationsUpdaterTest.test_supplement_old_expectation):
        (GardeningExpectationsUpdaterTest.test_spurious_updates):

2012-03-12  Dirk Pranke  <dpranke@chromium.org>

        _runtime_feature_list isn't supported on Apple Mac DRT
        https://bugs.webkit.org/show_bug.cgi?id=80906

        Reviewed by Eric Seidel.

        It looks like this feature is actually only supported on the Win
        DRT port, so this patch reworks the code to make that clearer
        and reduce unnecessary overrides.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort._path_to_webcore_library):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._path_to_webcore_library):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._skipped_file_search_paths):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._runtime_feature_list):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (TestWebKitPort.__init__):
        (TestWebKitPort.all_test_configurations):
        (test_skipped_directories_for_features):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort):
        (WinPort._runtime_feature_list):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest.test_operating_system):
        (WinPortTest):
        (WinPortTest.test_runtime_feature_list):

2012-03-12  Peter Beverloo  <peter@chromium.org>

        [Chromium] Temporary build-fix for the Android bot
        https://bugs.webkit.org/show_bug.cgi?id=80862

        Reviewed by Adam Barth.

        Manually set the environmental variables required to compile source
        files through the Android NDK instead of relying on the envsetup.sh
        script. A proper fix will be landed to Chromium ASAP, and following
        a Chromium roll into WebKit this code will be removed.

        * Scripts/webkitdirs.pm:
        (buildChromiumMakefile):

2012-03-12  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use right construct to detect config_test_gccdepends

        Reviewed by Andreas Kling.

        * qmake/mkspecs/features/default_pre.prf:

2012-03-12  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Expose location of WebKit's bin and imports dir through module file

        Reviewed by Andreas Kling.

        * qmake/qt_webkit.pri:

2012-03-12  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Add support for rudimentary scroll indicators in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=80832

        Reviewed by Tor Arne Vestbø.

        Add a basic scroll indicator component to MiniBrowser so that it
        behaves similar to the ScrollDecorator QML component.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/ScrollIndicator.qml: Added.

2012-03-12  C Anthony Risinger  <anthony@xtfx.me>

        [GTK] r110296 included an extra $ in @$(AM_V_GEN)
        https://bugs.webkit.org/show_bug.cgi?id=80809

        Reviewed by Philippe Normand.

        * GNUmakefile.am: Add `$` to @(AM_V_GEN), else /bin/sh syntax error

2012-03-12  Ming Xie  <mxie@rim.com>

        [BlackBerry] build-webkit doesn't recognize "--cmakearg" for the BlackBerry port
        https://bugs.webkit.org/show_bug.cgi?id=80812

        Reviewed by Rob Buis.

        * Scripts/build-webkit: Add $cmakeArgs to buildCMakeProjectOrExit()
        * Scripts/webkitdirs.pm:
        (blackberryCMakeArguments): Remove "PUBLIC_BUILD=0" define


2012-03-12  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix build with newer Qt 5.

        Reviewed by Tor Arne Vestbø.

        Newer Qt 5 renames QDeclarativeFoo to QQmlFoo and provides backwards compatible
        renames, which however do trigger a #warning. Until we _require_ a newer Qt 5
        we should disable -Werror.

        Also load(moc) for the availability of QMAKE_MOC in various derived sources. The
        implicit load was removed recently.

        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/unix/default_post.prf:

2012-03-11  Maciej Stachowiak  <mjs@apple.com>

        Add --instruments option to sunspider to profile with Instruments
        https://bugs.webkit.org/show_bug.cgi?id=80783

        Reviewed by Filip Pizlo.

        * Scripts/run-sunspider:

2012-03-11  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt] [WK2] Support threaded renderer in WK2
        https://bugs.webkit.org/show_bug.cgi?id=76661

        Remove disabling of threaded rendering.

        Reviewed by Noam Rosenthal.

        * MiniBrowser/qt/main.cpp:
        (main):

2012-03-09  Zan Dobersek  <zandobersek@gmail.com>

        [WK2] run-perf-tests should be able to run with WTR
        https://bugs.webkit.org/show_bug.cgi?id=80042

        Reviewed by Martin Robinson.

        Add an option to PerfTestRunner to use WebKitTestRunner instead of
        DumpRenderTree and add the '--no-timeout' flag to WebKitTestRunner
        to avoid timing out when running performance tests.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::InjectedBundle): Initialize m_useWaitToDumpWatchdogTimer
        to true.
        (WTR::InjectedBundle::didReceiveMessage): Unpack the 'BeginTest' message
        as a dictionary containing DumpPixels and UseWaitToDumpWatchdogTimer keys.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::useWaitToDumpWatchdogTimer): Make m_useWaitToDumpWatchdogTimer
        publicly accessible.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::waitUntilDone): Only initialize the watchdog if it
        is required.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController): Initialize m_useWaitToDumpWatchdogTimer
        to true.
        (WTR::TestController::initialize): Set m_useWaitToDumpWatchdogTimer to false
        if '--no-timeout' option is present.
        (WTR::TestController::runUntil): Translate TimeoutDuration to a proper timeout
        value, or -1.0 if timeout should not occur.
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::useWaitToDumpWatchdogTimer): Make m_useWaitToDumpWatchdogTimer
        publicly accessible.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke): Pack the 'BeginTest' message as a dictionary,
        containing DumpPixels and UseWaitToDumpWatchdogTimer keys and corresponding values.
        Waiting for final message should not time out if not necessary.
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformRunUntil): Only set up a timeout if necessary.
        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::platformRunUntil): Ditto.
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformRunUntil): Add a FIXME, indicating functionality
        is missing.
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformRunUntil): Ditto.

2012-03-09  Jon Lee  <jonlee@apple.com>

        Rename NotificationPresenter to NotificationClient
        https://bugs.webkit.org/show_bug.cgi?id=80488
        <rdar://problem/10965558>

        Reviewed by Kentaro Hara.

        Refactor to use renamed WebCore::NotificationClient.
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp:
        (DRTDesktopNotificationPresenter::checkNotificationPermission):

2012-03-07  James Robinson  <jamesr@chromium.org>

        [chromium] Deprecate renderDirectlyToWebView parameter of WebViewClient::createGraphicsContext3D()
        https://bugs.webkit.org/show_bug.cgi?id=80523

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createGraphicsContext3D):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-03-09  Eric Seidel  <eric@webkit.org>

        build-webkit should build Source/WTF on Mac
        https://bugs.webkit.org/show_bug.cgi?id=80728

        Reviewed by Adam Barth.

        We'll add other ports to this list in future commits.

        * Scripts/build-webkit:

2012-03-09  Jon Lee  <jonlee@apple.com>

        Add support for ENABLE(LEGACY_NOTIFICATIONS)
        https://bugs.webkit.org/show_bug.cgi?id=80497

        Reviewed by Adam Barth.

        Prep for b80472: Update API for Web Notifications
        * Scripts/build-webkit:
        * qmake/mkspecs/features/features.prf:

2012-03-09  Ashod Nakashian  <ashodnakashian@yahoo.com>

        Bash scripts should support LF endings only
        https://bugs.webkit.org/show_bug.cgi?id=79509

        Reviewed by David Kilzer.

        * EWSTools/boot.sh: Added properties svn:executable and svn:eol-style.
        * EWSTools/start-queue.sh: Added property svn:eol-style.
        * Scripts/webkit-tools-completion.sh: Added properties svn:executable and svn:eol-style.
        * WebKitTestRunner/win/build-generated-files.sh: Added properties svn:executable and svn:eol-style.
        * iExploder/iexploder-1.7.2/tools/release_src.sh: Added property svn:eol-style.
        * iExploder/iexploder-1.7.2/tools/update_html_tags_from_sources.sh: Added property svn:eol-style.

2012-03-09  Ionut Biru  <ibiru@archlinux.org>

        [BUILD] use detected python to run generate-gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=80695

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Use $(PYTHON) instead of plain `python`

2012-03-09  Nat Duca  <nduca@chromium.org>

        Make check-webkit-style complain about "no new tests" lines in changelogs
        https://bugs.webkit.org/show_bug.cgi?id=80582

        Reviewed by David Levin.

        * Scripts/webkitpy/style/checkers/changelog.py:
        (ChangeLogChecker.check_entry):
        * Scripts/webkitpy/style/checkers/changelog_unittest.py:
        (ChangeLogCheckerTest.test_no_new_tests):

2012-03-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110250.
        http://trac.webkit.org/changeset/110250
        https://bugs.webkit.org/show_bug.cgi?id=80682

        It made NRWT ignore test_expectations.txt on Qt-WK2 and ignore
        qt-linux at all. (Requested by Ossy on #webkit).

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort):
        (QtPort.determine_full_port_name):
        (QtPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest):
        (QtPortTest._assert_search_path):
        (QtPortTest.test_baseline_search_path):

2012-03-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use Qt's module system for install rules and depending on QtWebKit

        Instead of rolling our own install rules we now use the same approach as
        every other Qt module, by loading qt_module.prf and qt_module_config.prf.

        This ensures that we follow the same semantics as the rest of Qt on
        what sort of config options are enabled by default (create_cmake eg.).
        It also allows us to use QT += webkit instead of the workaround we had
        with CONFIG += qtwebkit.

        We do however force Qt to always treat our build as a non-developer build,
        so the libraries will end up in the WebKit lib directory instead of the
        qtbase directory (as with a normal developer-build). This allows us to
        keep the webkit-build self-contained. If Qt is a developer build we still
        copy the module file manually to Qt, so that you don't have to install
        WebKit to make it available.

        For non-developer builds of Qt, it is still possible to use the built
        WebKit libraries without having to install them, by having the variable
        QMAKE_EXTRA_MODULE_FORWARDS set in the project's .qmake.cache file,
        pointing to $WEBKITOUTUTDIR/$CONFIGURATION/modules.

        https://bugs.webkit.org/show_bug.cgi?id=80590

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * MiniBrowser/qt/BrowserWindow.cpp:
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        * MiniBrowser/qt/UrlLoader.cpp:
        * QtTestBrowser/QtTestBrowser.pro:
        * Tools.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/Target.pri:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/functions.prf:
        * qmake/mkspecs/features/qtwebkit-private.prf: Removed.
        * qmake/mkspecs/features/qtwebkit.prf:
        * qmake/mkspecs/features/rpath.prf:
        * qmake/mkspecs/modules/qt_webkit.pri: Removed.
        * qmake/qt_webkit.pri: Added.

2012-03-08  Igor Oliveira  <igor.o@sisa.samsung.com>

        Unreviewed. Update my email.

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

2012-03-08  Xianzhu Wang  <wangxianzhu@chromium.org>

        Recent changes to chromium.py etc. broke chromium_android.py
        https://bugs.webkit.org/show_bug.cgi?id=80623

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._start):

2012-03-08  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium] Exception running reftest with --no-pixel-tests
        https://bugs.webkit.org/show_bug.cgi?id=80642

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.__init__):
        (ChromiumDriver._wrapper_options):

2012-03-08  Rafael Brandao  <rafael.lobo@openbossa.org>

        [NRWT] Fix --platform=qt-5.0 --new-baseline combo
        https://bugs.webkit.org/show_bug.cgi?id=72489

        Reviewed by Dirk Pranke.

        NRWT: The default platform name for Qt combined with --webkit-test-runner is now
        "qt-5.0-wk2" instead of "qt-linux" and that name is now prefered for tests.
        --platform will override the platform name and then we'll use it.

        ORWT: We check for qt version and use platform name "qt-4.8" if the version is lower
        than 5.0.0, and then we choose between "qt-5.0-wk1" and "qt-5.0-wk2". --platform will
        override it in the end.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort):
        (QtPort.determine_full_port_name):
        (QtPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest):
        (QtPortTest._assert_search_path):
        (QtPortTest.test_baseline_search_path):

2012-03-08  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=80463
        RenderImage is using the wrong origin when calling addRelevantRepaintedObject
        -and corresponding-
        <rdar://problem/10970221>

        Reviewed by Dan Bernstein.

        New test!
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutForImages.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::didNewFirstVisuallyNonEmptyLayout):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutForImages_Bundle.cpp: Added.
        (TestWebKitAPI):
        (NewFirstVisuallyNonEmptyLayoutForImagesTest):
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutForImagesTest::NewFirstVisuallyNonEmptyLayoutForImagesTest):
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutForImagesTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/lots-of-images.html: Added.

2012-03-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Prospective Windows build fix

        Don't assume that windows-builds will always run inside a cmd.exe shell.

        * qmake/mkspecs/features/default_pre.prf:

2012-03-08  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10981173> Dashboard regions should not be in device space

        Reviewed by John Sullivan.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorInDashboardRegions.mm: Added.
        (-[DeviceScaleFactorInDashboardRegionsUIDelegate webView:dashboardRegionsChanged:]):
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2012-03-08  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch works oddly on local Git branches
        https://bugs.webkit.org/show_bug.cgi?id=76958

        Reviewed by Ojan Vafai.

        This change makes the '-g' flag to webkit-patch behave a
        little more consistently with git. The 'HEAD..' syntax
        is changed to 'HEAD....' (four dots), so as to not
        collide with the underlying git syntax. We also generalize
        the syntax to support any refname, so 'foo....' means
        diff against foo and include working copy changes.

        This change also adds the 'UPSTREAM' shortcut to identify
        whatever the current upstream/tracking branch is; this is
        useful if you have multiple local branches stacked up.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git._branch_from_ref):
        (Git):
        (Git._current_branch):
        (Git._upstream_branch):
        (Git.merge_base):
        (Git._commit_on_branch):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (GitSVNTest._second_local_commit):
        (GitSVNTest._two_local_commits):
        (GitSVNTest.test_commit_with_message_git_commit_range):
        (GitSVNTest.test_upstream_branch):
        (GitSVNTest.test_create_patch_working_copy_only):
        (GitSVNTest.test_changed_files_local_plus_working_copy):
        (GitSVNTest.test_changed_files_working_copy_only):
        (GitSVNTest.test_changed_files_upstream):
        * Scripts/webkitpy/tool/steps/options.py:
        (Options):

2012-03-08  John Sullivan  <sullivan@apple.com>

        Made extract-localizable-strings ignore NSLocalizedFileSizeDescription

        Reviewed by Eric Carlson.

        * Scripts/extract-localizable-strings:
        Added NSLocalizedFileSizeDescription to allowed list of tokens that start
        with NSLocalized. Also improved an error message to include the troublesome token.

2012-03-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110115.
        http://trac.webkit.org/changeset/110115
        https://bugs.webkit.org/show_bug.cgi?id=80581

        broke test-webkitpy (Requested by philn-tp on #webkit).

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort):
        (QtPort.determine_full_port_name):
        (QtPort.baseline_search_path):

2012-03-08  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Added myself to watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2012-03-07  Jessie Berlin  <jberlin@apple.com>

        Clean Windows build fails after r110033
        https://bugs.webkit.org/show_bug.cgi?id=80553

        Rubber-stamped by Jon Honeycutt and Eric Seidel.

        Add the new JavaScriptCore include directory to some more vsprops files.

        * DumpRenderTree/win/ImageDiffCommon.vsprops:
        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops:
        * WebKitTestRunner/Configurations/WebKitTestRunnerCommon.vsprops:

2012-03-07  Rafael Brandao  <rafael.lobo@openbossa.org>

        [NRWT] Fix --platform=qt-5.0 --new-baseline combo
        https://bugs.webkit.org/show_bug.cgi?id=72489

        Reviewed by Dirk Pranke.

        NRWT: The default platform name for Qt combined with --webkit-test-runner is now
        "qt-5.0-wk2" instead of "qt-linux" and that name is now prefered for tests.
        --platform will override the platform name and then we'll use it.

        ORWT: We check for qt version and use platform name "qt-4.8" if the version is lower
        than 5.0.0, and then we choose between "qt-5.0-wk1" and "qt-5.0-wk2". --platform will
        override it in the end.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort):
        (QtPort.determine_full_port_name):
        (QtPort.baseline_search_path):

2012-03-07  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [Qt][WK2] MiniBrowser on desktop does not react to click events
        https://bugs.webkit.org/show_bug.cgi?id=80314

        Reviewed by Kenneth Rohde Christiansen.

        Do not enable touch mocking on desktop mode.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):

2012-03-07  Ojan Vafai  <ojan@chromium.org>

        Automatically move to the next test after rebaseline in the results view
        https://bugs.webkit.org/show_bug.cgi?id=80527

        Reviewed by Dimitri Glazkov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:

2012-03-07  Ojan Vafai  <ojan@chromium.org>

        garden-o-matic rebaseline is broken for ports that don't have a fallback port
        https://bugs.webkit.org/show_bug.cgi?id=80526

        Reviewed by Adam Barth.

        Passing "None" as the fallback port throws an error in "webkit-patch rebaseline-test"
        since there is no "None" port.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler.rebaseline):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (GardeningServerTest.test_rebaseline):

2012-03-07  James Robinson  <jamesr@chromium.org>

        [chromium] Remove the TestWebPlugin's use of implicit FBO for offscreen contexts
        https://bugs.webkit.org/show_bug.cgi?id=80521

        Reviewed by Kenneth Russell.

        Switches TestWebPlugin from using a context created by WebViewClient::createGraphicsContext3D(..., false) over
        to an explicitly offscreen context with explicitly managed texture / FBO, so we can deprecate the
        renderDirectlyToHostWindow flag from WebViewClient::createGraphicsContext3D.

        Covered by platform/chromium/compositing/plugins/*

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (TestWebPlugin::TestWebPlugin):
        (TestWebPlugin::initialize):
        (TestWebPlugin::updateGeometry):
        (TestWebPlugin::initScene):
        (TestWebPlugin::destroyScene):
        * DumpRenderTree/chromium/TestWebPlugin.h:
        (TestWebPlugin):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createPlugin):

2012-03-07  Philippe Normand  <pnormand@igalia.com>

        [GTK] remove webkitpy dependency in run-gtk-tests
        https://bugs.webkit.org/show_bug.cgi?id=80500

        Reviewed by Martin Robinson.

        Replace Executive calls with bare subprocess calls.

        * Scripts/run-gtk-tests:
        (TestRunner):
        (TestRunner._lookup_atspi2_binary):
        (TestRunner.run):
        (TestRunner.run.run_for_real):

2012-03-07  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after r110059.

        * Scripts/run-gtk-tests:
        (TestRunner._check_if_tests_have_timed_out):
        (TestRunner.run.run_tests):
        (TestRunner):

2012-03-07  Philippe Normand  <pnormand@igalia.com>

        [GTK] race condition in run-gtk-tests
        https://bugs.webkit.org/show_bug.cgi?id=80495

        Reviewed by Martin Robinson.

        Refactored the script to wait the a11y dbus service becomes
        available before starting the tests.

        * Scripts/run-gtk-tests:
        (TestRunner._lookup_atspi2_binary):
        (TestRunner):
        (TestRunner._wait_dbus_service_and_run):
        (TestRunner._wait_dbus_service_and_run.on_name_appeared):
        (TestRunner._wait_dbus_service_and_run.on_name_vanished):
        (TestRunner.run):
        (TestRunner.run.bailout):
        (TestRunner.run.run_for_real):

2012-03-07  Dinu Jacob  <dinu.jacob@nokia.com>

        [Qt] REGRESSION(r109575) Broke tap-to-zoom gesture
        https://bugs.webkit.org/show_bug.cgi?id=80425

        Reviewed by Simon Hausmann.

        Set startScreenPos in mock touch point

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (MiniBrowserApplication):

2012-03-07  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Windows build fix.

        Reviewed by Tor Arne Vestbø.

        Pass the -j parameter only to "make", not "nmake".

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-03-07  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix compilation without QtQuick1
        https://bugs.webkit.org/show_bug.cgi?id=80503

        Reviewed by Tor Arne Vestbø.

        Introduce HAVE_QQUICK1 as feature and added haveQtModule
        as convenience function.

        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/functions.prf:

2012-03-07  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Add qmake config tests for JPEG and PNG library
        https://bugs.webkit.org/show_bug.cgi?id=80398

        Add JPEG and PNG library tests to config.tests and
        add error() abort to WebCore.pri if tests don't work.

        Reviewed by Tor Arne Vestbø.

        * qmake/config.tests/libjpeg/libjpeg.cpp: Added.
        (main):
        * qmake/config.tests/libjpeg/libjpeg.pro: Added.
        * qmake/config.tests/libpng/libpng.cpp: Added.
        (main):
        * qmake/config.tests/libpng/libpng.pro: Added.
        * qmake/sync.profile:

2012-03-07  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL] Build warning: Fix warn_unused_result warnings.
        https://bugs.webkit.org/show_bug.cgi?id=79194

        Reviewed by Filip Pizlo.

        Fixed build warning which is getting generated when not using return
        value of a fuction, especially declared with warn_unused_result
        attribute.

        * DumpRenderTree/efl/ImageDiff.cpp:
        (printImage):

2012-03-07  Kangil Han  <kangil.han@samsung.com>

        [DRT] Remove PlainTextController implementations.
        https://bugs.webkit.org/show_bug.cgi?id=79959

        Reviewed by Hajime Morita.

        PlainTextController usages in existing tests have been
        replaced by internals API by bug 78570.
        So this patch will remove PlainTextController implementations
        to avoid further usage in new tests.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/chromium/PlainTextController.cpp: Removed.
        * DumpRenderTree/chromium/PlainTextController.h: Removed.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::bindJSObjectsToWindow):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewWindowObjectCleared):
        * DumpRenderTree/gtk/PlainTextController.cpp: Removed.
        * DumpRenderTree/gtk/PlainTextController.h: Removed.
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]):
        * DumpRenderTree/mac/PlainTextController.h: Removed.
        * DumpRenderTree/mac/PlainTextController.mm: Removed.
        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (DumpRenderTree):
        * DumpRenderTree/qt/PlainTextControllerQt.cpp: Removed.
        * DumpRenderTree/qt/PlainTextControllerQt.h: Removed.
        * GNUmakefile.am:

2012-03-06  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL][DRT] Implements LayoutTestController's setPopupBlockingEnabled.
        https://bugs.webkit.org/show_bug.cgi?id=80137

        Reviewed by Eric Seidel.

        Adds implementation LayoutTestController's setPopupBlockingEnabled.
        To pass popup-blocking-click-in-iframe.html EventSender should not
        repeat click events in idler's function. EventSender allows to
        asynchronously send click event through ecore_idler_add.
        This event will be called repeatedly as long as it return true.
        Click event should be called only once by returning ECORE_CALLBACK_CANCEL.

        * DumpRenderTree/efl/EventSender.cpp:
        (sendMouseEvent): Changed return value from bool to void because it always returns true.
        (sendClick): Idler is deleted by returning ECORE_CALLBACK_CANCEL.
        (mouseDownCallback): Remove unnecessary checking of return value.
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setPopupBlockingEnabled):

2012-03-06  Dirk Pranke  <dpranke@chromium.org>

        rebaseline_chromium_webkit_tests is obsolete and should be removed
        https://bugs.webkit.org/show_bug.cgi?id=80347

        Reviewed by Tony Chang.

        * Scripts/rebaseline-chromium-webkit-tests: Removed.
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py: Removed.
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py: Removed.

2012-03-06  Dirk Pranke  <dpranke@chromium.org>

        test_start_cmd (webkitpy.layout_tests.servers.http_server_unittest.TestHttpServer) is broken
        https://bugs.webkit.org/show_bug.cgi?id=80468

        Unreviewed, build fix.

        Fixing a bug revealed by r80443 when we fixed filesystem.copyfile().

        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd._prepare_config):

2012-03-06  Dirk Pranke  <dpranke@chromium.org>

        remove chromium_gpu ports
        https://bugs.webkit.org/show_bug.cgi?id=80345

        Reviewed by Ojan Vafai.

        This change leaves in the 'graphics_type' distinction in the
        test_expectations; removing that will require more updates and a
        pass over test_expectations.txt, so I'm separating that out.

        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py: Removed.
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory):
        (PortFactory.get):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.test_qt):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline_expectations):

2012-03-06  Raphael Kubo da Costa  <kubo@profusion.mobi>

        undefined reference to JSC::IdentifierTable::~IdentifierTable() on EFL port
        https://bugs.webkit.org/show_bug.cgi?id=80282

        Reviewed by Antonio Gomes.

        Remove transitive library dependencies; they are especially
        dangerous when one ends up linking against WTF, JSC and then WTF
        again, since some symbols will not be defined.

        Passing --no-copy-dt-needed-entries and --as-needed to the linker
        (which some recent Linux distros do by default) makes the issue
        even more evident.

        * DumpRenderTree/efl/CMakeLists.txt: Do not link directly to WTF,
        as the other libraries have the needed symbols. Explicitly link
        against fontconfig.

2012-03-06  Dean Jackson  <dino@apple.com>

        filter-build-webkit needs more filters
        https://bugs.webkit.org/show_bug.cgi?id=80440

        Reviewed by Joseph Pecoraro.

        Added as many missing filters as I could find for Apple
        builds. Plus a few minor style updates.

        * Scripts/filter-build-webkit:
        (printLine):

2012-03-06  Ojan Vafai  <ojan@chromium.org>

        Copying old baselines throws an error if the new directory doesn't exist
        https://bugs.webkit.org/show_bug.cgi?id=80443

        Reviewed by Adam Barth.

        Existing tests cover the new code with the fix to filesystem_mock.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.copyfile):
        Fix the mock to better match python's copyfile semantics.

        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        (Rebaseliner._create_html_baseline_files):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._copy_existing_baseline):

2012-03-05  Ojan Vafai  <ojan@chromium.org>

        Add a mechanism to rebaseline new ports
        https://bugs.webkit.org/show_bug.cgi?id=80355

        Reviewed by Adam Barth.

        For a test that's only failing on a new port, we want
        to first copy the existing result into the location for the
        port it's replacing in order to not break that port.

        For example, bringing up the chromium-lion port, if we just
        stick the results in the chromium-mac directory, the snow leopard
        will start failing. Instead, we first copy the existing result
        to the chromium-mac-snowleopard directory.

        * Scripts/webkitpy/layout_tests/port/builders.py:
        (builder_path_for_port_name):
        (fallback_port_name_for_new_port):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest):
        (RebaselineTest._copy_existing_baseline):
        (RebaselineTest._rebaseline_test):
        (RebaselineTest.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline_test):
        (TestRebaseline):
        (TestRebaseline.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):
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler.rebaseline):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (GardeningServerTest.test_rebaseline):
        (GardeningServerTest):
        (GardeningServerTest.test_rebaseline_new_port):

2012-03-06  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=80351
        InlineTextBox is using the wrong origin when calling 
        addRelevantRepaintedObject
        -and corresponding-
        <rdar://problem/10970221>

        Reviewed by Sam Weinig.

        This test has actually been broken since revision 109273. This change makes 
        the test pass again, and it makes it specifically exercise the fix for this 
        bug.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout.cpp:
        (TestWebKitAPI::TEST):

        Adjust comments in the other tests to reflect the API changes from 109273.
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails_Bundle.cpp:
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutFailsTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames_Bundle.cpp:
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutFramesTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout_Bundle.cpp:
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/lots-of-text.html: Added.

2012-03-06  Hans Wennborg  <hans@chromium.org>

        Speech JavaScript API: add SpeechRecognitionError
        https://bugs.webkit.org/show_bug.cgi?id=80410

        Chromium: enable the runtime flag for scripted speech so we can run
        the layout tests for it.

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2012-03-06  Sami Kyostila  <skyostil@chromium.org>

        Enable universal newlines in chromium android layout test runner
        https://bugs.webkit.org/show_bug.cgi?id=80418

        Reviewed by Adam Barth.

        The Chromium Android layout test runner uses the 'adb' program to
        communicate with the Android device. Adb uses CRLF ('\r\n') to delimit
        output lines from the test runner, while the test expectation files are
        written with LF ('\n') delimiters. This causes the results to have
        spurious whitespace differences, making them more difficult to
        interpret.

        The fix is to enable universal newlines for the DumpRenderTree pipe,
        causing the output to only contain LF newlines like on other platforms.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver._start):

2012-03-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Revert r109900, it was completly busted

        HAVE_FOO does _not_ have a WTF_ prefix, go figure.

        We still leave in the HAVE(FOO) in QtInitializeTestFonts.cpp, instead
        of manual define checks.

        Reviewed by Ossy.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * qmake/mkspecs/features/features.prf:

2012-03-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use config test to determine if the compiler supports -MD

        We used to assume that unix systems building against Qt5 would have
        a compiler that supported -MD. Although this was usually the case,
        we failed to take into account broken tools for distributed builds
        (e.g. teambuilder or icecream) which would end up producing .d files
        in the root of the build dir instead of along-side the object file.

        Now that we use a config-test to determine the support, we'll capture
        those cases, unless distributed builds are enabled after the initial
        build-webkit run.

        Reviewed by Csaba Osztrogonác.

        * Tools.pro:
        * qmake/config.tests/gccdepends/empty.cpp: Added.
        * qmake/config.tests/gccdepends/gccdepends.pro: Added.
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/unix/default_pre.prf:
        * qmake/sync.profile:

2012-03-06  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r109294): It broke the unittest of master.cfg
        https://bugs.webkit.org/show_bug.cgi?id=80253

        Reviewed by Tor Arne Vestbø.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Use json instead of simplejson.
        (BuildBotConfigLoader._create_mock_passwords_dict):
        (BuildBotConfigLoader._mock_open):
        (BuildBotConfigLoader._add_dependant_modules_to_sys_modules):
        (BuildBotConfigLoader.load_config):

2012-03-06  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        Qt API test buildstep throws exception after buildmaster update
        https://bugs.webkit.org/show_bug.cgi?id=80249

        This patch based on Peter Gal's work.

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunQtAPITests):
        (BuildAndTestFactory.__init__): Enable API tests on the Qt platform again.

2012-03-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use correct define names for HAVE(FOO) style optional dependencies

        Reviewed by Simon Hausmann.
        Reviewed by Ossy.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/QtInitializeTestFonts.cpp:
        (WebKit::initializeTestFonts):
        * QtTestBrowser/QtTestBrowser.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * qmake/mkspecs/features/features.prf:

2012-03-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't add recursive qmake_all target if there are no subdirs to recurse

        Reviewed by Ossy.

        * qmake/mkspecs/features/default_post.prf:

2012-03-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make sure clean builds are followed by make qmake && make if needed

        On non-GNUmake systems we have to run make qmake so that the generated
        sources are generated before we run qmake on the target pro files. This
        is achieved by using the 'incremental' target.

        Reviewed by Ossy.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-03-06  Filip Pizlo  <fpizlo@apple.com>

        DumpRenderTree should support preciseTime()
        https://bugs.webkit.org/show_bug.cgi?id=80397

        Reviewed by Gavin Barraclough.

        * DumpRenderTree/LayoutTestController.cpp:
        (preciseTimeCallback):
        (LayoutTestController::staticFunctions):

2012-03-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109887.
        http://trac.webkit.org/changeset/109887
        https://bugs.webkit.org/show_bug.cgi?id=80402

        It broke the build (Requested by Ossy on #webkit).

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/QtInitializeTestFonts.cpp:
        (WebKit::initializeTestFonts):
        * QtTestBrowser/QtTestBrowser.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * qmake/mkspecs/features/features.prf:

2012-03-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109837.
        http://trac.webkit.org/changeset/109837
        https://bugs.webkit.org/show_bug.cgi?id=80399

        breaks Mac Productions builds, too late to try and fix it
        tonight (Requested by eseidel on #webkit).

        * Scripts/build-webkit:

2012-03-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use correct define names for HAVE(FOO) style optional dependencies

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/QtInitializeTestFonts.cpp:
        (WebKit::initializeTestFonts):
        * QtTestBrowser/QtTestBrowser.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * qmake/mkspecs/features/features.prf:

2012-03-06  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [Qt] Create EWS to build WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=80277

        Reviewed by Csaba Osztrogonác.

        * QueueStatusServer/model/queues.py:
        (Queue):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (QtWK2EWS):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSytemTest.test_builder_ewses):

2012-03-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109733.
        http://trac.webkit.org/changeset/109733
        https://bugs.webkit.org/show_bug.cgi?id=80378

        It broke Qt5 build system (Requested by Ossy on #webkit).

        * Tools.pro:
        * qmake/config.tests/gccdepends/empty.cpp: Removed.
        * qmake/config.tests/gccdepends/gccdepends.pro: Removed.
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/unix/default_pre.prf:
        * qmake/sync.profile:

2012-03-05  Eric Seidel  <eric@webkit.org>

        Update JavaScriptCore files to use fully-qualified WTF include path
        https://bugs.webkit.org/show_bug.cgi?id=79960

        Reviewed by Adam Barth.

        Build WTF/WTF.xcodeproj by default on Mac.

        * Scripts/build-webkit:

2012-03-05  Dirk Pranke  <dpranke@chromium.org>

        There should be a way to disable optimizer in webkit-patch rebaseline-expectations
        https://bugs.webkit.org/show_bug.cgi?id=69590

        Reviewed by Ryosuke Niwa.

        Adds a --no-optimize flag to webkit-patch rebaseline-expectations
        to skip the 'optimize-expectations' step.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineExpectations.__init__):
        (RebaselineExpectations.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:

2012-03-05  Kent Tamura  <tkent@chromium.org>

        [Chromium] Add new popup type: PagePopup
        https://bugs.webkit.org/show_bug.cgi?id=80106

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createPopupMenu):

2012-03-05  Jessie Berlin  <jberlin@apple.com>

        Add myself as a reviewer.

        * Scripts/webkitpy/common/config/committers.py:
        Also, add my IRC nick so it is easier to find and yell at me.

2012-03-05  Robert Kroeger  <rjkroege@chromium.org>

        Correctly compute the positions of GestureScroll* events on
        Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=80075

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::reset):
        (EventSender::gestureEvent):
        * DumpRenderTree/chromium/EventSender.h:
        (EventSender):

2012-03-05  Dirk Pranke  <dpranke@chromium.org>

        flakiness dashboard doesn't display baselines for virtual tests correctly
        https://bugs.webkit.org/show_bug.cgi?id=80341

        Reviewed by Ojan Vafai.

        If the test is part of a virtual test suite, we need to look for
        baselines in the underlying fallback path for the actual test
        being run, as well as baselines for the virtual version.

        This patch adds code to handle both branches and also pulls the
        mapping of the test suites up into a constant.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (testLookupVirtualTestSuite):
        (testBaseTest):

2012-03-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109760.
        http://trac.webkit.org/changeset/109760
        https://bugs.webkit.org/show_bug.cgi?id=80320

        Caused many GTK+ tests to crash (Requested by mrobinson on
        #webkit).

        * gtk/jhbuild.modules:

2012-03-05  Charlie Reis  <creis@chromium.org>

        [chromium] Pass WebNavigationPolicy to WebViewClient::createView
        https://bugs.webkit.org/show_bug.cgi?id=80057

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createView):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-03-05  Martin Robinson  <mrobinson@igalia.com>

        [soup] Crash while loading http://www.jusco.cn
        https://bugs.webkit.org/show_bug.cgi?id=68238

        Reviewed by Philippe Normand.

        * gtk/jhbuild.modules: Bumped the libsoup and glib dependencies
        in the jhbuild file.

2012-03-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109748.
        http://trac.webkit.org/changeset/109748
        https://bugs.webkit.org/show_bug.cgi?id=80296

        Made some tests crash, will fix and recommit (Requested by
        noamr on #webkit).

        * MiniBrowser/qt/main.cpp:
        (main):

2012-03-05  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] plugins/netscape-plugin-page-cache-works.html fails
        https://bugs.webkit.org/show_bug.cgi?id=74409

        Reviewed by Martin Robinson.

        Add support for overriding the page-cache-for-plugins preference
        through DumpRenderTreeSupport.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (booleanFromValue): A helper function to convert a string to boolean.
        (LayoutTestController::overridePreference):

2012-03-05  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Update Tools/DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=80287

        Reviewed by Antonio Gomes.

        Update so we are sure we can build our implementation of DRT.

        * DumpRenderTree/DumpRenderTree.h: include DumpRenderTreeBlackBerry.h.
        * DumpRenderTree/PixelDumpSupport.cpp: include PixelDumpSupportBlackBerry.h.
        * DumpRenderTree/blackberry/AccessibilityControllerBlackBerry.cpp:
        (AccessibilityController::addNotificationListener): add missing hook.
        (AccessibilityController::removeNotificationListener): add missing hook.
        * DumpRenderTree/blackberry/AccessibilityUIElementBlackBerry.cpp:
        (AccessibilityUIElement::isSelectedOptionActive): add missing hook.
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        (LayoutTestController::setMockSpeechInputDumpRect): add missing hook.
        (LayoutTestController::simulateDesktopNotificationClick): add missing hook.

2012-03-05  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] [WK2] Support threaded renderer in WK2
        https://bugs.webkit.org/show_bug.cgi?id=76661

        Remove the QML_NO_THREADED_RENDERER environment variable from MiniBrowser.

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/main.cpp:
        (main):

2012-03-05  Alexander Færøy  <alexander.faeroy@nokia.com>

        Unreviewed. Add myself to committer list.

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

2012-03-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use config test to determine if the compiler supports -MD

        We used to assume that unix systems building against Qt5 would have
        a compiler that supported -MD. Although this was usually the case,
        we failed to take into account broken tools for distributed builds
        (e.g. teambuilder or icecream) which would end up producing .d files
        in the root of the build dir instead of along-side the object file.

        Now that we use a config-test to determine the support, we'll capture
        those cases, unless distributed builds are enabled after the initial
        build-webkit run.

        Reviewed by Csaba Osztrogonác.

        * Tools.pro:
        * qmake/config.tests/gccdepends/empty.cpp: Added.
        * qmake/config.tests/gccdepends/gccdepends.pro: Added.
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/unix/default_pre.prf:
        * qmake/sync.profile:

2012-03-05  Csaba Osztrogonác  <ossy@webkit.org>

        Qt API test buildstep throws exception after buildmaster update
        https://bugs.webkit.org/show_bug.cgi?id=80249

        Reviewed by Zoltan Herczeg.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Disable API tests on the Qt bot temporarily.
        (BuildAndTestFactory.__init__):

2012-03-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Unit tests are noisy when run under jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=80241

        Reviewed by Philippe Normand.

        Force the 'memory' backend in GSettings so that each unit
        test doesn't produce a warning when it's forced to fall back
        to the 'memory' backend.

        * Scripts/run-gtk-tests:
        (TestRunner.run): Force the 'memory' backend.

2012-03-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] "Console: undefined @0: ReferenceError: Can't find variable: WebInspector" during testwebinspector
        https://bugs.webkit.org/show_bug.cgi?id=80235

        Reviewed by Philippe Normand.

        * Scripts/run-gtk-tests:
        (TestRunner.run): Use the WEBKIT_INSPECTOR_PATH environment variable so that
        inspector resources path determination is shared by all tests.

2012-03-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] REGRESSION: r108278 broke some tests that expect focus
        https://bugs.webkit.org/show_bug.cgi?id=79084

        Reviewed by Philippe Normand.

        Grab focus when dumping test results and also when sending
        events. During the course of testing, the WebView may lose
        focus and this seems to snap it back when tests demand it.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dump): Grab focus.
        * DumpRenderTree/gtk/EventSender.cpp:
        (dispatchEvent): Ditto.

2012-03-04  Charles Wei  <charles.wei@torchmobile.com.cn>

        Unreviewed, Add myself to committer list.
        https://bugs.webkit.org/show_bug.cgi?id=80232

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

2012-03-04  Anders Carlsson  <andersca@apple.com>

        Newer versions of clang fail to compile WebKit.

        Fix build.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (descriptionOfValue):
        (AccessibilityUIElement::rowIndexRange):
        (AccessibilityUIElement::columnIndexRange):
        (AccessibilityUIElement::selectedTextRange):
        * DumpRenderTree/mac/EditingDelegate.mm:
        (-[DOMRange dump]):
        * DumpRenderTree/mac/PolicyDelegate.mm:
        (-[PolicyDelegate webView:unableToImplementPolicyWithError:frame:]):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[NSError _drt_descriptionSuitableForTestResult]):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::descriptionOfValue):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::selectedTextRange):

2012-03-03  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix static_libs_as_shared build
        https://bugs.webkit.org/show_bug.cgi?id=80214

        Reviewed by Tor Arne Vestbø.

        * WebKitTestRunner/qt/main.cpp:
        (main): Set the correct environment variable for choosing the theme in the
        web process.

2012-03-03  Hans Wennborg  <hans@chromium.org>

        Implement Speech JavaScript API
        https://bugs.webkit.org/show_bug.cgi?id=80019

        Reviewed by Adam Barth.

        Add ENABLE_SCRIPTED_SPEECH.

        * Scripts/build-webkit:
        * qmake/mkspecs/features/features.prf:

2012-03-02  Alexey Proskuryakov  <ap@apple.com>

        Fix commit queue, remove duplicate entry.

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

2012-03-02  Stephen Chenney  <schenney@chromium.org>

        Unreviewed, add myself as a committer

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

2012-03-02  Ojan Vafai  <ojan@chromium.org>

        Add the Chromium Lion canary bot to the flakiness dashboard.
        * TestResultServer/static-dashboards/builders.js:

2012-03-02  Dirk Pranke  <dpranke@chromium.org>

        links for virtual tests are broken in the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=80180

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        (linkHTMLToOpenWindow):
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (testLinkHTMLToOpenWindow): added.

2012-03-02  Philippe Normand  <pnormand@igalia.com>

        [GTK] security/block-test.html baselines differ from mac
        https://bugs.webkit.org/show_bug.cgi?id=78343

        Reviewed by Martin Robinson.

        Improved the FrameLoader error heuristics to match mac behavior a
        bit more.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (pathFromSoupURI): Handle ftp urls the same as http urls.
        (descriptionSuitableForTestResult): Map WebKitPolicyError to WebKitErrorDomain.

2012-03-02  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Fix typo in patch committed in r109575

        Unreviewed typo fix.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify): Cache the position
        in floating point coordinates.

2012-03-02  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Infinite loop on history navigation, when panning
        https://bugs.webkit.org/show_bug.cgi?id=79119

        Reviewed by Simon Hausmann.

        Make the touch mocking more robust by creating touch events
        directly and sending them synchronously to the browser window.
        If the sent touch event was not accepted we propagate the
        original mouse event to its target.
        This way we make sure we only send either a touch or a mouse
        event and do not end up in an infinite loop between our mocking
        code and the Qt5 automatic mouse event synthesizing.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::updateVisualMockTouchPoints):
        * MiniBrowser/qt/BrowserWindow.h:
        (BrowserWindow):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (touchRectForPosition):
        (MiniBrowserApplication::notify):
        (MiniBrowserApplication::sendTouchEvent):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (MiniBrowserApplication):

2012-03-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use 'all' as default target when debug_and_release is in effect

        When debug_and_release is enabled, in combination with build_all,
        qmake will generate an aggregate makefile that calls make on both
        the debug and the release makefiles, but with the 'all' target.

        In this case we can't use 'first' as the default target, as the
        extra targets would then not be run, so we append extra targets
        to 'all' instead.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:

2012-03-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make sure activeBuildConfig() returns the right config

        Using isActiveConfig fails, as that only checks if the given
        argument is in CONFIG, not the order.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/functions.prf:

2012-03-02  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix tests run with WTR not using QStyle theme
        https://bugs.webkit.org/show_bug.cgi?id=80147

        Reviewed by Csaba Osztrogonác.

        * WebKitTestRunner/qt/main.cpp:
        (main): Set environment variable for web process to use QStyle theme.

2012-03-02  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, remove debug print call.

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

2012-03-02  Robert Kroeger  <rjkroege@chromium.org>

        Updated EventSender to send complete gesture events.
        https://bugs.webkit.org/show_bug.cgi?id=80075

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::gestureEvent): set additional parameters in sent events.

2012-03-01  Kalev Lember  <kalevlember@gmail.com>

        WebKitTestRunner: Explicitly include unistd.h for gcc 4.7
        https://bugs.webkit.org/show_bug.cgi?id=80033

        Reviewed by Gustavo Noronha Silva.

        GCC 4.7 no longer includes unistd.h from most of the standard C++
        header files, so we need to explicitly include it for getcwd().

        * WebKitTestRunner/TestInvocation.cpp: Make sure unistd.h gets included
        not only on Mac, but on all Unix platforms.

2012-03-01  Dirk Pranke  <dpranke@chromium.org>

        Actually look at the args in driver_input :(.

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.run_test):

2012-03-01  Dirk Pranke  <dpranke@chromium.org>

        Fix typo in flag used to run gpu virtual suites.

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.virtual_test_suites):

2012-03-01  Adam Barth  <abarth@webkit.org>

        Unreviewed, rolling out r109317.
        http://trac.webkit.org/changeset/109317

        Let's try watchlists again now that we're using a pure git
        working copy

        * Scripts/webkitpy/tool/bot/stylequeuetask.py:
        (StyleQueueTask.run):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2012-03-01  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: test_run_test_pause_before_testing is failing after r109482
        https://bugs.webkit.org/show_bug.cgi?id=80084

        Unreviewed, build fix.

        Fixes the test string compare to ignore the time spent running
        the tests.

        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_test_pause_before_testing):

2012-03-01  Dirk Pranke  <dpranke@chromium.org>

        nrwt: virtual tests aren't being run
        https://bugs.webkit.org/show_bug.cgi?id=80083

        Reviewed by Eric Seidel.

        If we tried to run all of the tests by default (and
        didn't specify any paths), the virtual tests weren't
        picked up.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._virtual_tests):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_tests):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.virtual_test_suites):

2012-03-01  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should report the test runtime
        https://bugs.webkit.org/show_bug.cgi?id=80078

        Reviewed by Hajime Morita.

        Record and output the aggreated test run time.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._run_single_test):

2012-03-01  Michael Nordman  <michaeln@google.com>

        [chromium] Use webkit_support to create session storage namespaces in DRT.
        https://bugs.webkit.org/show_bug.cgi?id=79933

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createSessionStorageNamespace):

2012-03-01  Dirk Pranke  <dpranke@chromium.org>

        nrwt: test_isfile, test_isdir, and test_exists don't work for virtual tests
        https://bugs.webkit.org/show_bug.cgi?id=80048

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.test_isfile):
        (Port.test_isdir):
        (Port):
        (Port.test_exists):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_test_exists):
        (PortTest):
        (PortTest.test_test_isfile):
        (PortTest.test_test_isdir):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.virtual_test_suites):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_virtual):

2012-03-01  Kalev Lember  <kalevlember@gmail.com>

        [GTK] Avoid building any parts of WebKitTestRunner when WK2 is disabled
        https://bugs.webkit.org/show_bug.cgi?id=80031

        Reviewed by Gustavo Noronha Silva.

        Only build the libTestRunnerInjectedBundle.la convenience library when
        ENABLE_WEBKIT2 is defined.

        * WebKitTestRunner/GNUmakefile.am:

2012-03-01  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, second attempt to fix GTK NRWT after r109242.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkDriver._start):

2012-03-01  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK NRWT build fix attempt after r109242.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkDriver._start):

2012-03-01  Kentaro Hara  <haraken@chromium.org>

        REGRESSION(r109036): run-bindings-tests fails because resolve-supplemental.pl was renamed
        https://bugs.webkit.org/show_bug.cgi?id=80008

        Reviewed by Adam Barth.

        In r109036, I forgot to rename "resolve-supplemental.pl" in run-bindings-tests
        to "preprocess-idls.pl". This patch renames it.

        Test: Confirm that run-bindings-tests runs.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):

2012-02-29  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] QQuickWebView::event should lookup faster which events QQuickWebPage can handle
        https://bugs.webkit.org/show_bug.cgi?id=78047

        Reviewed by Kenneth Rohde Christiansen.

        Send events for the webview through the QQuickCanvas instead of directly to the item. Direct
        sending to the item requires the QObject::event re-implementation to dispatch to the correct
        event handling function. However QQuickItem::event doesn't do that. Instead QQuickCanvas calls
        the event handlers directly, and with the removal of our own dispatching we need to go through
        that code path.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::sendEvent):
        (WTR::PlatformWebView::postEvent):

2012-02-29  Adam Barth  <abarth@webkit.org>

        Disable watchlist.  It's been spamming CCs.

        * Scripts/webkitpy/tool/bot/stylequeuetask.py:
        (StyleQueueTask.run):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2012-02-29  Dirk Pranke  <dpranke@chromium.org>

        need to clone the gpu baselines and expectations into the new "virtual" dir
        https://bugs.webkit.org/show_bug.cgi?id=79956

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.virtual_test_suites):

2012-02-29  Mark Rowe  <mrowe@apple.com>

        Switch to using json rather than simplejson now that the master is using Python 2.7.

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

2012-02-29  David Levin  <levin@chromium.org>

        [chromium] Add the ability to turn off autoresize.
        https://bugs.webkit.org/show_bug.cgi?id=77452

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): Expose a way to turn off auto-resize.
        (LayoutTestController::enableAutoResizeMode): Ditto and adjust to new WebKit api.
        (LayoutTestController::disableAutoResizeMode):  Ditto.
        * DumpRenderTree/chromium/LayoutTestController.h: Ditto.

2012-02-29  Dirk Pranke  <dpranke@chromium.org>

        nrwt: make --print trace work with virtual tests
        https://bugs.webkit.org/show_bug.cgi?id=79952

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer._print_test_trace):
        (Printer._print_baseline):

2012-02-28  Brian Weinstein  <bweinstein@apple.com>

        WebKit2: didNewFirstVisuallyNonEmptyLayout should be sent to injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=79849

        Reviewed by Beth Dakin.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Add an entry to the struct.

2012-02-29  Lucas Forschler  <lforschler@apple.com>

        Removed unused Apple buildslaves from the master configuration
        https://bugs.webkit.org/show_bug.cgi?id=79925

        Reviewed by Stephanie Lewis.

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

2012-02-29  Dirk Pranke  <dpranke@chromium.org>

        nrwt: implement simple 'virtual test suite' support
        https://bugs.webkit.org/show_bug.cgi?id=79737

        Reviewed by Adam Barth.

        Add very basic support for 'virtual test suites' to NRWT:
        a virtual suite is a directory that may contain new baselines,
        contains a pointer to a "base" directory of tests, and an
        optional list of command line arguments to pass to DRT;
        it gives us a way to run all of the tests in a given directory
        multiple times with multiple (potentially differing) sets of
        results and baselines.

        This patch implements the support needed for this feature, and
        some basic tests, but no actual port will use the feature yet.

        This is probably the simplest implementation possible - the
        list of virtual suites will be hard-coded into the port's
        implementation. One can imagine a more data-driven approach
        where the suite instructions are stored in a manifest file
        either in LayoutTests (all suites in one file), or per-port,
        or per-directory. If this feature ends up being useful we
        should probably add something like that so people don't have
        to hunt around in the code to add suites.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        (Port.expected_filename):
        (Port.tests):
        (Port):
        (Port._real_tests):
        (Port._driver_class):
        (Port.virtual_test_suites):
        (Port.virtual_suite):
        (Port.virtual_suite.VirtualTestSuite):
        (Port.virtual_suite.VirtualTestSuite.__init__):
        (Port.virtual_suite.VirtualTestSuite.__repr__):
        (Port.populated_virtual_test_suites):
        (Port._virtual_tests):
        (Port.lookup_virtual_test_base):
        (Port.lookup_virtual_test_args):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_find_with_skipped_directories):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverInput.__init__):
        (DriverProxy.run_test):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.virtual_test_suites):
        (TestDriver.run_test):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_all):
        (MainTest.test_virtual):

2012-02-29  Dirk Pranke  <dpranke@chromium.org>

        nrwt: support more than two drivers in DriverProxy
        https://bugs.webkit.org/show_bug.cgi?id=79736

        Reviewed by Adam Barth.

        Now that we can support per-test command lines for
        Drivers, modify DriverProxy to keep a map of running
        drivers for each needed command-line; this will allow
        us to transparently maintain a pool of appropriately
        configured DRTs without having to constantly start and stop
        them.

        Note that this potentially raises a garbage collection
        problem - the number of running DRTs will grow with the
        number of different sets of command line args. For now
        this is no worse than the current code - if you're running
        with pixel tests, you will only need one DRT per worker,
        and if you aren't, you'll need two (one for text-only tests,
        and one for reftests).

        An alternative would be to only ever have one running driver,
        and restart the driver as the command line changes, but this
        might (?) slow down execution in the text-only case - we
        should benchmark this because it would be simpler and possibly
        allow us to eliminate DriverProxy altogether.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverProxy.__init__):
        (DriverProxy):
        (DriverProxy._make_driver):
        (DriverProxy.run_test):
        (DriverProxy.has_crashed):
        (DriverProxy.stop):
        (DriverProxy.cmd_line):
        (DriverProxy._cmd_line_as_key):

2012-02-29  Adrienne Walker  <enne@google.com>

        Unreviewed, add myself as a reviewer

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

2012-02-29  Greg Billock  <gbillock@google.com>

        Add more tests for web intents
        https://bugs.webkit.org/show_bug.cgi?id=79527

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::sendWebIntentResponse):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):
        (WebViewHost::currentIntentRequest):

2012-02-29  Dirk Pranke  <dpranke@chromium.org>

        nrwt: port/Driver needs to support per-test command line args
        https://bugs.webkit.org/show_bug.cgi?id=79733

        Reviewed by Adam Barth.

        As part of removing the 'gpu' configurations and adding support
        for 'virtual test suites', the Driver classes need to support
        per-test command lines (since different tests will need to be
        run with different command line options).

        The per-test args are not yet used, so this change should have
        no visible effects and need no additional testing.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.driver_cmd_line):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.cmd_line):
        (ChromiumDriver._start):
        (ChromiumDriver.start):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.test_two_drivers.MockDriver.cmd_line):
        (ChromiumDriverTest):
        (ChromiumDriverTest.test_two_drivers):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.cmd_line):
        (DriverProxy.__init__):
        (DriverProxy.start):
        (DriverProxy.cmd_line):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverTest.test_virtual_driver_methods):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkDriver.cmd_line):
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort._path_to_driver):
        (TestDriver.cmd_line):
        (TestDriver.start):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.cmd_line):
        (WebKitDriver._start):
        (WebKitDriver.run_test):
        (WebKitDriver.start):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitDriverTest.test_no_timeout):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._run_tests_set):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_test_pause_before_testing):

2012-02-29  Dirk Pranke  <dpranke@chromium.org>

        perftestsrunner can call printer.write() after printer.cleanup()
        https://bugs.webkit.org/show_bug.cgi?id=79872

        Reviewed by Ryosuke Niwa.

        This patch fixes a unittest that was incorrectly calling
        PerfTestsRunner.run() twice (which led to a weird state in the
        printer object).

        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.test_run_with_upload_json):

2012-02-29  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] WebKitTestRunner should use 480x360 sized view for W3C SVG tests
        https://bugs.webkit.org/show_bug.cgi?id=76546

        Reviewed by Simon Hausmann.

        Revert the workaround introduced in r107868 and reintroduce
        the qml binding so we can test the code path that we are more
        interested in. The reason that it did not work before is that
        we don't have an active platform window which we now workaround
        by propagating the resize through QWindowSystemInterface.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        (WTR::PlatformWebView::resizeTo):

2012-02-29  Gabor Rapcsanyi  <rgabor@webkit.org>

        [GTK] Small fix for cross compilation to not generate gtkdoc.

        Rubber-stamped by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:
        (isCrossCompilation):

2012-02-28  Lucas Forschler  <lforschler@apple.com>

        Fix a typo in config.json
        linx -> linux
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2012-02-28  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        [Qt] Allow read/write to the WebView.url property
        https://bugs.webkit.org/show_bug.cgi?id=77554

        Reviewed by Tor Arne Vestbø.

        Fix MiniBrowser to use WebView.url property and remove WebView.load usage.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-02-28  Dan Winship  <danw@gnome.org>

        [GTK] make tests explicitly request GSettingsBackendMemory
        https://bugs.webkit.org/show_bug.cgi?id=79788

        Reviewed by Martin Robinson.

        Explicitly request the fallback memory-based GSettings backend; if
        other backends are available then we don't want to use them,
        because they would make tests depend on the user's preferences.
        And if other backends aren't available, we don't need glib to
        print a warning about that fact.

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

2012-02-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109110.
        http://trac.webkit.org/changeset/109110
        https://bugs.webkit.org/show_bug.cgi?id=79806

        webkitpy makes it too easy to add wkb.ug URLs to ChangeLogs
        (Requested by aroben on #webkit).

        * Scripts/webkitpy/common/checkout/changelog.py:
        (parse_bug_id):
        (parse_bug_id_from_changelog):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/config/urls.py:

2012-02-28  Adam Roben  <aroben@webkit.org>

        Add my new email address

        Fixes <http://wkb.ug/79797> Adam Roben's email address in webkitpy is soon to be incorrect

        Reviewed by Anders Carlsson.

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

2012-02-28  Adam Roben  <aroben@apple.com>

        Teach webkitpy about wkb.ug URLs

        Fixes <http://wkb.ug/79799> webkit-patch can't find bug numbers from ChangeLog entries that
        use wkb.ug URLs

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (parse_bug_id):
        (parse_bug_id_from_changelog):
        Fall back to the tiny URL format if neither the short nor long URL formats work.

        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (ChangeLogTest.test_parse_bug_id_from_changelog): Added tests for the above changes.

        * Scripts/webkitpy/common/config/urls.py: Added bug_url_tiny, which can be used to match
        wkb.ug URLs.

2012-02-28  János Badics  <dicska@gmail.com>

        [Qt] build-webkit does not detect the number of CPUs
        https://bugs.webkit.org/show_bug.cgi?id=76445

        Based on Seo Sanghyeon's work (modification:
        Automatically determine the number of CPUs for make
        only if -j make argument haven't already been specified.)

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-02-28  Kent Tamura  <tkent@chromium.org>

        Update a pattern for forms files of watchlist
        https://bugs.webkit.org/show_bug.cgi?id=79767

        Reviewed by Kentaro Hara.

        * Scripts/webkitpy/common/config/watchlist:
        Catches the following files with the "Forms" pattern.
        - HTMLDatListElement.*
        - HTMLKeygenElement.*
        - HTMLLegendElement.*
        - HTMLOutputElement.*
        - FormAssociatedElement.*
        - SliderThumbElement.*
        - TextControlInnerElements.*
        - RenderFileUploadControl.*

2012-02-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109041.
        http://trac.webkit.org/changeset/109041
        https://bugs.webkit.org/show_bug.cgi?id=79741

        Broke Chromium Win build (Requested by bashi on #webkit).

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

2012-02-27  James Robinson  <jamesr@chromium.org>

        [chromium] Remove media tests from ChromiumGpu configurations
        https://bugs.webkit.org/show_bug.cgi?id=79720

        Reviewed by Adam Barth.

        We no longer need to run the media/ tests in both GPU and non-GPU configurations since we can exercise the GPU
        composited playback path via tests in the compositing/ directory.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        (_default_tests_paths):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        (ChromiumGpuTest.test_default_tests_paths):
        (ChromiumGpuTest.test_test_files):

2012-02-27  Dirk Pranke  <dpranke@chromium.org>

        nrwt: log multiline stderr/crash output properly
        https://bugs.webkit.org/show_bug.cgi?id=79722

        Reviewed by Adam Barth.

        This cleans up some nits in the log output to make things
        slightly easier to read (every line gets timestamped, etc.).

        Also tweaks the log message for pixel hash mismatches.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._handle_error):
        (SingleTestRunner._compare_image):

2012-02-27  Ryosuke Niwa  <rniwa@webkit.org>

        Touch the master.cfg to force a reconfig.

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

2012-02-27  Jacky Jiang  <zhajiang@rim.com>

        [BlackBerry] Upstream BlackBerry API web page related files
        https://bugs.webkit.org/show_bug.cgi?id=74380

        Reviewed by Antonio Gomes.

        Adapt to the removing of WebPage::mainFrame(), use
        DumpRenderTreeSupport::corePage() and its mainFrame() instead.

        No new tests as this patch doesn't change behavior.

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

2012-02-27  Ryosuke Niwa  <rniwa@webkit.org>

        Add Windows and Linux Chromium perf bots
        https://bugs.webkit.org/show_bug.cgi?id=79418

        Reviewed by Tony Chang.

        Add Chromium Win and Linux perf bots. Also replace Chromium Mac by
        the dedicated perf bot slave (uses the same hardware).

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

2012-02-27  Xianzhu Wang  <wangxianzhu@chromium.org>

        Undefined variable 'current' when running chromium_android.py
        https://bugs.webkit.org/show_bug.cgi?id=79696

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver._read_prompt):

2012-02-27  Greg Billock  <gbillock@google.com>

        Add more tests for web intents
        https://bugs.webkit.org/show_bug.cgi?id=79527

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::sendWebIntentResponse):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):
        (WebViewHost::currentIntentRequest):

2012-02-27  Xianzhu Wang  <wangxianzhu@chromium.org>

        Chromium-Android layout test script: the adb shell prompt is not always '# '
        https://bugs.webkit.org/show_bug.cgi?id=79506

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver._start):
        (ChromiumAndroidDriver._read_prompt):

2012-02-27  Dan Bernstein  <mitz@apple.com>

        Added a test for <rdar://problem/9557598> REGRESSION (WebKit2): Non-activating links sometimes don’t work
        https://bugs.webkit.org/show_bug.cgi?id=79607

        Reviewed by Adele Peterson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added new files.
        * TestWebKitAPI/Tests/mac/AcceptsFirstMouse.mm: Added.
        (TestWebKitAPI::AcceptsFirstMouse::url):
        (TestWebKitAPI::AcceptsFirstMouse::didLoadURL):
        (TestWebKitAPI::AcceptsFirstMouse::runTest):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/mac/acceptsFirstMouse.html: Added.

2012-02-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Fix typo.

2012-02-27  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use USE() macro instead of ENABLE() for using the Qt image decoder

        Reviewed by Kenneth Rohde Christiansen..

        * qmake/mkspecs/features/features.prf:

2012-02-27  Hao Zheng  <zhenghao@chromium.org>

        Add a ChromiumGpuAndroid port.
        https://bugs.webkit.org/show_bug.cgi?id=79628

        Reviewed by Adam Barth.

        Android does have a gpu port, so revert r107697.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        (ChromiumGpuAndroidPort):
        (ChromiumGpuAndroidPort.__init__):
        (ChromiumGpuAndroidPort.baseline_search_path):
        (ChromiumGpuAndroidPort.default_child_processes):
        (ChromiumGpuAndroidPort.tests):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory):

2012-02-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Change Build bot with BuildAndTest bot for EFL port.
        https://bugs.webkit.org/show_bug.cgi?id=77518

        Reviewed by Ryosuke Niwa.

        EFL build bot starts to support layout test.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):
        (extractBuiltProduct):
        * BuildSlaveSupport/test-result-archive:
        (archiveTestResults):
        * Scripts/webkitdirs.pm: Enable SHARED_CORE option when ENABLE_DRT is enable in EFL port.
        (generateBuildSystemFromCMakeProject):

2012-02-24  Darin Fisher  <darin@chromium.org>

        Add watchlist for ChromiumPlatformApi matching Source/Platform/chromium/public/

        Reviewed by James Robinson.

        * Scripts/webkitpy/common/config/watchlist:

2012-02-24  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: changelog_unittest test_fuzzy_reviewer_match is slow
        https://bugs.webkit.org/show_bug.cgi?id=79258

        Reviewed by Ryosuke Niwa.

        Split the fuzzy matching into separate functions so that they
        can be sharded and run in parallel.

        Also, fix a bug in the svn_blame_regexp that was causing us
        to require ChangeLog lines to have at least one space after the
        author, making the code require trailing whitespace in the
        changelog in some places (this was making my life harder because
        I have my text editor set to strip trailing whitespace in python
        files, and that was causing test_parse_log_entries_from_changelog() to fail
        when the whitespace on line 275 was removed).

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLog):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_fuzzy_reviewer_match__none):
        (test_fuzzy_reviewer_match_adam_barth):
        (test_fuzzy_reviewer_match_darin_adler_et_al):
        (test_fuzzy_reviewer_match_dimitri_glazkov):
        (test_fuzzy_reviewer_match_george_staikos):
        (test_fuzzy_reviewer_match_mark_rowe):

2012-02-24  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: committers_unittest fuzzy matching is really slow
        https://bugs.webkit.org/show_bug.cgi?id=79179

        Reviewed by Ryosuke Niwa.

        Break the fuzzy matching tests into individual routines for
        each contributor so that the intent is a little clearer, so
        that it's easier to test individual names (and identify
        duplicate tests), and so that we can eventually run
        them in parallel.

        Also, mark most of them as 'integration' tests so that they
        can be skipped if we want to go fast (we leave a few as
        regular tests for functional coverage).

        * Scripts/webkitpy/common/config/committers_unittest.py:
        (CommittersTest):
        (CommittersTest.test_contributors_by_fuzzy_match):
        (CommittersTest.integration_test_contributors__none):
        (CommittersTest.integration_test_contributors__none_2):
        (CommittersTest.integration_test_contributors__none_3):
        (CommittersTest.integration_test_contributors_ada_chan):
        (CommittersTest.integration_test_contributors_adele_peterson):
        (CommittersTest.integration_test_contributors_alexey_proskuryakov):
        (CommittersTest.integration_test_contributors_alice_liu):
        (CommittersTest.integration_test_contributors_alp_toker):
        (CommittersTest.integration_test_contributors_anders_carlsson):
        (CommittersTest.integration_test_contributors_antti_koivisto):
        (CommittersTest.integration_test_contributors_beth_dakin):
        (CommittersTest.integration_test_contributors_brady_eidson):
        (CommittersTest.integration_test_contributors_cameron_zwarich):
        (CommittersTest.integration_test_contributors_chris_blumenberg):
        (CommittersTest.integration_test_contributors_dan_bernstein):
        (CommittersTest.integration_test_contributors_dan_bernstein_2):
        (CommittersTest.integration_test_contributors_darin_adler):
        (CommittersTest.integration_test_contributors_david_harrison):
        (CommittersTest.integration_test_contributors_david_harrison_2):
        (CommittersTest.integration_test_contributors_david_hyatt):
        (CommittersTest.integration_test_contributors_david_kilzer):
        (CommittersTest.integration_test_contributors_don_melton):
        (CommittersTest.integration_test_contributors_eric_seidel):
        (CommittersTest.integration_test_contributors_geoffrey_garen):
        (CommittersTest.integration_test_contributors_greg_bolsinga):
        (CommittersTest.integration_test_contributors_holger_freyther):
        (CommittersTest.integration_test_contributors_jon_sullivan):
        (CommittersTest.integration_test_contributors_jon_honeycutt):
        (CommittersTest.integration_test_contributors_joseph_pecoraro):
        (CommittersTest.integration_test_contributors_ken_kocienda):
        (CommittersTest.integration_test_contributors_kenneth_russell):
        (CommittersTest.integration_test_contributors_kevin_decker):
        (CommittersTest.integration_test_contributors_kevin_mccullough):
        (CommittersTest.integration_test_contributors_lars_knoll):
        (CommittersTest.integration_test_contributors_lars_weintraub):
        (CommittersTest.integration_test_contributors_maciej_stachowiak):
        (CommittersTest.integration_test_contributors_mark_rowe):
        (CommittersTest.integration_test_contributors_nikolas_zimmermann):
        (CommittersTest.integration_test_contributors_oliver_hunt):
        (CommittersTest.integration_test_contributors_rniwa):
        (CommittersTest.disabled_integration_test_contributors_simon_fraser):
        (CommittersTest.integration_test_contributors_steve_falkenburg):
        (CommittersTest.integration_test_contributors_sam_weinig):
        (CommittersTest.integration_test_contributors_tim_omernick):
        (CommittersTest.integration_test_contributors_timothy_hatcher):
        (CommittersTest.integration_test_contributors_tor_arne_vestbo):
        (CommittersTest.integration_test_contributors_vicki_murley):
        (CommittersTest.integration_test_contributors_zack_rusin):

2012-02-24  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: should autoinstall coverage
        https://bugs.webkit.org/show_bug.cgi?id=79535

        Reviewed by Eric Seidel.

        We should automatically print the coverage report after the run, too.

        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_coverage):

2012-02-24  Pablo Flouret  <pablof@motorola.com>

        Fix copypasta in build-webkit's --vibration option description
        https://bugs.webkit.org/show_bug.cgi?id=79528

        Reviewed by Andreas Kling.

        * Scripts/build-webkit:

2012-02-24  Antonio Gomes  <agomes@rim.com>

        Adding myself to ScrollingCoordinator watchlist
        https://bugs.webkit.org/show_bug.cgi?id=79525

        Reviewed by Rob Buis.

        * Scripts/webkitpy/common/config/watchlist:

2012-02-24  Darin Fisher  <darin@chromium.org>

        Update watchlist for ChromiumPublicApi to include Platform/chromium/public/

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/watchlist:

2012-02-24  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: config_unittest is sensitive to other tests that might've already run
        https://bugs.webkit.org/show_bug.cgi?id=79382

        Reviewed by Adam Barth.

        If another test runs prior to config_unittest and pokes the
        cached configuration, the first test in config_unittest might
        fail; the tearDown() will then allow subsequent tests to pass.
        Clearing the configuration prior to each test makes things
        slightly slower but safer.

        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        (ConfigTest.setUp):

2012-02-24  David Kilzer  <ddkilzer@apple.com>

        Use xcrun to find compiler paths for Generate Derived Sources build phase script
        <http://webkit.org/b/79512>

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        (Generate Derived Sources): Use xcrun to find the path to the
        compiler since that works on both iOS and OS X.

2012-02-24  James Robinson  <jamesr@chromium.org>

        Create a watchlist for ScrollingCoordinator changes
        https://bugs.webkit.org/show_bug.cgi?id=79511

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/common/config/watchlist:

2012-02-24  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL][DRT] Implement setValueForUser and setAutofilled.
        https://bugs.webkit.org/show_bug.cgi?id=79237

        Reviewed by Andreas Kling.

        Adds missing implementation setValueForUser and setAutofilled to EFL's LayoutTestController.
        Those implementations are related with input fields and allow to pass following tests:
        fast/forms/onchange-setvalueforuser.html
        fast/forms/input-autofilled.html
        fast/forms/reset-autofilled.html

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setValueForUser):
        (LayoutTestController::setAutofilled):

2012-02-24  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Allow to use WebCore imagedecoders
        https://bugs.webkit.org/show_bug.cgi?id=32410

        Add ENABLE_QT_IMAGE_DECODER macro, it's enabled by default.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/features.prf:

2012-02-24  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Add Qt5 way to force 96 DPI for tests
        https://bugs.webkit.org/show_bug.cgi?id=79364

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/main.cpp:
        (main):
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):

2012-02-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] MiniBrowser should reload the view then the reload button is clicked
        https://bugs.webkit.org/show_bug.cgi?id=79472

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/BrowserWindow.c:
        (reloadCallback): Call webkit_web_view_reload().
        (browser_window_init): Connect reload item clicked even to
        reloadCallback instead of activateUriEntryCallback.

2012-02-24  Kentaro Hara  <haraken@chromium.org>

        Add performance tests for DOM attribute getters and setters
        https://bugs.webkit.org/show_bug.cgi?id=79208

        Reviewed by Ryosuke Niwa.

        We want to allow perf tests to output info messages
        that do not affect the test results. To accomplish this,
        this patch modifies perftestsrunner.py so that it ignores
        a line that starts from "Info:".

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):

2012-02-24  Andrew Lo  <anlo@rim.com>

        [BlackBerry] Enable requestAnimationFrame
        https://bugs.webkit.org/show_bug.cgi?id=79408

        Enable requestAnimationFrame for BlackBerry.

        Reviewed by Rob Buis.

        * Scripts/build-webkit:

2012-02-24  Adam Barth  <abarth@webkit.org>

        style-queue tries to apply the patch twice
        https://bugs.webkit.org/show_bug.cgi?id=79459

        Reviewed by Eric Seidel.

        Previously, we applied the patch using both apply-patch and
        check-style.  This patch introduces a check-style-local to mirror the
        apply-watchlist-local, which operates on the current working diff.

        This patch also cleans up some other bugs I found by running the queue
        locally for a while.  The queue still prints out a slightly
        less-than-ideal message on the bugs when it find an error, but it's ok
        for now.  We'll need to iterate a bit.

        * Scripts/webkitpy/tool/bot/stylequeuetask.py:
        (StyleQueueTask.validate):
        (StyleQueueTask._check_style):
        * Scripts/webkitpy/tool/commands/download.py:
        (CheckStyleLocal):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSytemTest._default_expected_stderr):
        (EarlyWarningSytemTest._test_testing_ews):
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractReviewQueue.handle_script_error):
        (StyleQueue.review_patch):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        (QueuesTest.assert_queue_outputs):

2012-02-23  Adam Barth  <abarth@webkit.org>

        should_proceed_with_work_item is unused and can be removed
        https://bugs.webkit.org/show_bug.cgi?id=79416

        Reviewed by Eric Seidel.

        We used to use this function to check whether the tree is red.  Now, we
        don't use external measures of whether to proceed with work items.
        Instead, we analyze them with the idea in mind that the tree might be
        red.

        * Scripts/webkitpy/tool/bot/queueengine.py:
        (QueueEngineDelegate.next_work_item):
        (QueueEngine.run):
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        (LoggingDelegate):
        (LoggingDelegate.next_work_item):
        (RaisingDelegate.process_work_item):
        (QueueEngineTest.test_terminating_error):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.__init__):
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractQueue.next_work_item):
        (FeederQueue.next_work_item):
        (CommitQueue.next_work_item):
        (AbstractReviewQueue.next_work_item):
        (StyleQueue.__init__):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (FeederQueueTest.test_feeder_queue):
        (CommitQueueTest.test_commit_queue):
        (test_commit_queue_failure):
        (test_commit_queue_failure_with_failing_tests):
        (test_rollout):
        (test_rollout_lands):
        (StyleQueueTest.test_style_queue_with_style_exception):
        (test_style_queue_with_watch_list_exception):
        * Scripts/webkitpy/tool/commands/queuestest.py:
        (QueuesTest.assert_queue_outputs):
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        (SheriffBot.next_work_item):

2012-02-23  Adrienne Walker  <enne@google.com>

        Unreviewed, add Stephen Chenney to committers.py as a contributor.

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

2012-02-23  Adam Barth  <abarth@webkit.org>

        style-queue logs bogus messages to the QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=79424

        Reviewed by Eric Seidel.

        Copy/paste error.

        * Scripts/webkitpy/tool/bot/stylequeuetask.py:
        (StyleQueueTask._check_style):
        (StyleQueueTask._apply_watch_list):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2012-02-23  Eric Seidel  <eric@webkit.org>

        Use self._filesystem in more places in the SCM classes
        https://bugs.webkit.org/show_bug.cgi?id=79415

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/scm/detection_unittest.py:
        (SCMDetectorTest.test_detect_scm_system):
        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.find_checkout_root):
        (Git.to_object_name):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.__init__):
        (SCM.in_working_directory):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.find_uuid):
        (SVN.find_checkout_root):

2012-02-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r108685.
        http://trac.webkit.org/changeset/108685
        https://bugs.webkit.org/show_bug.cgi?id=79414

        Broke Chromium builds (Requested by enne on #webkit).

        * qmake/mkspecs/features/features.prf:

2012-02-23  Adam Barth  <abarth@webkit.org>

        style-queue shouldn't spam bugs if it fails to update its working copy
        https://bugs.webkit.org/show_bug.cgi?id=79412

        Reviewed by Eric Seidel.

        This patch moves style-queue over to the new PatchAnalysisTask
        infrastructure, which is smarter about retrying patches when update
        fails.

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.run_and_throw_if_fail):
        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py:
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (UnableToApplyPatch):
        (UnableToApplyPatch.__init__):
        (PatchAnalysisTask.__init__):
        * Scripts/webkitpy/tool/bot/stylequeuetask.py: Added.
        (StyleQueueTaskDelegate):
        (StyleQueueTaskDelegate.parent_command):
        (StyleQueueTask):
        (StyleQueueTask.validate):
        (StyleQueueTask._check_style):
        (StyleQueueTask._apply_watch_list):
        (StyleQueueTask.run):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        (StyleQueue):
        (StyleQueue.should_proceed_with_work_item):
        (StyleQueue.review_patch):
        (StyleQueue.run_command):
        (StyleQueue.command_passed):
        (StyleQueue.command_failed):
        (StyleQueue.expected_failures):
        (StyleQueue.refetch_patch):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (StyleQueueTest.test_style_queue_with_style_exception):
        (test_style_queue_with_watch_list_exception):

2012-02-23  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Allow to use WebCore imagedecoders
        https://bugs.webkit.org/show_bug.cgi?id=32410

        Add ENABLE_QT_IMAGE_DECODER macro, it's enabled by default.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/features.prf:

2012-02-23  Eric Seidel  <eric@webkit.org>

        Remove old broken find_checkout_root tests now that find_checkout_root is gone
        https://bugs.webkit.org/show_bug.cgi?id=79405

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/scm/detection_unittest.py: Added.
        (SCMDetectorTest):
        (SCMDetectorTest.test_find_checkout_root):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (SVNTestRepository.tear_down):

2012-02-23  Michael Brüning  <michael.bruning@nokia.com>

        [Qt][WK2] Implement proxy authentication dialog.
        https://bugs.webkit.org/show_bug.cgi?id=79350

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/ProxyAuthenticationDialog.qml: Added.

2012-02-23  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, add recently added source dirs.

        * waf/build/settings.py:

2012-02-23  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Add support for touch cancellation
        https://bugs.webkit.org/show_bug.cgi?id=79348

        Reviewed by Kenneth Rohde Christiansen.

        Added straight-forward touch cancellation event sending to Qt WK1 DRT
        and WK2 WTR.

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::touchCancel):
        (EventSender::cancelTouchPoint):
        * DumpRenderTree/qt/EventSenderQt.h:
        (EventSender):
        * WebKitTestRunner/EventSenderProxy.h:
        (EventSenderProxy):
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::touchCancel):
        (WTR):
        (WTR::EventSendingController::cancelTouchPoint):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        (EventSendingController):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::touchCancel):
        (WTR):
        (WTR::EventSenderProxy::cancelTouchPoint):

2012-02-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r108626.
        http://trac.webkit.org/changeset/108626
        https://bugs.webkit.org/show_bug.cgi?id=79370

        broke qt-wk2 bot, somehow the workaround does not work on the
        bot (Requested by Ossy on #webkit).

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        (WTR::PlatformWebView::resizeTo):

2012-02-23  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK] DRT doesn't support scheduleAsynchronousKeyDown.
        https://bugs.webkit.org/show_bug.cgi?id=78481

        Reviewed by Gustavo Noronha Silva.

        Extracted shareable code from keyDownCallback and then added createKeyPressEvent
        to create gdk press key event.
        Added sendKeyDown and sendAsynchronousKeyDown to evaluate keyDown event directly
        and asynchronously. Eventually, sendAsynchronousKeyDown calls sendKeyDown.

        * DumpRenderTree/gtk/EventSender.cpp:
        (scheduleAsynchronousClickCallback):
        (createKeyPressEvent):
        (sendKeyDown):
        (keyDownCallback):
        (sendAsynchronousKeyDown):
        (scheduleAsynchronousKeyDownCallback):

2012-02-23  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] WebKitTestRunner should use 480x360 sized view for W3C SVG tests
        https://bugs.webkit.org/show_bug.cgi?id=76546

        Reviewed by Simon Hausmann.

        Co-authored with Simon Hausmann.

        Revert the workaround introduced in r107868 and reintroduce
        the qml binding so we can test the code path that we are more
        interested in. The reason that it did not work before is that
        we don't have an active platform window which we now workaround
        by propagating the resize through QWindowSystemInterface.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        (WTR::PlatformWebView::resizeTo):

2012-02-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r108577.
        http://trac.webkit.org/changeset/108577
        https://bugs.webkit.org/show_bug.cgi?id=79359

        It doesn't work as expected (Requested by Ossy on #webkit).

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::postEvent):
        * DumpRenderTree/qt/EventSenderQt.h:
        (EventSender):

2012-02-23  Philippe Normand  <pnormand@igalia.com>

        [GTK] FullScreen signals
        https://bugs.webkit.org/show_bug.cgi?id=76181

        Reviewed by Martin Robinson.

        Use the two new entering/leaving fullscreen signals to hide/show
        the tool bar, the status bar and ask the user's permission before
        entering fullscreen.

        * GtkLauncher/main.c:
        (webViewFullscreenMessageWindowClose):
        (webViewWindowStateEvent):
        (hide_widget):
        (show_widget):
        (webViewEnteringFullScreen):
        (webViewLeavingFullScreen):
        (createBrowser):
        (createWindow):

2012-02-22  Dongwoo Im  <dw.im@samsung.com>

        [EFL] Fix to launch the EWebLauncher using the script, run-launcher.
        https://bugs.webkit.org/show_bug.cgi?id=79076

        Reviewed by Andreas Kling.

        * Scripts/webkitdirs.pm: Fix the path of libewebkit.so.
        (builtDylibPathForName):

2012-02-22  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Add eventSender.gestureTap
        https://bugs.webkit.org/show_bug.cgi?id=66173

        Reviewed by Kenneth Rohde Christiansen.

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::gestureTap):
        * DumpRenderTree/qt/EventSenderQt.h:

2012-02-22  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10406044> and https://bugs.webkit.org/show_bug.cgi?id=79279
        Synchronous ShouldGoToBackForwardListItem causes lots of WebProcess hangs

        Reviewed by Anders Carlsson.

        Update our tools to the new form of the PageLoadClient.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]): 

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2012-02-22  Daniel Bates  <dbates@webkit.org>

        new-run-webkit-tests shouldn't restore Safari state on Lion when showing results
        https://bugs.webkit.org/show_bug.cgi?id=79277

        Reviewed by Adam Barth.

        Pass command line argument no-saved-state to run-safari to disable Safari
        state restoration for the session on OS 10.7.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.show_results_html_file):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_show_results_html_file):

2012-02-22  Kalev Lember  <kalevlember@gmail.com>

        Explicitly include unistd.h in TestNetscapePlugIn for GCC 4.7
        https://bugs.webkit.org/show_bug.cgi?id=77759

        Reviewed by Tony Chang.

        Fixes build with gcc 4.7.

        r100432 added the include only for ANDROID; this changes the ifdef to
        also cover other unix platforms. On Fedora 17 the gcc 4.7 compiler no
        longer implicitly includes unistd.h from standard headers and other
        unix platforms are likely to get gcc 4.7 as well in the future.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:

2012-02-22  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, rolling out r108522.
        http://trac.webkit.org/changeset/108522
        https://bugs.webkit.org/show_bug.cgi?id=76181

        Broke 4 fullscreen tests on GTK.

        * GtkLauncher/main.c:
        (createBrowser):
        (createWindow):

2012-02-20  Philippe Normand  <pnormand@igalia.com>

        [GTK] FullScreen signals
        https://bugs.webkit.org/show_bug.cgi?id=76181

        Reviewed by Martin Robinson.

        Use the two new entering/leaving fullscreen signals to hide/show
        the tool bar, the status bar and ask the user's permission before
        entering fullscreen.

        * GtkLauncher/main.c:
        (webViewFullscreenMessageWindowClose):
        (webViewWindowStateEvent):
        (hide_widget):
        (show_widget):
        (webViewEnteringFullScreen):
        (webViewLeavingFullScreen):
        (createBrowser):
        (createWindow):

2012-02-22  Rob Flack  <flackr@chromium.org>

        Update Linux ChromiumOS builders in flakiness dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=79238

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/builders.js:

2012-02-22  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: test_function_length_check_definition_huge_lines is slow
        https://bugs.webkit.org/show_bug.cgi?id=79185

        Reviewed by Adam Barth.

        This test takes ~3 seconds to run, apparently because we're
        running a test on a 10,000 line function :). Dropping the
        function length to 640 still exercises the code path and
        provides a 10x speedup.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest):
        (CheckForFunctionLengthsTest.test_function_length_check_definition_huge_lines):

2012-02-22  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: speed up FileLockTest.test_lock_lifecycle
        https://bugs.webkit.org/show_bug.cgi?id=79189

        Reviewed by Adam Barth.

        The unit test had a second lock trying to acquire a
        lock already held, and a hard-coded timeout of one second.
        I have changed the timeouts to a tenth of a second (which
        is probably still fine) and changed the hard-spin on
        the lock to a slow-spin every hundredth of a second.

        * Scripts/webkitpy/common/system/file_lock.py:
        (FileLock.acquire_lock):
        * Scripts/webkitpy/common/system/file_lock_integrationtest.py:
        (FileLockTest.setUp):
        (FileLockTest.test_stuck_lock):

2012-02-22  Gabor Rapcsanyi  <rgabor@webkit.org>

        build-webkit should use environment variable at number of CPU
        detection on all platform
        https://bugs.webkit.org/show_bug.cgi?id=79227

        Reviewed by Martin Robinson.

        * Scripts/webkitdirs.pm:
        (determineNumberOfCPUs):

2012-02-22  Mihnea Ovidenie  <mihnea@adobe.com>

        [Qt] REGRESSION(r108108): It made 3 fast/repaint tests fail
        https://bugs.webkit.org/show_bug.cgi?id=78960

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference):

2012-02-22  Hao Zheng  <zhenghao@chromium.org>

        [chromium] Build WebKit with MEDIA_STREAM disabled.
        https://bugs.webkit.org/show_bug.cgi?id=79214

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/WebUserMediaClientMock.cpp:
        * DumpRenderTree/chromium/WebUserMediaClientMock.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createMediaPlayer):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-02-22  Zeno Albisser  <zeno@webkit.org>

        [Qt][WK2][Mac] WebKitTestRunner does not build with clang.
        https://bugs.webkit.org/show_bug.cgi?id=79124

        WebKitTestRunnerPrefix.h should also be included
        when building with clang.

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/Target.pri:

2012-02-20  Roland Steiner  <rolandsteiner@chromium.org>

        <style scoped>: Add runtime-flag
        https://bugs.webkit.org/show_bug.cgi?id=79074

        Enable the runtime-flag for DRT. 

        Reviewed by Dimitri Glazkov.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2012-02-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed, rolling out r107351.
        http://trac.webkit.org/changeset/107351
        https://bugs.webkit.org/show_bug.cgi?id=53600

        Several issues introduced in WebKitGTK+ API

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (createWebView):
        * GtkLauncher/main.c:
        (createWebViewCb):
        (createBrowser):
        (createWindow):
        (main):

2012-02-21  Filip Pizlo  <fpizlo@apple.com>

        JSC should be a triple-tier VM
        https://bugs.webkit.org/show_bug.cgi?id=75812
        <rdar://problem/10079694>

        Reviewed by Gavin Barraclough.

        Changed EFL's build system to include a new directory in JavaScriptCore.

        * DumpRenderTree/efl/CMakeLists.txt:

2012-02-21  Daniel Cheng  <dcheng@chromium.org>

        [chromium] Fix image drag out on Chromium
        https://bugs.webkit.org/show_bug.cgi?id=79158

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::dumpFilenameBeingDragged):
        (EventSender::beginDragWithFiles):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (addDRTFakeFileToDataObject):

2012-02-21  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: speed up hot filesystem_mock functions
        https://bugs.webkit.org/show_bug.cgi?id=79159

        Reviewed by Adam Barth.

        Profiling run_webkit_tests_integrationtest.py revealed that
        isdir(), normpath(), and join() are called a lot and were very
        slow.This patch speeds them up substantially, shaving 20 seconds
        off of the execution time.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.isdir):
        (MockFileSystem._slow_but_correct_join):
        (MockFileSystem.join):
        (MockFileSystem.listdir):
        (MockFileSystem._slow_but_correct_normpath):
        (MockFileSystem.normpath):
        (MockFileSystem.write_binary_file):
        * Scripts/webkitpy/common/system/filesystem_mock_unittest.py:
        (MockFileSystemTest.quick_check):
        (MockFileSystemTest):
        (MockFileSystemTest.test_join):
        (MockFileSystemTest.test_normpath):
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:
        (get_test_config): Call write_binary_file() instead of updating
          filesystem.files directly, so that we create directories as
          needed.

2012-02-21  Dirk Pranke  <dpranke@chromium.org>

        nrwt: make the delay between starting workers configurable per-port
        https://bugs.webkit.org/show_bug.cgi?id=79148

        Reviewed by Eric Seidel.

        Because of bug 79147, we have to sleep a bit in between starting
        DRTs; however, doing so across the board slows down the Test
        port. Making this configurable shaves 10 seconds off of
        run_webkit_tests_integrationtest.py
        
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.worker_startup_delay_secs):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.worker_startup_delay_secs):

2012-02-21  Jon Lee  <jonlee@apple.com>

        Bring notifications support to WK1 mac
        https://bugs.webkit.org/show_bug.cgi?id=78783
        <rdar://problem/10610578>

        Reviewed by Anders Carlsson.

        * DumpRenderTree/mac/UIDelegate.mm: Refactor WebGeolocationPolicyListener to WebAllowDenyPolicyListener.
        (-[UIDelegate webView:decidePolicyForGeolocationRequestFromOrigin:frame:listener:]):
        (-[UIDelegate timerFired]):

2012-02-21  Kentaro Hara  <haraken@chromium.org>

        Enable the IDL attribute checker in run-bindings-tests
        https://bugs.webkit.org/show_bug.cgi?id=79091

        Reviewed by Adam Barth.

        We have enabled the IDL attribute checker in Chromium in r108322.
        This patch enables the IDL attribute checker in run-bindings-tests.

        No tests. I manually checked that [Custommm], [CallWith=],
        [CallWith=ScriptExecutionContext|Foo] in TestObj.idl cause
        run-bindings-tests failures.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):

2012-02-21  Rafael Weinstein  <rafaelw@chromium.org>

        Add rafaelw as a committer.

        Unreviewed.

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

2012-02-21  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: update names after deleting message_broker
        https://bugs.webkit.org/show_bug.cgi?id=79000

        Reviewed by Eric Seidel.

        Part 3 of 3 in deleting message_broker.py; this change just
        adjusts the names for the newly merged symbols so that they are
        private as appropriate.

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (get):
        (_Broker):
        (_BrokerConnection):
        (_BrokerConnection.__init__):
        (AbstractWorker.__init__):
        (_ManagerConnection):
        (_ManagerConnection.__init__):
        (_WorkerConnection):
        (_WorkerConnection.__init__):

2012-02-21  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: merge message_broker.py into manager_worker_broker.py
        https://bugs.webkit.org/show_bug.cgi?id=78999

        Reviewed by Tony Chang.

        This is pretty much a straight cut-and-paste of one file into
        another (broken up so that docstrings and imports are in the
        right place).

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (BrokerClient):
        (BrokerClient.is_done):
        (BrokerClient.name):
        (Broker):
        (Broker.__init__):
        (Broker.add_topic):
        (Broker._get_queue_for_topic):
        (Broker.post_message):
        (Broker.run_message_loop):
        (Broker.run_all_pending):
        (Broker._run_loop):
        (Broker._dispatch_message):
        (_Message):
        (_Message.loads):
        (_Message.__init__):
        (_Message.dumps):
        (_Message.__repr__):
        (BrokerConnection):
        (BrokerConnection.__init__):
        (BrokerConnection.run_message_loop):
        (BrokerConnection.post_message):
        (BrokerConnection.raise_exception):
        * Scripts/webkitpy/layout_tests/controllers/message_broker.py: Removed.

2012-02-21  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: prepare to delete message_broker.py
        https://bugs.webkit.org/show_bug.cgi?id=78997

        Reviewed by Eric Seidel.

        This is part 1 of 3 changes to fix bug 78187. This change
        prepares the code for merging message_broker.py into
        manager_worker_broker.py; the tests in message_broker_unittest
        are merged into manager_worker_broker_unittest, the symbols
        needed by the tests are exported from manager_worker_broker.py,
        and manager_worker_broker itself is updated to refer to the
        symbols directly (without the module prefix).

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (get):
        (AbstractWorker):
        (AbstractWorker.__init__):
        (_ManagerConnection):
        (_ManagerConnection.__init__):
        (_WorkerConnection):
        (_WorkerConnection.__init__):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (InterfaceTest.test_brokerclient_is_abstract):
        (InterfaceTest.test_brokerclient_is_abstract.methods):
        (MessageTest):
        (MessageTest.test__no_body):
        (MessageTest.test__body):
        * Scripts/webkitpy/layout_tests/controllers/message_broker_unittest.py: Removed.

2012-02-21  Sam Weinig  <sam@webkit.org>

        Attempt to fix the Snow Leopard build.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2012-02-21  Sam Weinig  <sam@webkit.org>

        Use libc++ when building with Clang on Mac
        https://bugs.webkit.org/show_bug.cgi?id=78981

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2012-02-21  Adam Roben  <aroben@apple.com>

        Roll out r108309, r108323, and r108326

        They broke the 32-bit Lion build.

        Original bugs is <http://webkit.org/b/75812> <rdar://problem/10079694>.

        * DumpRenderTree/efl/CMakeLists.txt:

2012-02-21  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Get rid of the dependency to QtWidgets
        https://bugs.webkit.org/show_bug.cgi?id=76276

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication):
        (MiniBrowserApplication::notify):
        (MiniBrowserApplication::sendTouchEvent):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (MiniBrowserApplication):
        * QtTestBrowser/locationedit.h:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:

2012-02-20  Adam Barth  <abarth@webkit.org>

        mastercfg_unittest.py fails without simplejson
        https://bugs.webkit.org/show_bug.cgi?id=79070

        Reviewed by Csaba Osztrogonác.

        Now that we require Python 2.6 (and higher) we can import json rather
        than simplejson.  We still need to use the simplejson name because
        that's what the master.cfg script expects.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (BuildBotConfigLoader._add_dependant_modules_to_sys_modules):

2012-02-20  Filip Pizlo  <fpizlo@apple.com>

        JSC should be a triple-tier VM
        https://bugs.webkit.org/show_bug.cgi?id=75812
        <rdar://problem/10079694>

        Reviewed by Gavin Barraclough.

        Changed EFL's build system to include a new directory in JavaScriptCore.

        * DumpRenderTree/efl/CMakeLists.txt:

2012-02-20  Kenichi Ishibashi  <bashi@chromium.org>

        Update pywebsocket to 0.7.2
        https://bugs.webkit.org/show_bug.cgi?id=79066

        This version includes vendor-prefixed deflate-frame extension support.

        Reviewed by Kent Tamura.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_pywebsocket):

2012-02-20  Martin Robinson  <mrobinson@igalia.com>

        [UNIX] Plugin information fields are not interpreted as UTF-8
        https://bugs.webkit.org/show_bug.cgi?id=78635

        Reviewed by Gustavo Noronha Silva.

        Interpret plugin metadata as UTF8 aways. This matches the behavior
        of Chromium and the Totem plugin.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_GetValue): Include a UTF-8 character in the description string for testing purposes.

2012-02-20  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [Qt] Move the unix forwarding headers for TestNetscapePlugin to the TestNetscapePlugin directory
        https://bugs.webkit.org/show_bug.cgi?id=78935

        Reviewed by Gustavo Noronha Silva.

        Move the TestNetscapePlugin headers to a more appropriate directory and update
        the build files to match.

        * DumpRenderTree/TestNetscapePlugIn/unix/ForwardingHeaders/WebKit/npapi.h: Renamed from Tools/DumpRenderTree/unix/TestNetscapePlugin/ForwardingHeaders/WebKit/npapi.h.
        * DumpRenderTree/TestNetscapePlugIn/unix/ForwardingHeaders/WebKit/npfunctions.h: Renamed from Tools/DumpRenderTree/unix/TestNetscapePlugin/ForwardingHeaders/WebKit/npfunctions.h.
        * DumpRenderTree/TestNetscapePlugIn/unix/ForwardingHeaders/WebKit/npruntime.h: Renamed from Tools/DumpRenderTree/unix/TestNetscapePlugin/ForwardingHeaders/WebKit/npruntime.h.
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro: Update build.
        * GNUmakefile.am: Ditto.

2012-02-20  Kihong Kwon  <kihong.kwon@samsung.com>

        Add a new API for the Vibration API(W3C).
        https://bugs.webkit.org/show_bug.cgi?id=72010

        Reviewed by Hajime Morita.

        * Scripts/build-webkit: Enable ENABLE_VIBRATION feature.

2012-02-20  János Badics  <dicska@gmail.com>

        [Qt] run-qtwebkit-tests doesn't consider timeouts as failures
        https://bugs.webkit.org/show_bug.cgi?id=71816

        RunQtAPITests will notify if a timeout occurs during testing.
        Added unittest to the master.cfg

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunQtAPITests.evaluateCommand):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (RunQtAPITestsTest):
        (RunQtAPITestsTest.assertResults):
        (RunQtAPITestsTest.test_timeout):
        (test_success):
        (test_failure):
        (test_timeout_and_failure):

2012-02-20  Andy Wingo  <wingo@igalia.com>

        Add wingo as a committer.

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py: Add myself to the
        committers list.

2012-02-20  Jochen Eisinger  <jochen@chromium.org>

        [chromium] check that we're not running multiple modal dialogs at the same time
        https://bugs.webkit.org/show_bug.cgi?id=78486

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setIsDisplayingModalDialog):
        (TestShell::isDisplayingModalDialog):
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::runModal):

2012-02-20  Martin Robinson  <mrobinson@igalia.com>

        Fix WebKit2GTK+ for 'make distcheck'.

        Instead of conditionally including WebKit2 GNUmakefiles, always
        include them and conditionally activate the final targets.

        * MiniBrowser/gtk/GNUmakefile.am:
        * WebKitTestRunner/GNUmakefile.am:

2012-02-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Enable video option for EFL port in build-webkit.
        https://bugs.webkit.org/show_bug.cgi?id=79006

        Reviewed by Daniel Bates.

        * Scripts/build-webkit:

2012-02-19  JungJik Lee  <jungjik.lee@samsung.com>

        [EFL] Use modifier keys to execute pre-rendering.
        https://bugs.webkit.org/show_bug.cgi?id=77933

        Reviewed by Chang Shu.

        Use modifier key to execute pre-rendering instead of using reserved function keys.

        * EWebLauncher/main.c:
        (on_key_down):

2012-02-18  Dirk Pranke  <dpranke@chromium.org>

        Fix one more dangling reference to worker_connection.name, delete unused code.

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.update):
        (_WorkerState.__init__):

2012-02-18  Dirk Pranke  <dpranke@chromium.org>

        Add a change that should've been in r108005.

        Unreviewed, build fix.

        In the refactoring/cleanup in r108005 I should've changed the
        implementation of WorkerConnection to make it match BrokerClient
        (and everything else) so that objects had a name() method
        instead of a name property.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (_WorkerConnection.__init__):
        (_WorkerConnection.name):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (_TestWorker.__init__):
        (_TestsMixin.name):
        (_TestsMixin.test_name):
        (_TestsMixin.test_cancel):
        (_TestsMixin.test_unknown_message):

2012-02-18  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: remove webkitpy.common.array_stream
        https://bugs.webkit.org/show_bug.cgi?id=78952

        Reviewed by Eric Seidel.

        Turns out array_stream didn't really do anything that StringIO
        didn't do (at least as of Python 2.6). This change removes it
        and updates all of the callers. Where possible, I changed the
        test assertions in order to capture the intent more clearly,
        e.g., instead of calling self.assertTrue('foo' in stream.get()),
        we have self.assertContainsLine(stream, 'foo'), and instead of
        self.assertTrue(stream.empty()), we have self.assertEmpty(stream) -
        the latter isn't that much more readable, but StringIO doesn't
        export an empty() method.

        * Scripts/webkitpy/common/array_stream.py: Removed.
        * Scripts/webkitpy/common/array_stream_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (passing_run):
        (run_and_capture):
        (StreamTestingMixin):
        (StreamTestingMixin.assertContains):
        (StreamTestingMixin.assertContainsLine):
        (StreamTestingMixin.assertEmpty):
        (StreamTestingMixin.assertNotEmpty):
        (LintTest):
        (LintTest.test_lint_test_files):
        (LintTest.test_lint_test_files__errors):
        (MainTest):
        (MainTest.test_child_process_1):
        (MainTest.test_child_processes_2):
        (MainTest.test_child_processes_min):
        (MainTest.test_help_printing):
        (MainTest.test_hung_thread):
        (MainTest.test_no_tests_found):
        (MainTest.test_no_tests_found_2):
        (MainTest.test_repeat_each_iterations_num_tests):
        (MainTest.test_test_list):
        (MainTest.test_unexpected_failures):
        (MainTest.test_worker_model__inline_with_child_processes):
        (MainTest.test_additional_platform_directory):
        (RebaselineTest):
        (RebaselineTest.assertBaselines):
        (RebaselineTest.test_reset_results):
        (RebaselineTest.test_missing_results):
        (RebaselineTest.test_new_baseline):
        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.update):
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (TestMeteredStream.test_regular):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (TestUtilityFunctions.assertEmpty):
        (TestUtilityFunctions):
        (TestUtilityFunctions.assertNotEmpty):
        (TestUtilityFunctions.assertWritten):
        (TestUtilityFunctions.test_configure_logging):
        (Testprinter.assertEmpty):
        (Testprinter):
        (Testprinter.assertNotEmpty):
        (Testprinter.assertWritten):
        (Testprinter.reset):
        (Testprinter.get_printer):
        (Testprinter.test_help_printer):
        (Testprinter.do_switch_tests.do_helper):
        (Testprinter.test_print_one_line_summary):
        (Testprinter.test_print_test_result):
        (Testprinter.test_print_progress):
        (Testprinter.test_write_nothing):
        (Testprinter.test_write_misc):
        (Testprinter.test_write_everything):
        (Testprinter.test_write_verbose):
        (Testprinter.test_print_unexpected_results):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.assertWritten):
        (create_runner):
        (test_run_test_set):
        (test_run_test_set_kills_drt_per_run):
        (test_run_test_set_for_parser_tests):
        (test_run_test_set_with_json_output):
        (test_run_test_set_with_json_source):
        (test_run_test_set_with_multiple_repositories):
        (test_upload_json):

2012-02-18  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Add the WebCore/page/scrolling directory to the build dirs.

        * waf/build/settings.py:

2012-02-18  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Don't error out or hang if we have
        downloaded dependencies but server update check fails.

        * waf/build/build_utils.py:
        (download_if_newer):

2012-02-17  Dirk Pranke  <dpranke@chromium.org>

        The new run-webkit-tests needs to dump out pixel hash failures even if the pixel test passes.
        https://bugs.webkit.org/show_bug.cgi?id=69444

        Reviewed by Tony Chang.

        Currently if a test's image checksum doesn't match the checksum
        in the baseline, but the images themselves match according to
        ImageDiff, new-run-webkit-tests ignores the problem. This is
        probably bad, but it's not yet clear what the right thing to do
        is. This patch will log a warning to stderr, at least (but the
        test will still pass).

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_image):
        (SingleTestRunner._run_reftest):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (unit_test_list):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:

2012-02-17  Dirk Pranke  <dpranke@chromium.org>

        NRWT does not report failure for a skipped test
        https://bugs.webkit.org/show_bug.cgi?id=78750

        Reviewed by Eric Seidel.

        If a test is listed in a Skipped file and you run it anyway
        with --force, and the test fails, currently NRWT will print
        "test ran as expected"; this is confusing, because you probably
        expect the test to fail and yet this might lead you to think the
        test passed. This patch changes the expected behavior to "PASS",
        so tests that fail will be reported.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (result_was_expected):
        (TestExpectationParser):
        (TestExpectationParser.expectation_for_skipped_test):
        (TestExpectations):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_add_skipped_tests):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (unit_test_list): Add some tests that are expected to be in a Skipped file.
        (TestPort.skipped_tests): This adds actual integration test coverage of Skipped files.

2012-02-17  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: fix test code after bug 78181
        https://bugs.webkit.org/show_bug.cgi?id=78870

        Reviewed by Adam Barth.

        I forgot to update the test code as per Tony's suggestion in
        bug 78181 (r108005). This change does that, and in doing so
        it revealed a subtle bug in _InlineWorkerConnection.run() that
        I am fixing as part of this (_alive would not be cleared if an
        exception was thrown).

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (_InlineWorkerConnection.run):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (_TestWorker.__init__):
        (_TestWorker.handle_stop):
        (_TestWorker.handle_test):
        (_TestWorker.run):
        (_TestsMixin.handle_exception):
        (_TestsMixin.test_unknown_message):

2012-02-17  Adam Roben  <aroben@apple.com>

        Mac build fix after r108119

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runThread):
        (runPthread):
        (testThreadIdentifierMap):
        Updated to match current WTF threading APIs.

2012-02-17  Dirk Pranke  <dpranke@chromium.org>

        revert r107147 - breaks webkit-patch on Mac SL
        https://bugs.webkit.org/show_bug.cgi?id=78866

        Reviewed by Adam Barth.

        It appears that zipfile.ExtractAll is broken on Python 2.6.1,
        which is the version that ships on Mac SL. Reverting this
        change until we no longer have to worry about that version.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller):
        (AutoInstaller._extract_all): Added a comment about SL.
        (AutoInstaller._unzip):

2012-02-17  Mihnea Ovidenie  <mihnea@adobe.com>

        CSS regions enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=78525

        Reviewed by David Hyatt.

        Add a runtime preference to enable/disable regions functionality at runtime(WebKitCSSRegionsEnabled).
        CSSRegions are still enabled by default.
        In DRT, use layoutTestController.overridePreference("WebKitCSSRegionsEnabled", "0") to disable the css regions functionality.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):

2012-02-17  Maciej Stachowiak  <mjs@apple.com>

        Some API tests erroneously use = instead of == (causing build failures)
        https://bugs.webkit.org/show_bug.cgi?id=78915

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::decidePolicyForNavigationAction): Replace an = with an ==
        (TestWebKitAPI::decidePolicyForNewWindowAction): ditto

2012-02-17  Peter Beverloo  <peter@chromium.org>

        [Chromium] Include TestShellLinux.cpp in the build for Android
        https://bugs.webkit.org/show_bug.cgi?id=78865

        Reviewed by Eric Seidel.

        Android will be re-using the TestShellLinux.cpp file. I already
        added this r104033, but it seems to have gotten lost in the
        recent refactorings.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-02-17  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, disable video build on EFL until it can be
        supported by EFL build bot.

        * Scripts/build-webkit:

2012-02-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement zoom in/out in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=75253

        Reviewed by Gustavo Noronha Silva.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowCanZoomIn):
        (browserWindowCanZoomOut):
        (browserWindowUpdateZoomActions):
        (webViewZoomLevelChanged):
        (zoomInCallback):
        (zoomOutCallback):
        (browser_window_init):
        (browserWindowConstructed):

2012-02-17  Nikolas Zimmermann  <nzimmermann@rim.com>

        layoutTestController.display() is flaky for SVG tests
        https://bugs.webkit.org/show_bug.cgi?id=78021

        Reviewed by Adam Roben.

        Apply the same fix to DRT/Win, as previously applied to DRT/Mac.
        Size the web view before running the test, not when dumping.
        All platforms handle this correctly now.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):
        (sizeWebViewForCurrentTest):
        (runTest):

2012-02-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make install is broken when building without --enable-gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=78828

        Reviewed by Martin Robinson.

        * gtk/generate-gtkdoc:
        (rebase_installed_docs): Check documentation has been generated
        before trying to rebase it.

2012-02-16  Dirk Pranke  <dpranke@chromium.org>

        nrwt: simplify worker interface
        https://bugs.webkit.org/show_bug.cgi?id=78181

        Reviewed by Tony Chang.

        This change moves code in name(), is_done(), run(), and cancel()
        from Worker to AbstractWorker, since the logic is pretty much
        boilerplate code that any implementation would want to use.

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (get.should):
        (AbstractWorker.__init__):
        (AbstractWorker):
        (AbstractWorker.name):
        (AbstractWorker.stop_handling_messages):
        (AbstractWorker.run):
        (AbstractWorker.is_done):
        (AbstractWorker.cancel):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.__init__):
        (Worker.run):
        (Worker.handle_stop):

2012-02-16  Michael Saboff  <msaboff@apple.com>

        ENH: Add ability to run subset of JavaScript layout tests with JSC
        https://bugs.webkit.org/show_bug.cgi?id=78764

        Reviewed by Gavin Barraclough.

        New simple test drive shell script that runs a defined
        list of javascript tests using jsc and the standalone-{pre,post}.js
        wrappers.

        * Scripts/run-fast-jsc: Added.

2012-02-16  Csaba Osztrogonác  <ossy@webkit.org>

        Add new Qt performance tester bot to build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=78795

        Reviewed by Adam Roben.

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

2012-02-16  Patrick Gansterer  <paroga@webkit.org>

        Disable inspector on WinCE.

        Avoid compiling InspectorBackendDispatcher.cpp, which causes an internal compiler error.

        * Scripts/build-webkit:

2012-02-16  Patrick Gansterer  <paroga@webkit.org>

        WinCE build fix after r107656.

        Disable FTPDIR on WinCE, since it does not compile there.

        * Scripts/build-webkit:

2012-02-15  Leo Yang  <leo.yang@torchmobile.com.cn>

        Build fix after r107863.

        * DumpRenderTree/blackberry/PixelDumpSupportBlackBerry.cpp:

2012-02-15  Tony Chang  <tony@chromium.org>

        [chromium] add linux dbg back to garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=78752

        Reviewed by Adam Barth.

        This reflects the current linux debug bot name (there's only one bot).
        I'm also remove the mac clang builder since it doesn't exist (mac
        always uses clang now).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * Scripts/webkitpy/layout_tests/port/builders.py:

2012-02-15  Sam Weinig  <sam@webkit.org>

        Add style check for ctype functions that are generally frowned upon in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=78748

        Reviewed by Anders Carlsson.

        Not every platform has DisallowCType.h to check for uses of the ctype.h
        functions, so add a style check for them as well.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_ctype_functions):
        (check_style):
        (CppChecker):
        Add check.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_ctype_fucntion):
        Add checker.

2012-02-15  Szilard Ledan  <Ledan-Muntean.Szilard@stud.u-szeged.hu>

        [Qt][WK2] WebKitTestRunner should use 480x360 sized view for W3C SVG tests
        https://bugs.webkit.org/show_bug.cgi?id=76546

        Reviewed by Simon Hausmann.

        Resize the web view programatically because the declarative property binding
        does not work. Seems like our qml environment is not initialized fully but it
        needs more investigation.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        (WTR::PlatformWebView::resizeTo):

2012-02-15  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: add a worker_args concept to start_worker()
        https://bugs.webkit.org/show_bug.cgi?id=78572

        Reviewed by Tony Chang.

        This change replaces the three NRWT-specific arguments passed
        through the broker to the worker with a generic WorkerArguments
        wrapper class and a separate set_inline_arguments() call that can
        be used to pass additional data to the worker when it is running
        in the same process as the manager (this is needed for testing).
        With the addition of set_inline_arguments() we also no longer
        need to pass an optional argument to the worker.run() call.

        Note that this method is *only* implemented on inline workers,
        so calling this on a regular (child process) worker will result
        in a runtime error.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (AbstractWorker.__init__):
        (AbstractWorker.run):
        (_ManagerConnection.start_worker):
        (_InlineManager.start_worker):
        (_InlineManager.set_inline_arguments):
        (_InlineManager.run_message_loop):
        (_MultiProcessManager.start_worker): Reworked signature.
        (_WorkerConnection.__init__):
        (_InlineWorkerConnection.__init__):
        (_InlineWorkerConnection.set_inline_arguments): New method.
        (_InlineWorkerConnection):
        (_InlineWorkerConnection.run):
        (_Process.run):
        (_MultiProcessWorkerConnection.__init__):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (_TestWorker.__init__):
        (_TestWorker.set_inline_arguments):
        (_TestWorker.handle_test):
        (_TestWorker.run):
        (_TestsMixin.test_cancel):
        (_TestsMixin.test_done):
        (_TestsMixin.test_unknown_message):
        (InlineBrokerTests): New class for more testing.
        (InlineBrokerTests.setUp):
        (InlineBrokerTests.test_inline_arguments): New test.
        (InterfaceTest.test_managerconnection_is_abstract):
        (InterfaceTest.test_workerconnection_is_abstract):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (WorkerArguments):
        (WorkerArguments.__init__):
        (Worker.__init__):
        (Worker.set_inline_arguments):
        (Worker):
        (Worker.run):
        * Scripts/webkitpy/layout_tests/controllers/worker_unittest.py:
        (WorkerTest.test_default_platform_in_worker):

2012-02-15  Adam Klein  <adamk@chromium.org>

        Unreviewed, rolling out r107704.
        http://trac.webkit.org/changeset/107704
        https://bugs.webkit.org/show_bug.cgi?id=78486

        Caused layout test crashes in debug builds.

        Specific crashing tests:

        fast/events/show-modal-dialog-onblur-onfocus.html
        fast/harness/show-modal-dialog.html
        inspector/console/console-long-eval-crash.html

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::runModal):

2012-02-15  Michael Brüning  <michael.bruning@nokia.com>

        [Qt] Add UI for HTTP authentication in the Qt MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=76347

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/qml/AuthenticationDialog.qml: Added. 
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/DialogLineInput.qml:

2012-02-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix WebGL in QtTestBrowser

        Reviewed by Tor Arne Vestbø.

        * QtTestBrowser/QtTestBrowser.pro: Set the OpenGL define so that when passing
        the options for enabling GL we also pass them on properly.

2012-02-14  Sam Weinig  <sam@webkit.org>

        Add #include of unistd.h on the mac for getcwd. 

        Reviewed by Anders Carlsson.

        This is necessary when building with libc++.

        * WebKitTestRunner/TestInvocation.cpp:

2012-02-14  Sam Weinig  <sam@webkit.org>

        In DRT, don't #define min or max on non-Windows platforms, it just isn't needed
        https://bugs.webkit.org/show_bug.cgi?id=78663

        Reviewed by Anders Carlsson.

        * DumpRenderTree/DumpRenderTreePrefix.h:
        * DumpRenderTree/cg/ImageDiffCG.cpp:

2012-02-14  Adam Barth  <abarth@webkit.org>

        Implement an adb-based driver for the ChromiumAndroidPort
        https://bugs.webkit.org/show_bug.cgi?id=78627

        Reviewed by Eric Seidel.

        This driver mostly just wires up the ChromiumDriver through adb.  In
        some cases, it translates protocol elements, such as URIs, so that the
        rest of webkitpy is insulated from the "remoteness" of the target device.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.start_helper):
        (ChromiumAndroidPort._driver_class):
        (ChromiumAndroidPort._update_version):
        (ChromiumAndroidPort._get_stderr):
        (ChromiumAndroidPort):
        (ChromiumAndroidPort._get_last_stacktrace):
        (ChromiumAndroidPort._teardown_performance):
        (ChromiumAndroidDriver):
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._start):
        (ChromiumAndroidDriver.run_test):
        (ChromiumAndroidDriver.stop):
        (ChromiumAndroidDriver._test_shell_command):
        (ChromiumAndroidDriver._write_command_and_read_line):
        (ChromiumAndroidDriver._output_image):
        (ChromiumAndroidDriver._has_crash_hint):

2012-02-14  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: the real_name() method in the Port class is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=78651

        Reviewed by Eric Seidel.

        The change in bug 78565 / r107718 made it no longer necessary
        (we can use options.platform instead).

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.name):
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        (MockDRTPort.__init__):

2012-02-14  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up options, port handling in manager_worker_broker
        https://bugs.webkit.org/show_bug.cgi?id=78568

        Reviewed by Tony Chang.

        manager_worker_broker no longer needs options or port objects
        directly, so we make them only be passed in start_worker().

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (get):
        (_ManagerConnection.__init__):
        (_ManagerConnection.start_worker):
        (_InlineManager.__init__):
        (_InlineManager.start_worker):
        (_InlineManager.run_message_loop):
        (_MultiProcessManager.__init__):
        (_MultiProcessManager):
        (_MultiProcessManager.start_worker):
        (_InlineWorkerConnection.__init__):
        (_InlineWorkerConnection.run):
        (_Process.__init__):
        (_MultiProcessWorkerConnection.__init__):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (make_broker):
        (_TestWorker.run):
        (_TestsMixin.test_cancel):
        (_TestsMixin.test_done):
        (_TestsMixin.test_unknown_message):
        (MultiProcessBrokerTests.setUp):
        (InterfaceTest.test_managerconnection_is_abstract):
        * Scripts/webkitpy/layout_tests/controllers/message_broker.py:
        (Broker.__init__):

2012-02-14  Dirk Pranke  <dpranke@chromium.org>

        nrwt: add a unit test for regression introduced in bug 78565
        https://bugs.webkit.org/show_bug.cgi?id=78646

        Reviewed by Tony Chang.

        * Scripts/webkitpy/layout_tests/controllers/worker_unittest.py: Added.
        (FakeConnection):
        (FakeConnection.run_message_loop):
        (FakeConnection.post_message):
        (WorkerTest):
        (WorkerTest.test_default_platform_in_worker):

2012-02-14  Dirk Pranke  <dpranke@chromium.org>

        NRWT is broken for the default port
        https://bugs.webkit.org/show_bug.cgi?id=78640
    
        Reviewed by Tony Chang.

        The change in r107718 (bug 78565) broke NRWT if you didn't
        specify any sort of --platform flag or equivalent. I didn't
        catch this because it's a full integration test (which we don't
        have an automated test for) and I missed this command line
        variant when testing interactively.

        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.run):

2012-02-14  Ramya Chandrasekaran  <cramya@google.com>

        Last character display for passwords in Android.
        https://bugs.webkit.org/show_bug.cgi?id=78532

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):

2012-02-14  Adam Barth  <abarth@webkit.org>

        Finish implementing start_helper for ChromiumAndroidPort
        https://bugs.webkit.org/show_bug.cgi?id=78582

        Reviewed by Eric Seidel.

        This patch contains the remaining odds and ends for the start_helper function.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.start_helper):
        (ChromiumAndroidPort._synchronize_datetime):
        (ChromiumAndroidPort):
        (ChromiumAndroidPort._check_version):
        (ChromiumAndroidPort._run_adb_command):
        (ChromiumAndroidPort._copy_device_file):

2012-02-14  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: create ports in Workers, not in manager_worker_broker
        https://bugs.webkit.org/show_bug.cgi?id=78565

        Reviewed by Tony Chang.

        We will now create the Port object (if necessary) in the Worker
        directly, so that the manager_worker_broker module doesn't need
        all of this layout_test-specific logic. Part of the fixes for
        bug 78171.

        These changes are all well-tested by the existing tests in
        run_webkit_tests_integrationtest.py.

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (_Process.run):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.__init__):
        (Worker.safe_init):
        (Worker.run):
        (Worker.cleanup):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        (main): Fix a minor bug where running the 'mock-test' port didn't work right.

2012-02-14  Jochen Eisinger  <jochen@chromium.org>

        [chromium] check that we're not running multiple modal dialogs at the same time
        https://bugs.webkit.org/show_bug.cgi?id=78486

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setIsDisplayingModalDialog):
        (TestShell::isDisplayingModalDialog):
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::runModal):

2012-02-14  Adam Barth  <abarth@webkit.org>

        Enable the GPU codepath in the chromium-android port
        https://bugs.webkit.org/show_bug.cgi?id=78580

        Reviewed by James Robinson.

        Suprise!  There is no ChromiumGpuAndroidPort!  Instead, Chromium
        Android always uses the GPU codepath, so we set the GPU flags on the
        main chromium-android port instead.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):

2012-02-14  Adam Barth  <abarth@webkit.org>

        NRWT should expose --adb-args flag for Android
        https://bugs.webkit.org/show_bug.cgi?id=78579

        Reviewed by Eric Seidel.

        This flag is already wired up to the ChromiumAndroidPort.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-02-14  Alexey Proskuryakov  <ap@apple.com>

        [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets
        https://bugs.webkit.org/show_bug.cgi?id=78541
        <rdar://problem/10036695>

        Reviewed by Kent Tamura.

        * DumpRenderTree/mac/DumpRenderTree.mm: (resetDefaultsToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp: (resetDefaultsToConsistentValues):
        After each test, reset to using new protocol.

2012-02-11  Nikolas Zimmermann  <nzimmermann@rim.com>

        Convert svg/animations to use SMIL methods for driving the timeline
        https://bugs.webkit.org/show_bug.cgi?id=78422

        Reviewed by Dirk Schulze.

        Remove no longer needed SVG specific animation sampling functionality from DRT.
        Instead we switched the svg/animations tests to use SVGSVGElement.setCurrentTime.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:

2012-02-13  Rob Flack  <flackr@chromium.org>

        Add Linux ChromiumOS test results to flakiness dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=78495

        Reviewed by Ojan Vafai.

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

2012-02-13  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK] Mutation Observers build is broken
        https://bugs.webkit.org/show_bug.cgi?id=78433

        Reviewed by Martin Robinson.

        Enabled mutation observers as a default feature for GTK port, too.

        * Scripts/build-webkit:

2012-02-13  Loïc Yhuel  <loic.yhuel_ext@softathome.com>

        Allow to configure ENABLE_FTPDIR in build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=65098

        Reviewed by Eric Seidel.

        Allow to disable ENABLE_FTPDIR by command line.
        Remove ENABLE_FTPDIR from --minimal build

        * Scripts/build-webkit: Add entries for ENABLE_FTPDIR (enabled by default)
        * qmake/mkspecs/features/features.prf: ENABLE_FTPDIR must be set to match Platform.h,
        as, for Qt platform, build-webkit does not add on command line what it thinks to be default values

2012-02-13  Shinya Kawanaka  <shinyak@chromium.org>

        Add shinyak as committer.

        Unreviewed.

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

2012-02-13  Adam Barth  <abarth@webkit.org>

        Implement start/stop_helper for ChromiumAndroidPort
        https://bugs.webkit.org/show_bug.cgi?id=78558

        Reviewed by Dirk Pranke.

        These functions (and their dependencies) set up the Android device for
        testing.

        This patch also includes a few tweaks on the previous patch recommended
        by dpranke.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        (ChromiumAndroidPort.start_helper):
        (ChromiumAndroidPort.stop_helper):
        (ChromiumAndroidPort._shut_down_http_server):
        (ChromiumAndroidPort):
        (ChromiumAndroidPort._push_executable):
        (ChromiumAndroidPort._push_fonts):
        (ChromiumAndroidPort._restore_system_font):
        (ChromiumAndroidPort._push_test_resources):
        (ChromiumAndroidPort._push_to_device):
        (ChromiumAndroidPort._pull_from_device):
        (ChromiumAndroidPort._kill_device_process):
        (ChromiumAndroidPort._setup_performance):
        (ChromiumAndroidPort._teardown_performance):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidPortTest):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase):
        (PortTestCase.make_port):
        (PortTestCase.test_default_worker_model):

2012-02-13  Adam Barth  <abarth@webkit.org>

        Implement enough of ChromiumAndroidPort to make ChromiumAndroidPortTest pass
        https://bugs.webkit.org/show_bug.cgi?id=78550

        Reviewed by Eric Seidel.

        Much of this code just forwards to the "host" port, which seems like a
        reasonable thing to do.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        (ChromiumAndroidPort.stop_helper):
        (ChromiumAndroidPort):
        (ChromiumAndroidPort._build_path):
        (ChromiumAndroidPort._path_to_apache):
        (ChromiumAndroidPort._path_to_apache_config_file):
        (ChromiumAndroidPort._path_to_driver):
        (ChromiumAndroidPort._path_to_helper):
        (ChromiumAndroidPort._path_to_image_diff):
        (ChromiumAndroidPort._path_to_lighttpd):
        (ChromiumAndroidPort._path_to_lighttpd_modules):
        (ChromiumAndroidPort._path_to_lighttpd_php):
        (ChromiumAndroidPort._path_to_wdiff):
        (ChromiumAndroidPort._shut_down_http_server):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidPortTest):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase):
        (PortTestCase.make_port):
        (PortTestCase.test_default_worker_model):

2012-02-13  Adam Barth  <abarth@webkit.org>

        chromium_android.py should implement "virtual" methods from ChromiumPort
        https://bugs.webkit.org/show_bug.cgi?id=78545

        Reviewed by Dirk Pranke.

        This patch adds basic implementations that specialize a bunch of
        functions from ChromiumPort.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort):
        (ChromiumAndroidPort.__init__):
        (ChromiumAndroidPort.default_child_processes):
        (ChromiumAndroidPort.baseline_search_path):
        (ChromiumAndroidPort.check_build):
        (ChromiumAndroidPort.check_sys_deps):
        (ChromiumAndroidPort.default_worker_model):
        (ChromiumAndroidPort.test_expectations):
        (ChromiumAndroidPort.start_http_server):
        (ChromiumAndroidPort.stop_http_server):
        (ChromiumAndroidPort.start_helper):
        (ChromiumAndroidPort.stop_helper):

2012-02-13  Adam Barth  <abarth@webkit.org>

        Add a skeleton ChromiumAndroid port to webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=78543

        Reviewed by Eric Seidel.

        This patch just adds an empty ChromiumAndroid port object to webkitpy
        and wires it up to the factory objects.  An actual implementation will
        follow.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py: Added.
        (ChromiumAndroidPort):
        (ChromiumAndroidPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory):

2012-02-13  Adam Barth  <abarth@webkit.org>

        NRWT's HTTP servers should support additional directories for resources
        https://bugs.webkit.org/show_bug.cgi?id=78528

        Reviewed by Eric Seidel.

        This functionality will be used by the Chromium-Android port.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.to.start_http_server):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd.__init__):
        (Lighttpd._prepare_config):

2012-02-13  Ami Fischman  <fischman@chromium.org>

        Add fischman as committer.

        Unreviewed

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

2012-02-06  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Drop support for the Curl network backend.
        https://bugs.webkit.org/show_bug.cgi?id=77874

        Reviewed by Eric Seidel.

        Nobody seems to be maintaining the Curl backend in WebCore, the
        EFL port developers all seem to be using the Soup backend and the
        port itself has many features which are only implemented for the
        latter.

        * DumpRenderTree/efl/CMakeLists.txt: Always link to glib/libsoup
        and always add the required include directories.
        * EWebLauncher/CMakeLists.txt: Add the required glib/libsoup
        include directories and link to them.

2012-02-13  Kenichi Ishibashi  <bashi@chromium.org>

        [WebSocket] Update pywebsocket to 0.7.1
        https://bugs.webkit.org/show_bug.cgi?id=78484

        pywebsocket-0.7.1 follow the current draft of WebSocket deflate-frame extension.

        Reviewed by Kent Tamura.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_pywebsocket):

2012-02-12  Kangil Han  <kangil.han@samsung.com>

        [EFL][DRT] Implement zoomPage{In,Out} and textZoom{In,Out} events.
        https://bugs.webkit.org/show_bug.cgi?id=78091

        Reviewed by Hajime Morita.

        Implemented zoomPageIn, zoomPageOut, textZoomIn and textZoomOut events on EFL DRT.
        This patch will activate around 1,900 test cases from skipped list in EFL port.

        * DumpRenderTree/efl/EventSender.cpp:
        (textZoom):
        (pageZoom):
        (textZoomInCallback):
        (textZoomOutCallback):
        (zoomPageInCallback):
        (zoomPageOutCallback):

2012-02-12  Ashod Nakashian  <ashodnakashian@yahoo.com>

        KeywordLookupGenerator.py script fails in some cases
        https://bugs.webkit.org/show_bug.cgi?id=77886

        Reviewed by Benjamin Poulain.

        * Scripts/webkitpy/style/checker.py: New rule for Keywords.table to not have CR.
        * Scripts/webkitpy/style/checker_unittest.py: New UT for Keywords.table rule.
        (GlobalVariablesTest.test_path_rules_specifier):

2012-02-12  Joe Thomas  <joethomas@motorola.com>

        Add toText and isTextNode helpers in Text class.
        https://bugs.webkit.org/show_bug.cgi?id=78140

        Unit test case for the new style checker introduced.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest):
        (CppStyleTest.test_static_cast_readability): Added a unit test case.

2012-02-12  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Enable features supported by EFL port in build-webkit.
        https://bugs.webkit.org/show_bug.cgi?id=78348

        Reviewed by Ryosuke Niwa.

        Sync build-webkit with OptionEfl.cmake, as some features enabled in
        OptionEfl.cmake are not enabled in build-webkit.

        * Scripts/build-webkit:

2012-02-12  Joe Thomas  <joethomas@motorola.com>

        Add toText and isTextNode helpers in Text class.
        https://bugs.webkit.org/show_bug.cgi?id=78140

        Added a style checker to use toText rather than static_cast<Text*>.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language): Style checker for static_cast<Text*>.

2012-02-12  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, disable Mutation observers build on GTK until it can
        actually build.

        * Scripts/build-webkit:

2012-02-11  Benjamin Poulain  <benjamin@webkit.org>

        Add back WTFURL to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=77291

        Reviewed by Adam Barth.

        Add a flag to build-webkit to easily build WebKit with WTFURL.

        * Scripts/build-webkit:

2012-02-10  Adam Klein  <adamk@chromium.org>

        Enable MUTATION_OBSERVERS by default on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=78196

        Reviewed by Ojan Vafai.

        * Scripts/build-webkit:

2012-02-10  Adam Barth  <abarth@webkit.org>

        Move garden-o-matic's All Failures out of experimental
        https://bugs.webkit.org/show_bug.cgi?id=78395

        Reviewed by Dimitri Glazkov.

        Several folks have tried this feature and found it useful.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:

2012-02-10  Tim Horton  <timothy_horton@apple.com>

        NRWT should categorize options in --help
        https://bugs.webkit.org/show_bug.cgi?id=76221

        Reviewed by Eric Seidel.
        
        Use optparse's OptionGroup mechanism to logically group NRWT's options,
        providing a better experience when scanning all the options.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-02-10  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] Refactor on Qt5 Layout tests' structure
        https://bugs.webkit.org/show_bug.cgi?id=77450

        Reviewed by Csaba Osztrogonác.

        Fix the scripts and related unittest due to the rename of qt-wk2 and qt-wk1
        to qt-5.0-wk2 and qt-5.0-wk1.

        * Scripts/old-run-webkit-tests:
        (buildPlatformResultHierarchy):
        (readSkippedFiles):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._wk2_port_name):
        (QtPort._skipped_file_search_paths):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest.test_baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._wk2_port_name):

2012-02-09  Philippe Normand  <pnormand@igalia.com>

        [GTK] EWS command-line option to run the tests
        https://bugs.webkit.org/show_bug.cgi?id=78211

        Reviewed by Adam Barth.

        New --run-tests option (defaults to False) for the EWS commands.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem):
        (AbstractEarlyWarningSystem.__init__):
        (AbstractEarlyWarningSystem.review_patch):
        (ChromiumLinuxEWS):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSytemTest._test_builder_ews):

2012-02-09  Eric Seidel  <eric@webkit.org>

        Rename compare_text and compare_audio to make it clear that they're !=
        https://bugs.webkit.org/show_bug.cgi?id=78301

        Reviewed by Adam Barth.

        I also removed the maybe_create_directory function which was redundant.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.set_up_run):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (TestResultWriter._make_output_directory):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.do_text_results_differ):
        (Port.do_audio_results_differ):
        (Port.diff_text):
        (Port.driver_name):
        (Port.skips_perf_test):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort.do_text_results_differ):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest.test_do_text_results_differ):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase.__init__):
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        (Rebaseliner._diff_baselines):

2012-02-09  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Add DRT support for modal dialogs
        https://bugs.webkit.org/show_bug.cgi?id=53600

        Reviewed by Martin Robinson.

        Implement the modal dialogs handling in DumpRenderTree and GtkLauncher.
        Most significantly, when creating a new web view in GtkLauncher, the window
        of the web view opener is passed around. In DumpRenderTree, the window of
        the main web view is always considered as the opener. This is required so
        the modal dialog's toplevel can be made transient for the opener's toplevel.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewRunModalDialog):
        (createWebView):
        * GtkLauncher/main.c:
        (createWebViewCb):
        (runModalDialogCb):
        (createBrowser):
        (createWindow):
        (main):

2012-02-09  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] security/set-form-autocomplete-attribute.html fails
        https://bugs.webkit.org/show_bug.cgi?id=78261

        Reviewed by Martin Robinson.

        Use the new helper in DumpRenderTreeSupportGtk to properly
        test whether an element performs autocompletion.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::elementDoesAutoCompleteForElementWithId):

2012-02-09  James Robinson  <jamesr@chromium.org>

        [chromium] Enable mock scrollbars for compositing layout tests
        https://bugs.webkit.org/show_bug.cgi?id=78299

        Reviewed by Dirk Pranke.

        This enables mock scrollbars by default for compositing tests. These pixel tests are intended to test the
        compositor behavior, not native theming, and having real scrollbars causes us to have to maintain significantly
        more pngs than we should and expose weird alpha bugs in our theming that doesn't impact real users.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):

2012-02-09  Eric Seidel  <eric@webkit.org>

        Remove more uses of "os" from our webkitpy code
        https://bugs.webkit.org/show_bug.cgi?id=78292

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/checkout_mock.py:
        (MockCheckout.__init__):
        (MockCheckout.is_path_to_changelog):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem._split):
        * Scripts/webkitpy/common/system/zipfileset_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/bot/sheriff_unittest.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        (CreateBug.prompt_for_bug_title_and_comment):
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:
        * Scripts/webkitpy/tool/steps/attachtobug.py:
        (AttachToBug.run):
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        * Scripts/webkitpy/tool/steps/cleanworkingdirectory.py:
        * Scripts/webkitpy/tool/steps/commit_unittest.py:
        * Scripts/webkitpy/tool/steps/editchangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:
        (PrepareChangeLogTest.test_ensure_bug_url):
        * Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:
        * Scripts/webkitpy/tool/steps/validatereviewer.py:

2012-02-09  Eric Seidel  <eric@webkit.org>

        Remove the cr-mac-ews (it's long been dead)
        https://bugs.webkit.org/show_bug.cgi?id=78267

        Reviewed by Adam Barth.

        * QueueStatusServer/model/queues.py:
        (Queue):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (ChromiumWindowsEWS):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSytemTest._test_builder_ews):
        (EarlyWarningSytemTest._test_testing_ews):

2012-02-09  Dirk Pranke  <dpranke@chromium.org>

        some tests in webkitpy are being run three times
        https://bugs.webkit.org/show_bug.cgi?id=78283

        Reviewed by Ryosuke Niwa.

        It turns out that if you import a class derived from
        unittest.TestCase as a base name (e.g., from ... import ChangeLogTest),
        the unittest framework treats it as if the class was defined in
        the file (as well in the original file). This led us to running
        the tests in ChangeLogTest three times.

        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:
        (PrepareChangeLogTest):
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py:
        (_assert_message_for_revert_output):

2012-02-09  Adam Barth  <abarth@webkit.org>

        Remove extraneous line in previous patch.  I forgot to remove this
        before landing.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverProxy.start):

2012-02-09  Adam Barth  <abarth@webkit.org>

        run-perf-tests should have an option to pause before running tests so we can attach Instruments
        https://bugs.webkit.org/show_bug.cgi?id=78271

        Reviewed by Ryosuke Niwa.

        This lets me attach instruments to profile the performance of the test.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.start):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.start):
        (DriverProxy.start):
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess.start):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestDriver.start):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.start):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (get_tests_run.RecordingTestDriver.start):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner._run_tests_set):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (start):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStopCount):
        (test_run_test_set_kills_drt_per_run):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStartCount):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStartCount.start):

2012-02-09  Adam Barth  <abarth@webkit.org>

        run-perf-tests --chromium should run the chromium port
        https://bugs.webkit.org/show_bug.cgi?id=78266

        Reviewed by Ryosuke Niwa.

        This patch makes run-perf-tests work more like run-webkit-tests.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):

2012-02-09  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] run-webkit-tests --qt  crashes if WEBKIT_TESTFONTS is not set
        https://bugs.webkit.org/show_bug.cgi?id=77466

        Reviewed by Dirk Pranke.

        Replicate the behavior of old-run-webkit-tests and check if WEBKIT_TESTFONTS
        is set or if we should raise an error. A unit test was added.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.operating_system):
        (QtPort):
        (QtPort.check_sys_deps):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest.test_operating_system):
        (QtPortTest):
        (QtPortTest.test_check_sys_deps):

2012-02-09  Eric Seidel  <eric@webkit.org>

        Rename ports.WebKitPort to DeprecatedPort and make it stop being all class methods
        https://bugs.webkit.org/show_bug.cgi?id=78263

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort):
        (DeprecatedPort.name):
        (DeprecatedPort.flag):
        (DeprecatedPort.script_path):
        (DeprecatedPort.script_shell_command):
        (DeprecatedPort.port):
        (DeprecatedPort.makeArgs):
        (DeprecatedPort.update_webkit_command):
        (DeprecatedPort.check_webkit_style_command):
        (DeprecatedPort.prepare_changelog_command):
        (DeprecatedPort.build_webkit_command):
        (DeprecatedPort.run_javascriptcore_tests_command):
        (DeprecatedPort.run_webkit_unit_tests_command):
        (DeprecatedPort.run_webkit_tests_command):
        (DeprecatedPort.run_python_unittests_command):
        (DeprecatedPort.run_perl_unittests_command):
        (DeprecatedPort.layout_tests_results_path):
        (MacPort):
        (WinPort):
        (GtkPort):
        (GtkPort.build_webkit_command):
        (GtkPort.run_webkit_tests_command):
        (QtPort):
        (QtPort.build_webkit_command):
        (EflPort):
        (EflPort.build_webkit_command):
        (ChromiumPort):
        (ChromiumPort.update_webkit_command):
        (ChromiumPort.build_webkit_command):
        (ChromiumPort.run_webkit_tests_command):
        (ChromiumPort.run_javascriptcore_tests_command):
        (ChromiumXVFBPort):
        (ChromiumXVFBPort.run_webkit_tests_command):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest):
        (DeprecatedPortTest.test_mac_port):
        (DeprecatedPortTest.test_gtk_port):
        (DeprecatedPortTest.test_qt_port):
        (DeprecatedPortTest.test_chromium_port):
        (DeprecatedPortTest.test_chromium_xvfb_port):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.__init__):
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/main.py:
        (WebKitPatch):
        (WebKitPatch.handle_global_options):
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest.test_runtests_args):

2012-02-09  Jochen Eisinger  <jochen@chromium.org>

        [chromium] always initialize makeArgs in buildChromiumNinja
        https://bugs.webkit.org/show_bug.cgi?id=78231

        Reviewed by Tony Gentilcore.

        * Scripts/webkitdirs.pm:
        (buildChromiumNinja):

2012-02-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Show url of current hovered link in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=78098

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewMouseTargetChanged): Check whether hit test result is a
        link and use the url to update the status bar text.
        (browserWindowConstructed): Connect to
        WebKitWebView::mouse-target-changed signal.

2012-02-09  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Upstream DumpRenderTreeBlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=78042

        Reviewed by Antonio Gomes.

        Upstream final part of our DRT implementation.

        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp: Added.
        * DumpRenderTree/blackberry/PNGImageEncoder.cpp: Added.
        * DumpRenderTree/blackberry/PNGImageEncoder.h: Added.
        * DumpRenderTree/blackberry/PixelDumpSupportBlackBerry.cpp: Added.
        * DumpRenderTree/blackberry/PixelDumpSupportBlackBerry.h: Added.

2012-02-09  Ryosuke Niwa  <rniwa@webkit.org>

        kill-old-processes should kill gcc and clang
        https://bugs.webkit.org/show_bug.cgi?id=78189

        Reviewed by Eric Seidel.

        Added a bunch of processes names of gcc and clang to the list.

        * BuildSlaveSupport/kill-old-processes:

2012-02-07  MORITA Hajime  <morrita@google.com>

        Replacement text should be available from the marker.
        https://bugs.webkit.org/show_bug.cgi?id=77934

        Made the mock requestCheckingOfText() implementation to return
        a replacement text for each misspelled word if available.

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::finishLastTextCheck):

2012-02-08  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][DRT] DumpRenderTreeQt should support --no-timeout and --timeout options
        https://bugs.webkit.org/show_bug.cgi?id=78146

        Reviewed by Ryosuke Niwa.

        Our DumpRenderTree should support --no-timeout and --timeout options in order
        to be able to use run-perf-tests and have a Performance Bot.
        This patch adds setTimeout and setShouldTimeout functions to our LayoutTestController
        and the necessary code to handle such command line arguments to our DumpRenderTree.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::setTimeout):
        (WebCore):
        (WebCore::DumpRenderTree::setShouldTimeout):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (DumpRenderTree):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::notifyDone):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::setTimeout):
        (LayoutTestController::setShouldTimeout):
        (LayoutTestController):
        * DumpRenderTree/qt/main.cpp:
        (isOption):
        (printUsage):
        (main):

2012-02-08  Gustavo Noronha Silva  <gns@gnome.org>

        Rubber-stamped by Martin Robinson.

        * gtk/common.py:
        (get_build_path): Move test for current directory being a valid
        directory up so it takes precedence over WebKitBuild/Release and
        WebKitBuild/Debug when they exist as well.

2012-02-08  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] doc rebasing does not respect DESTDIR
        https://bugs.webkit.org/show_bug.cgi?id=78177

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Pass DESTDIR on to generate-gtkdoc, when
        calling it for rebasing.
        * gtk/generate-gtkdoc:
        (get_common_options): Handle the new --virtual-root option.
        * gtk/gtkdoc.py:
        (GTKDoc.rebase_installed_docs): If a virtual-root has been given, pass
        it on to gtkdoc-rebase as dest-dir, and prefix the htmldir with it.

2012-02-08  Adam Barth  <abarth@webkit.org>

        Remove Python 2.5 support from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=71593

        Reviewed by Eric Seidel.

        This is the last vestige of our Python 2.5 support.

        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (AbstractQueueTest.test_log_from_script_error_for_upload):

2012-02-08  Adam Barth  <abarth@webkit.org>

        version_check.py should inform users that we don't support Python 2.5 anymore
        https://bugs.webkit.org/show_bug.cgi?id=78179

        Reviewed by Eric Seidel.

        We don't support Python 2.5 anymore.

        * Scripts/webkitpy/common/version_check.py:

2012-02-08  Adam Barth  <abarth@webkit.org>

        test_configuration.py shouldn't re-implement itertools
        https://bugs.webkit.org/show_bug.cgi?id=78178

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        (TestConfigurationConverter.to_specifiers_list):
        (TestConfigurationConverter.to_specifiers_list.try_collapsing):
        (TestConfigurationConverter.to_specifiers_list.try_abbreviating):
        (TestConfigurationConverter):

2012-02-08  Adam Barth  <abarth@webkit.org>

        webkitpy should reply upon the multiprocessing package existing
        https://bugs.webkit.org/show_bug.cgi?id=78176

        Reviewed by Eric Seidel.

        Now that we don't support Python 2.5, this import can't fail.

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (get):
        (_Process):
        (_Process.__init__):
        (_Process.run):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (FunctionTests.test_get__processes):
        (MultiProcessBrokerTests.setUp):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        (Port.default_worker_model):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.check_build):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_default_worker_model):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2012-02-08  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed typo fix that makes docs build again for the gtk2-based
        library.

        * gtk/generate-gtkdoc:

2012-02-08  Adam Barth  <abarth@webkit.org>

        Don't re-implement ZipFile.extractall
        https://bugs.webkit.org/show_bug.cgi?id=78173

        Reviewed by Eric Seidel.

        We can use ZipFile.extractall now that we don't support Python 2.5.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._extract_targz):
        (AutoInstaller._unzip):

2012-02-08  Adam Barth  <abarth@webkit.org>

        Remove the ospath compat shim from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=78170

        Reviewed by Eric Seidel.

        We no longer need this compat shim now that we don't support Python 2.5.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.relpath):
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.relpath):
        * Scripts/webkitpy/common/system/ospath.py: Removed.
        * Scripts/webkitpy/common/system/ospath_unittest.py: Removed.

2012-02-08  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix attempt after r107053.

        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_collect_tests):

2012-02-08  Adam Barth  <abarth@webkit.org>

        Remove simplejson because it's no longer used by webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=78164

        Reviewed by Eric Seidel.

        All the importers of this code were removed in a previous patch.

        * Scripts/webkitpy/thirdparty/simplejson: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/LICENSE.txt: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/README.txt: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/__init__.py: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/_speedups.c: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/decoder.py: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/encoder.py: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/jsonfilter.py: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/ordered_dict.py: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/scanner.py: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/tool.py: Removed.

2012-02-08  Adam Barth  <abarth@webkit.org>

        webkitpy still imports simplejson
        https://bugs.webkit.org/show_bug.cgi?id=78161

        Reviewed by Eric Seidel.

        We no longer support Python 2.5, so we can rely upon Python's built-in
        JSON package.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:

2012-02-08  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Fails to build docs with non-standard build directories
        https://bugs.webkit.org/show_bug.cgi?id=78118

        * gtk/common.py:
        (get_build_path): add comment to document changes done in r107098,
        as requested by the reviewer and forgotten by me.

2012-02-08  Adam Barth  <abarth@webkit.org>

        Stop importing with_statement from the mysterious future
        https://bugs.webkit.org/show_bug.cgi?id=78156

        Reviewed by Eric Seidel.

        The future is now!  (Well, at least 2008, when Python 2.6 was released,
        is no longer the __future__.)

        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/common/net/file_uploader.py:
        * Scripts/webkitpy/common/newstringio_unittest.py:
        * Scripts/webkitpy/common/system/autoinstall.py:
        * Scripts/webkitpy/common/system/crashlogs.py:
        * Scripts/webkitpy/common/system/fileset.py:
        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        * Scripts/webkitpy/common/system/path.py:
        * Scripts/webkitpy/common/thread/threadedmessagequeue.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        (of):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/style/filereader_unittest.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py:
        * Scripts/webkitpy/tool/commands/analyzechangelog.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py:

2012-02-08  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Upstream DumpRenderTreeBlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=78042

        Reviewed by Antonio Gomes.

        Upstream more parts of our DRT implementation.

        * DumpRenderTree/blackberry/AccessibilityControllerBlackBerry.cpp: Added.
        * DumpRenderTree/blackberry/AccessibilityUIElementBlackBerry.cpp: Added.
        * DumpRenderTree/blackberry/EventSender.cpp: Added.
        * DumpRenderTree/blackberry/EventSender.h: Added.
        * DumpRenderTree/blackberry/GCControllerBlackBerry.cpp: Added.
        * DumpRenderTree/blackberry/WorkQueueItemBlackBerry.cpp: Added.

2012-02-08  Dirk Pranke  <dpranke@chromium.org>

        check-webkit-style failing with "Path does not exist."
        https://bugs.webkit.org/show_bug.cgi?id=77873

        Reviewed by Ojan Vafai.

        This change fixes the way the style checker determines which
        Port class to use for a given test_expectations.txt path; the
        previous version used a heuristic that didn't really work in the
        first place.

        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker._determine_port_from_expectations_path):
        (TestExpectationsChecker.__init__):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase._expect_port_for_expectations_path):
        (TestExpectationsTestCase.test_determine_port_from_expectations_path):

2012-02-08  Fehér Zsolt  <feherzs@inf.u-szeged.hu>

        nrwt: make --skip-pixel-test-if-no-baseline option
        https://bugs.webkit.org/show_bug.cgi?id=70484

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__):
        (SingleTestRunner._should_fetch_expected_checksum):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.handle_test_list):
        * Scripts/webkitpy/layout_tests/models/test_input.py:
        (TestInput.__init__):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.cmd_line):
        * 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_skip_pixel_test_if_no_baseline_option):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestController.h:
        (TestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::setIsPixelTest):
        * WebKitTestRunner/TestInvocation.h:
        (WTR::TestInvocation::setSkipPixelTestOption):
        (TestInvocation):

2012-02-08  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Upstream DumpRenderTreeBlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=78042

        Reviewed by Antonio Gomes.

        Add implementation for our DumpRenderTree solution.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp: Added.
        * DumpRenderTree/blackberry/DumpRenderTreeBlackBerry.h: Added.

2012-02-08  Antti Koivisto  <antti@apple.com>

        REGRESSION (r106681): Null check missing in [WebFrame(WebInternal) _typingStyle]
        https://bugs.webkit.org/show_bug.cgi?id=78080

        Reviewed by Andreas Kling, Darin Adler and Dan Bernstein.
        
        Add API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/TypingStyleCrash.mm: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2012-02-08  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Fails to build docs with non-standard build directories
        https://bugs.webkit.org/show_bug.cgi?id=78118

        Reviewed by Martin Robinson.

        * gtk/common.py:
        (get_build_path): also try the current directory as a valid build
        dir, which makes non-standard build directories such as build-2.0
        and build-3.0 work

2012-02-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Open links in a new window when clicking with the middle button in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=78099

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewDecidePolicy): Check whether it's a link clicked with the
        middle mouse button and load the request in a new window.
        (browserWindowConstructed): Connect to
        WebKitWebView::decide-policy signal.

2012-02-08  Ryosuke Niwa  <rniwa@webkit.org>

        Revert a part of the change in r106687 as a build fix.

        Since Chromium port doesn't checkout the entire WebKit trunk,
        we can't run "svn info" on webkit_base.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.repository_paths):

2012-02-07  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests doesn't recognize paths that start with PerformanceTests
        https://bugs.webkit.org/show_bug.cgi?id=78012

        Reviewed by Adam Barth.

        Use resolve paths using filesystem.relpath before passing it to find_files.find.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner._collect_tests):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_collect_tests):
        (test_collect_tests.add_file):

2012-02-07  Justin Novosad  <junov@chromium.org>

        [Chromium] add option for 2d canvas defered rendering to DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=78039

        Reviewed by Stephen White.

        Adding the --enable-deferred-2d-canvas switch to DumpRenderTree

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        (TestShell::runFileTest):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setDeferred2dCanvasEnabled):
        (TestShell):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):

2012-02-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CMAKE] Use *bin* and *lib* directories for executable and libraries.
        https://bugs.webkit.org/show_bug.cgi?id=77928

        Reviewed by Daniel Bates.

        CMake has used *Programs* directory for executable. In addition, shared libraries are being
        built in source directory. It is better to set common places in order to maintain executable
        and libraries. *bin* is for executable and *lib* is for library.

        * DumpRenderTree/efl/CMakeLists.txt:
        * EWebLauncher/CMakeLists.txt:
        * Scripts/run-launcher:
        * Scripts/webkitdirs.pm:
        (jscProductDir):
        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort._path_to_driver):
        (EflPort._path_to_image_diff):

2012-02-07  Adam Klein  <adamk@chromium.org>

        Add JSC support for delivering mutations when the outermost script context exits
        https://bugs.webkit.org/show_bug.cgi?id=70289

        Reviewed by Eric Seidel.

        * DumpRenderTree/mac/EventSendingController.mm: Add support for
        eventSender.scheduleAsynchronousKeyDown.
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController keyDownWrapper:withModifiers:withLocation:]):
        (-[EventSendingController scheduleAsynchronousKeyDown:withModifiers:withLocation:]):
        * Scripts/build-webkit: Properly alphabetize --mutation-observers in the --help output.

2012-02-07  Chris Rogers  <crogers@google.com>

        Add Chris Rogers to reviewers section
        https://bugs.webkit.org/show_bug.cgi?id=78016

        Reviewed by Adam Barth.

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

2012-02-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        layoutTestController.display() is flaky for SVG tests
        https://bugs.webkit.org/show_bug.cgi?id=78021

        Reviewed by Dan Bernstein.

        Fix race condition in repaint rect tracking. When running a test using the repaint.js
        harness right after a test starting with "svg/W3C-SVG-1.1" the repaint test will fail,
        the gray overlay isn't contained in the pixel dump anymore. This is because of a specific
        hack that forces 480x360 instead of 800x600 pixel test dumps for any test starting with
        svg/W3C-SVG-1.1. The resizing of the web view was done when dumping the render tree, after
        the repaint test already run, thus invalidating the previously tracked repaint rects.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        (runTest):

2012-02-07  Hans Wennborg  <hans@chromium.org>

        Chromium: remove WebSpeechInputResult::set
        https://bugs.webkit.org/show_bug.cgi?id=77977

        Reviewed by Darin Fisher.

        It was renamed to assign() in r106475.

        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp:
        (makeRectResult):

2012-02-07  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Give emulated touch-point a radius
        https://bugs.webkit.org/show_bug.cgi?id=77985
        
        Increase the radius of touch-point and show the actual size of the touch point in the touch-point mockup.

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::updateVisualMockTouchPoints):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/qml/MockTouchPoint.qml:

2012-02-07  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Include gdk-pixbuf in the jhbuild modules
        https://bugs.webkit.org/show_bug.cgi?id=77980

        Reviewed by Gustavo Noronha Silva.

        * gtk/jhbuild.modules: Add gdk-pixbuf to the jhbuild moduleset.

2012-02-07  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Prevent early test termination with newer Qt 5
        https://bugs.webkit.org/show_bug.cgi?id=77945

        Reviewed by Csaba Osztrogonác.

        QTBUG-24120 tracks a regression in Qt that would make layout tests
        terminate early. This patch works around it in a Qt 4 + 5 safe manner
        by disabling the quitOnLastWindowClosed feature, which we don't want/need
        for DRT anyway.

        * DumpRenderTree/qt/main.cpp:
        (main): Don't quit on last window closed.

2012-02-06  Martin Robinson  <mrobinson@igalia.com>

        Fix some miscellaneous 'make dist' error for WebKitGTK+.

        * MiniBrowser/gtk/GNUmakefile.am: The MiniBrowser generated
        files should not be distributed.

2012-02-02  Hajime Morrita  <morrita@chromium.org>

        [PerformanceTests] Each Dromaeo test needs its landing html.
        https://bugs.webkit.org/show_bug.cgi?id=77504

        Reviewed by Ryosuke Niwa.

        Added an ignorable pattern which happens in some Dromaeo tests.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):

2012-02-06  Kalev Lember  <kalevlember@gmail.com>

        [GTK] Add missing pango include dir to fix build
        https://bugs.webkit.org/show_bug.cgi?id=77832

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Added $(PANGO_CFLAGS) to libWebCoreInternals_la_CPPFLAGS.

2012-02-06  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Fix remaining errors in GTK+ WebKit2 API
        https://bugs.webkit.org/show_bug.cgi?id=77890

        Reviewed by Gustavo Noronha Silva.

        Verify that WebKit2 GTK+ test files are not skipped during style checks.
        Skip soup_server_new when checking for NULL versus 0 usage.

        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherSkipTest.test_should_skip_with_warning):
        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_null):

2012-02-06  Eric Seidel  <eric@webkit.org>

        webkit-patch apply-from-bug should be able to apply non-reviewed patches
        https://bugs.webkit.org/show_bug.cgi?id=77883

        Reviewed by Adam Barth.

        This is very helpful if you use bugzilla as a replacement for git-stash.
        Makes it simpler to re-apply the patch w/o having to look up the patch id.

        * Scripts/webkitpy/tool/commands/download.py:
        (ProcessBugsMixin._fetch_list_of_patches_to_process):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (DownloadCommandsTest.test_apply_from_bug):

2012-02-06  Philippe Normand  <pnormand@igalia.com>

        [webkitpy] cpp style-checker complains about readability/naming in GStreamer elements source files
        https://bugs.webkit.org/show_bug.cgi?id=77866

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/style/checker.py: Ignore readability/naming
        errors in some gstreamer source code files defining new GStreamer elements.
        * Scripts/webkitpy/style/checker_unittest.py:
        (GlobalVariablesTest.test_path_rules_specifier):

2012-02-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make sure html_dir exists before calling gtkdoc-rebase
        https://bugs.webkit.org/show_bug.cgi?id=77869

        Reviewed by Philippe Normand.

        * gtk/gtkdoc.py:
        (GTKDoc.rebase_installed_docs): Check html_dir exists.

2012-02-03  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Don't version QtWebKit.experimental.
        https://bugs.webkit.org/show_bug.cgi?id=77739

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-02-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix several gtkdoc-fixxref warnings
        https://bugs.webkit.org/show_bug.cgi?id=77613

        Reviewed by Martin Robinson.

        * gtk/generate-gtkdoc:
        (get_webkit1_options): Add webkitspellcheckerenchant.* to the list
        of ignored files, since it's private.
        * gtk/gtkdoc.py:
        (GTKDoc._ignored_files_basenames): Helper function that returns a
        string with the list of ignored files basenames separated by a
        spaces, as expected by several gtkdoc commands.
        (GTKDoc._run_gtkdoc_scan): Use _ignored_files_basenames for
        --ignore-headers option.
        (GTKDoc._run_gtkdoc_mkdb): Use _ignored_files_basenames for
        --ignore-files option.

2012-02-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix xrefs after installing API documentation
        https://bugs.webkit.org/show_bug.cgi?id=77551

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Call generate-gtkdoc --rebase after installing
        api docs.
        * gtk/common.py:
        (prefix_of_pkg_config_file): Get the prefix variable of the given
        pkg-config file.
        (gtk_version_of_pkg_config_file): Get the gtk version required by
        the given pkg-config file.
        * gtk/generate-gtkdoc: Add --rebase command line option to rebase
        installed documentation.
        (get_gtkdoc_module_paths): Get paths where API doc is installed
        for the dependencies of the given pkg-config file.
        (get_common_xref_deps): Get API doc directories of dependencies
        common to WebKit1 and WebKit2.
        (get_webkit2_options): Add cross_reference_deps option.
        (get_webkit1_options): Ditto
        (rebase_installed_docs): Helper function to create a generator for
        the given pkg-config file and options and call rebase_installed_docs.
        * gtk/gtkdoc.py:
        (GTKDoc.__init__): Initialize cross_reference_deps.
        (GTKDoc._run_gtkdoc_fixxref): Add API doc directories of
        dependencies.
        (GTKDoc.rebase_installed_docs): Call gtkdoc-rebase to fix xref
        links of installed documentation.
        (PkgConfigGTKDoc.__init__): Get the prefix from the pkg-config
        file.

2012-02-06  Sergio Villar Senin  <svillar@igalia.com>

        Incorrect statistics shown when running run-webkit-tests with --repeat-each or --iterations
        https://bugs.webkit.org/show_bug.cgi?id=77672

        Reviewed by Dirk Pranke.

        Test repetitions must be taken into account when working out
        the statistics shown by run-webkit-tests.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.prepare_lists_and_print_output):
        (Manager._print_result_summary):
        * Scripts/webkitpy/layout_tests/models/result_summary.py:
        (ResultSummary.__init__):
        (ResultSummary.add):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_repeat_each_iterations_num_tests):

2012-02-05  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10809525> WebKit2’s WebFrameLoaderClient::shouldUseCredentialStorage() always returns true
        https://bugs.webkit.org/show_bug.cgi?id=77823

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Updated for the additional callback.

2012-02-04  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10660698> Clients cannot prevent caching of individual responses
        https://bugs.webkit.org/show_bug.cgi?id=77822

        Reviewed by Sam Weinig.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Updated for the additional callback.

2012-02-04  Sam Weinig  <sam@webkit.org>

        Add ability to send WKURLRequests in WebKit2 API user messages
        https://bugs.webkit.org/show_bug.cgi?id=77819

        Reviewed by Anders Carlsson.

        Add testing for round-tripping WKTypes from the UIProcess,
        to the WebProcess, and back.

        - This commit adds a test fixture and tests for WKURLRequestRef, WKURLRef, and WKStringRef.
          More can easily be added.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/UserMessage.cpp: Added.
        (TestWebKitAPI):
        (WebKit2UserMessageRoundTripTest):
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::WebKit2UserMessageRoundTripTest):
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::didReceiveMessageFromInjectedBundle):
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::didFinishLoadForFrame):
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::setInjectedBundleClient):
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::setPageLoaderClient):
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::SetUp):
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::roundTrip):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKit2/UserMessage_Bundle.cpp: Added.
        (TestWebKitAPI):
        (UserMessageTest):
        (TestWebKitAPI::UserMessageTest::UserMessageTest):
        (TestWebKitAPI::UserMessageTest::didReceiveMessage):
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::resizeTo):
        (TestWebKitAPI):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj:

2012-02-04  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10772406> WKPreferences instances cannot be copied
        https://bugs.webkit.org/show_bug.cgi?id=77816

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST):

2012-02-04  Adam Barth  <abarth@webkit.org>

        garden-o-matic's All Failure tab should let you examine and rebaseline expected failures
        https://bugs.webkit.org/show_bug.cgi?id=77802

        Reviewed by Eric Seidel.

        This patch refactors our directory grouping code into base.js where it
        can be shared between failures.js and notifications.js.  It then adds
        an Examine action to each group of failures that triggers the "results"
        view.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/failures.css:

2012-02-04  Ojan Vafai  <ojan@chromium.org>

        check-webkit-style is throwing an exception
        https://bugs.webkit.org/show_bug.cgi?id=77744

        Reviewed by David Levin.

        If the test_list is None, then we don't need to check for unsupported
        feature tests to skip.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._has_test_in_directories):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (test_skipped_tests_for_unsupported_features_empty_test_list):

2012-02-03  Adam Barth  <abarth@webkit.org>

        List of all failures in garden-o-matic should actually list all the failures
        https://bugs.webkit.org/show_bug.cgi?id=77796

        Reviewed by Eric Seidel.

        This patch wires a bit more data into the new "All Failures" tab.  I've
        also iterated on how we enable this experimental feature.  The tab is
        still just a dumb list, but we'll make it smarter.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js:

2012-02-03  Ryosuke Niwa  <rniwa@webkit.org>

        Windows build fix after r106692.

        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_reference_files):

2012-02-03  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77782
        WebPageProxy::didNewFirstVisuallyNonEmptyLayout should is called more than 
        once on some pages with frames
        -and corresponding-
        <rdar://problem/10798474>

        Reviewed by Sam Weinig.

        One new test.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::didForceRepaint):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::didNewFirstVisuallyNonEmptyLayout):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames_Bundle.cpp: Added.
        (TestWebKitAPI):
        (NewFirstVisuallyNonEmptyLayoutFramesTest):
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutFramesTest::NewFirstVisuallyNonEmptyLayoutFramesTest):
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutFramesTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/lots-of-iframes.html: Added.

2012-02-03  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: change exit() calls to sys.exit(), fix a leak in outputcapture
        https://bugs.webkit.org/show_bug.cgi?id=77781

        Reviewed by Eric Seidel.

        This change fixes a couple of issues discovered while debugging
        test-webkitpy; both calling exit() instead of sys.exit() --
        which is discouraged in program code instead of the interpreter
        -- and a particular usage of outputcapture were stdin to get whacked
        and preventing debugging.
       
        This change introduces a couple of common _exit() methods that
        will standardize how webkit-patch exit's, in case we need to do
        something different in the future.

        * Scripts/webkitpy/common/system/deprecated_logging.py:
        (error):
        * Scripts/webkitpy/common/system/outputcapture.py:
        (OutputCapture.assert_outputs):
        * Scripts/webkitpy/tool/bot/queueengine.py:
        (QueueEngine.exit_after_handled_error):
        * Scripts/webkitpy/tool/commands/abstractsequencedcommand.py:
        (AbstractSequencedCommand.execute):
        * Scripts/webkitpy/tool/commands/queues.py:
        (StyleQueue.handle_script_error):
        * Scripts/webkitpy/tool/commands/upload.py:
        (MarkBugFixed.execute):
        * Scripts/webkitpy/tool/multicommandtool.py:
        (Command._exit):
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        (AbstractStep._exit):
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        (CheckStyle.run):
        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit._check_test_expectations):
        * Scripts/webkitpy/tool/steps/confirmdiff.py:
        (ConfirmDiff.run):

2012-02-03  Ryosuke Niwa  <rniwa@webkit.org>

        Perf bot build fix.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._generate_json):

2012-02-03  Adam Barth  <abarth@webkit.org>

        Add a blank "Expected Failures" tab to garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=77793

        Reviewed by Eric Seidel.

        This tab will help us explore and manage our expected failures.  The
        tab is hidden by default via a new "experimental features" flag.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/onebar.css:
        (#unexpected):
        (#onebar.partytime #unexpected):

2012-02-03  Lucas Forschler  <lforschler@apple.com>

        update-webkit-support-libraries is broken with the change from http to https on developer.apple.com
        https://bugs.webkit.org/show_bug.cgi?id=77785

        Fix the build bots.
        
        Pass the -k and --sslv3 keys to make curl work with https on https://developer.apple.com

        * Scripts/update-webkit-support-libs:
        (downloadExpectedVersionNumber):

2012-02-03  Lucas Forschler  <lforschler@apple.com>

        Add a Mac Lion Performance bot.
        https://bugs.webkit.org/show_bug.cgi?id=77765

        Reviewed by Adam Roben.

        This will update the master configuration in the following ways:
            Add a new performance slave (apple-xseve-11)
            Add a new Factory to download a build and run perf tests.
            
        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (DownloadAndPerfTestFactory):
        (DownloadAndPerfTestFactory.__init__):

2012-02-03  Dirk Pranke  <dpranke@chromium.org>

        Extra TestWebKitAPI.gyp/TestWebKitAPI.target.chromium.mk in repository
        https://bugs.webkit.org/show_bug.cgi?id=77752

        Reviewed by James Robinson.

        Delete unneeded file accidentally checked in in r106481.

        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.target.chromium.mk: Removed.

2012-02-03  Ryosuke Niwa  <rniwa@webkit.org>

        Ref Tests should support plain SVG files
        https://bugs.webkit.org/show_bug.cgi?id=77685

        Reviewed by Tony Chang.

        Don't assume reference files always use .html as the extension.
        Instead, use the list of supported extension to look for -expected.* and -mismatch.*

        Also fix various bugs in MockFileSystem and TestPort.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.isdir):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.reference_files):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_is_test_file):
        (PortTest.test_reference_files):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestInstance.__init__):

2012-02-03  Ryosuke Niwa  <rniwa@webkit.org>

        perf-o-matic should store chromium svn revision
        https://bugs.webkit.org/show_bug.cgi?id=77725

        Reviewed by Dirk Pranke.

        Report both WebKit and Chromium revisions to the graph server. Renamed test_repository_paths to
        repository_paths since it's nothing to do with tests. Also refactored scm so that head_svn_revision
        is implemented in terms of newly added svn_revision.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.svn_revision):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.head_svn_revision):
        (SCM):
        (SCM.svn_revision):
        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        (MockSCM.svn_revision):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.svn_revision):
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator.__init__):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGeneratorBase._insert_generic_metadata):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.repository_paths):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.repository_paths):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._generate_json):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_test_set_with_json_output):
        (test_run_test_set_with_json_source):
        (test_run_test_set_with_multiple_repositories):

2012-02-03  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Split QQuickWebViewPrivate in two classes, for desktop and touch behavior.
        https://bugs.webkit.org/show_bug.cgi?id=77632

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::sendTouchEvent):
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions):
        (WindowOptions::WindowOptions):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/qt/main.cpp:
        (main):
        * qmake/mkspecs/features/default_post.prf:

2012-02-03  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Replace GNU linker script for exports with export macros in WTF/JSC
        https://bugs.webkit.org/show_bug.cgi?id=77723

        Reviewed by Tor Arne Vestbø.

        * Tools.pro: Compile WTR again on all platforms with WK2.

2012-02-03  Sriram Neelakandan  <sriram.neelakandan@gmail.com>

        Ensure that inspector disabled build works
        https://bugs.webkit.org/show_bug.cgi?id=77604

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/features.prf:

2012-02-02  Jochen Eisinger  <jochen@chromium.org>

        [chromium] add support for --makeargs to the ninja-based build
        https://bugs.webkit.org/show_bug.cgi?id=77688

        Reviewed by Adam Barth.

        * Scripts/webkitdirs.pm:
        (buildChromiumNinja):

2012-02-02  Eric Seidel  <eric@webkit.org>

        Run tests in serial on SnowLeopard to avoid CFURLCache crashes
        https://bugs.webkit.org/show_bug.cgi?id=75145

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.default_child_processes):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_operating_system):
        (test_default_child_processes):

2012-02-02  Dirk Pranke  <dpranke@chromium.org>

       nrwt shouldn't blow up when there are errors in test_expectations.txt
       https://bugs.webkit.org/show_bug.cgi?id=73603

       Reviewed by Ojan Vafai.

       This change removes the distinction between 'errors' and 'warnings'
       in the test expectations parser. Now, any problem is a
       'warning', and if we are linting the file, warnings become fatal (errors).

        This will allow a normal run-webkit-tests run to proceed even if
        there are bad lines.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (ParseError.__init__):
        (ParseError.__str__):
        (ParseError.__repr__):
        (TestExpectationSerializer.to_string):
        (TestExpectationParser._parse_modifiers):
        (TestExpectationParser._parse_expectations):
        (TestExpectationParser._check_modifiers_against_expectations):
        (TestExpectationParser._tokenize):
        (TestExpectationLine.__init__):
        (TestExpectationLine.is_invalid):
        (TestExpectationsModel.add_expectation_line):
        (TestExpectationsModel._already_seen_better_match):
        (TestExpectations.__init__):
        (TestExpectations._report_warnings):
        (TestExpectations.remove_rebaselined_tests.without_rebaseline_modifier):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (assert_bad_expectations):
        (test_parse_warning):
        (test_overrides__duplicate):
        (ExpectationSyntaxTests.test_missing_expectation):
        (ExpectationSyntaxTests.test_missing_colon):
        (ExpectationSyntaxTests.test_too_many_colons):
        (ExpectationSyntaxTests.test_too_many_equals_signs):
        (ExpectationSyntaxTests.test_unrecognized_expectation):
        (SemanticTests.test_bug_format):
        (SemanticTests.test_bad_bugid):
        (SemanticTests.test_slow_and_timeout):
        (test_ambiguous):
        (test_more_modifiers):
        (test_order_in_file):
        (test_macro_overrides):
        (RebaseliningTest.assertRemove):
        (TestExpectationParserTests.test_tokenize_blank):
        (TestExpectationParserTests.test_tokenize_missing_colon):
        (TestExpectationParserTests.test_tokenize_extra_colon):
        (TestExpectationParserTests.test_tokenize_empty_comment):
        (TestExpectationParserTests.test_tokenize_comment):
        (TestExpectationParserTests.test_tokenize_missing_equal):
        (TestExpectationParserTests.test_tokenize_extra_equal):
        (TestExpectationParserTests.test_tokenize_valid):
        (TestExpectationParserTests.test_tokenize_valid_with_comment):
        (TestExpectationParserTests.test_tokenize_valid_with_multiple_modifiers):
        (TestExpectationSerializerTests.test_unparsed_to_string):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (lint):
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.check_test_expectations):

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

        Unreviewed, rolling out r106543.
        http://trac.webkit.org/changeset/106543
        https://bugs.webkit.org/show_bug.cgi?id=77671

        Made tests less stable (Requested by rniwa on #webkit).

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner.__init__):
        (PerfTestsRunner._run_tests_set):
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.TestDriver.run_test):
        (run_test):

2012-02-02  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77664
        Add API tests for didNewFirstVisuallyNonEmptyLayout

        Reviewed by Darin Adler.

        Two new tests.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::didNewFirstVisuallyNonEmptyLayout):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::didForceRepaint):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::didNewFirstVisuallyNonEmptyLayout):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails_Bundle.cpp: Added.
        (TestWebKitAPI):
        (NewFirstVisuallyNonEmptyLayoutFailsTest):
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutFailsTest::NewFirstVisuallyNonEmptyLayoutFailsTest):
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutFailsTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout_Bundle.cpp: Added.
        (TestWebKitAPI):
        (NewFirstVisuallyNonEmptyLayoutTest):
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutTest::NewFirstVisuallyNonEmptyLayoutTest):
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutTest::didCreatePage):

2012-02-02  Michael Saboff  <msaboff@apple.com>

        Add Michael Saboff to reviewers list.

        Rubber-stamped by Gavin Barraclough.

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

2012-02-02  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        Add myself as a committer

        Unreviewed

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

2012-02-02  Ryosuke Niwa  <rniwa@webkit.org>

        [PerformanceTests] tests have dependencies
        https://bugs.webkit.org/show_bug.cgi?id=77506

        Reviewed by Hajime Morita.

        Load an initialization page before each test after starting a DRT so that
        warming up DRT won't affect the performance test results.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner.__init__):
        (PerfTestsRunner._run_tests_set):
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.TestDriver.run_test):
        (test_initial_page_loaded):
        (test_initial_page_loaded.run_test):

2012-02-02  Ryosuke Niwa  <rniwa@webkit.org>

        Re-land r106442 per Adam's suggestion. We'll do both restarting DRT and loading a fake test first.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._run_tests_set):
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (create_runner):
        (test_run_passing_test):
        (test_run_silent_test):
        (test_run_failed_test):
        (test_run_tonguey_test):
        (test_run_timeout_test):
        (test_run_crash_test):
        (test_run_test_set_kills_drt_per_run):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStopCount):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStopCount.__init__):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStopCount.stop):

2012-02-01  Jacob Goldstein  <jacobg@adobe.com>

        Webkit generate-coverage-data script needs update to use new test script
        https://bugs.webkit.org/show_bug.cgi?id=77597

        Reviewed by Dirk Schulze.

        * Scripts/generate-coverage-data:

2012-02-01  Adam Barth  <abarth@webkit.org>

        Update the tests to show that the mac-ews processes patches from
        non-committers.

        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSytemTest.test_committer_only_ewses):
        (EarlyWarningSytemTest.test_builder_ewses):

2012-02-01  Adam Barth  <abarth@webkit.org>

        Mac-ews logs are huge
        https://bugs.webkit.org/show_bug.cgi?id=77045

        Reviewed by Eric Seidel.

        In order to get the cr-linux-ews bot to run tests on EC2, we created
        the chromium-xvfb port, which contained a number of tweaks to the
        Chromium port's behavior.  This patch refactors those tweaks so they
        can be shared with the mac-ews, mostly by moving them into the
        non-interactive mode of RunTests.

        * Scripts/webkitpy/common/config/ports.py:
        (WebKitPort):
        (WebKitPort.layout_tests_results_path):
        (ChromiumPort.run_javascriptcore_tests_command):
        (ChromiumXVFBPort):
        (ChromiumXVFBPort.run_webkit_tests_command):
        * Scripts/webkitpy/common/config/ports_mock.py:
        (MockPort):
        (MockPort.layout_tests_results_path):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (WebKitPortTest.test_chromium_xvfb_port):
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        (LayoutTestResultsReaderTest.test_missing_layout_test_results):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (CommitQueueTest.test_commit_queue):
        (test_rollout):
        (test_manual_reject_during_processing):
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        (RunTestsTest.test_no_unit_tests):
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest.test_runtests_args):

2012-02-01  Ryosuke Niwa  <rniwa@webkit.org>

        Roll out r106442. It made some tests more stable but others less stable.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._run_tests_set):
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (create_runner):
        (test_run_passing_test):
        (test_run_silent_test):
        (test_run_failed_test):
        (test_run_tonguey_test):
        (test_run_timeout_test):
        (test_run_crash_test):
        (test_run_test_set):

2012-02-01  Lucas Forschler  <lforschler@apple.com>

        Enable EWS for non-contributers.
        https://bugs.webkit.org/show_bug.cgi?id=77576
        
        Reviewed by Adam Barth.

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

2012-02-01  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77383
        Add a different didFirstVisuallNonEmptyLayout heuristic to experiment with
        -and corresponding-
        <rdar://problem/10709560>

        Reviewed by Sam Weinig.

        WebKit2's WebLoaderClient has a temporary new function that must be accounted 
        for.
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2012-02-01  Dirk Pranke  <dpranke@chromium.org>

        TestWebKitAPI isn't being built on chromium bots any more
        https://bugs.webkit.org/show_bug.cgi?id=77563

        Reviewed by Dimitri Glazkov.

        I accidentally dropped it in the refactoring in r105449.

        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp: Added.

2012-02-01  Hans Wennborg  <hans@chromium.org>

        Rename WebSpeechInputResult::set() to assign()
        https://bugs.webkit.org/show_bug.cgi?id=77540

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp:
        (MockWebSpeechInputController::addMockRecognitionResult):
        (MockWebSpeechInputController::speechTaskFired):

2012-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKit1 API documentation is not generated when building with gtk-2.0
        https://bugs.webkit.org/show_bug.cgi?id=77542

        Reviewed by Martin Robinson.

        * gtk/generate-gtkdoc: Check first whether there's
        webkitgtk-3.0.pc and if it doesn't exist use webkitgtk-1.0.pc
        instead.
        (get_webkit2_options): Return just the options since the
        pkg_config_path doesn't depend on options
        (get_webkit1_options): Ditto.
        (generate_doc): Helper function to create a generator and generate
        documentation for the given pkg-config file with the given options.
        * gtk/gtkdoc.py:
        (GTKDoc.__init__): Don't use ** for args parameter, since it's
        used as a dict and never expanded.
        (PkgConfigGTKDoc.__init__): Ditto.

2012-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] API documentation is not installed even when building with --enable-gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=77094

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Add install-data-local and uninstall-local rules
        to install/uninstall WebKit1 and WebKit2 API documentation.

2012-02-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106460.
        http://trac.webkit.org/changeset/106460
        https://bugs.webkit.org/show_bug.cgi?id=77552

        It break unit tests if WEBKIT_TESTFONTS isn't defined.
        (Requested by Ossy on #webkit).

        * Scripts/webkitpy/layout_tests/port/qt.py:

2012-02-01  Nándor Huszka  <huszka.nandor@stud.u-szeged.hu>

        [Qt] Automatic clean build feature always do clean build with --no-webkit2
        https://bugs.webkit.org/show_bug.cgi?id=74519

        Reviewed by Tor Arne Vestbø.

        Set the PLUGIN_ARCHITECTURE_UNSUPPORTED define always.

        * qmake/mkspecs/features/features.prf:

2012-02-01  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] run-webkit-tests --qt  crashes if WEBKIT_TESTFONTS is not set
        https://bugs.webkit.org/show_bug.cgi?id=77466

        Reviewed by Kenneth Rohde Christiansen.

        Replicate the behavior of old-run-webkit-tests and check if WEBKIT_TESTFONTS
        is set or if we should raise an error.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.setup_environ_for_server):

2012-02-01  Philippe Normand  <pnormand@igalia.com> and Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Improve FrameLoader signals. Resource loading
        https://bugs.webkit.org/show_bug.cgi?id=49543

        Support for the new loader signals in DRT.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (urlPath):
        (willSendRequestCallback):
        (urlSuitableForTestResult):
        (descriptionSuitableForTestResult):
        (didReceiveResponse):
        (didFinishLoading):
        (didFailLoadingWithError):
        (createWebView):

2012-02-01  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should restart DRT for each test
        https://bugs.webkit.org/show_bug.cgi?id=77506

        Reviewed by Adam Barth.

        Always restart DRT when running performance tests in order to minimize the dependency between tests.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.stop):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._run_tests_set):
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (create_runner):
        (test_run_passing_test):
        (test_run_silent_test):
        (test_run_failed_test):
        (test_run_tonguey_test):
        (test_run_timeout_test):
        (test_run_crash_test):
        (test_run_test_set_kills_drt_per_run):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStopCount):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStopCount.__init__):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStopCount.stop):

2012-01-31  Hans Wennborg  <hans@chromium.org>

        Speech Input: Report speech element rect relative to window rather than frame
        https://bugs.webkit.org/show_bug.cgi?id=76443

        Reviewed by Darin Fisher.

        Update LayoutTestController to allow for retrieving the speech
        element's position used in a request.

        In Chromium this is handled by the MockWebSpeechInputController;
        adding stubs for the other implementations.

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputDumpRectCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setMockSpeechInputDumpRect):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp:
        (MockWebSpeechInputController::setDumpRect):
        (MockWebSpeechInputController::clearResults):
        (MockWebSpeechInputController::startRecognition):
        (MockWebSpeechInputController::MockWebSpeechInputController):
        (makeRectResult):
        (MockWebSpeechInputController::speechTaskFired):
        * DumpRenderTree/chromium/MockWebSpeechInputController.h:
        (MockWebSpeechInputController):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setMockSpeechInputDumpRect):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputDumpRect):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockSpeechInputDumpRect):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockSpeechInputDumpRect):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMockSpeechInputDumpRect):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMockSpeechInputDumpRect):

2012-01-31  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Add basic DRT/Efl implementation to support viewport test.
        https://bugs.webkit.org/show_bug.cgi?id=77320

        Reviewed by Andreas Kling.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::dumpConfigurationForViewport): call dumpConfigurationForViewport().

2012-01-31  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (WebKit2): event.keyCode is always zero when typing in Russian
        https://bugs.webkit.org/show_bug.cgi?id=77473
        <rdar://problem/10751357>

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::keyDown):
        Added a new special keyDown value to test this.

2012-01-31  Dirk Pranke  <dpranke@chromium.org>

        nrwt: fix the mock port to work with DriverProxy, reftests
        https://bugs.webkit.org/show_bug.cgi?id=77170

        Reviewed by Eric Seidel.

        The DryrunPort used for benchmarking and testing NRWT has been
        broken since we added the DriverProxy code. It isn't really
        needed any more, so I've removed it.

        The MockDRT port was also broken by DriverProxy, and moreover,
        never worked w/ reftests. Since we don't exercise this module in
        the unit tests, the code had also bitrotted some. I have cleaned
        it up and made it use DriverInput and DriverOutput for
        consistency.

        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        (DryRunPort.__init__):
        (DryRunPort):
        (DryRunPort.real_name):
        (DryRunPort.create_driver):
        (DryRunPort.driver_cmd_line):
        (DryRunPort._driver_class):
        (DryrunDriver):
        (DryrunDriver.run_test):
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        (MockDRTPort.create_driver):
        (MockChromiumDRT.run_one_test):

2012-01-31  Ojan Vafai  <ojan@chromium.org>

        run-webkit-tests calls out to webkit-build-directory twice
        https://bugs.webkit.org/show_bug.cgi?id=77248

        Reviewed by Dirk Pranke.

        * Scripts/webkit-build-directory:
        If called with no arguments, print out both the top-level directory and the 
        configuration directory

        * Scripts/webkitpy/layout_tests/port/config.py:
        (Config.build_directory):
        When called with no arguments, get and cache both the top-level and configuration directories.

        * Scripts/webkitpy/layout_tests/port/config_standalone.py:
        (main):
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        (ConfigTest.assert_configuration):
        (ConfigTest.test_build_directory.mock_webkit_build_directory):
        (ConfigTest.test_build_directory):
        (ConfigTest.test_default_configuration__notfound):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._build_path):
        Cache the build directory in the options object so that other users
        of the options object don't need to call out to webkit-build-directory.
        Also, properly support the existing --build-directory argument.

2012-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        Bump up the timeout for performance tests since DOM/DOMTable.html
        and Parser/html5-full-render.html are timing out on the bot.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):

2012-01-31  Ehsan Akhgari  <ehsan.akhgari@gmail.com>

        Fix the update_webgl_conformance_tests.py script in order to enable it
        to detect the SCM being used correctly.
        https://bugs.webkit.org/show_bug.cgi?id=77462

        Reviewed by Kenneth Russell.

        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py:
        (default_out_dir):

2012-01-31  Eric Seidel  <eric@webkit.org>

        webkit-patch apply-from-bug should work regardless of your CWD
        https://bugs.webkit.org/show_bug.cgi?id=77482

        Reviewed by Adam Barth.

        webkit-patch only ever works with patches made from the root
        directory.  We should pass the CWD to svn-apply in the case
        where we're running not from the webkit root.  I believe
        this used to work in the past and regressed.

        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout.apply_patch):
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CheckoutTest.test_apply_patch):

2012-01-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106302.
        http://trac.webkit.org/changeset/106302
        https://bugs.webkit.org/show_bug.cgi?id=77472

        Broke building DRT before running the tests (Requested by ojan
        on #webkit).

        * Scripts/webkit-build-directory:
        * Scripts/webkitpy/layout_tests/port/config.py:
        (Config.build_directory):
        * Scripts/webkitpy/layout_tests/port/config_standalone.py:
        (main):
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        (ConfigTest.assert_configuration):
        (ConfigTest.test_build_directory.mock_webkit_build_directory):
        (ConfigTest.test_build_directory):
        (ConfigTest.test_default_configuration__notfound):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._build_path):

2012-01-31  Antoine Labour  <piman@chromium.org>

        Merge WebGraphicsContext3D creation and initialization, and move it to
        WebViewClient.
        https://bugs.webkit.org/show_bug.cgi?id=76593

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (TestWebPlugin::TestWebPlugin):
        (TestWebPlugin::initialize):
        * DumpRenderTree/chromium/TestWebPlugin.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createGraphicsContext3D):
        (WebViewHost::createPlugin):
        * DumpRenderTree/chromium/WebViewHost.h:

2012-01-31  Gabor Rapcsanyi  <rgabor@webkit.org>

        [GTK] build-webkit warning.
        https://bugs.webkit.org/show_bug.cgi?id=77411

        Reviewed by Philippe Normand.

        * Scripts/webkitdirs.pm:
        (isCrossCompilation):

2012-01-31  Dan Bernstein  <mitz@apple.com>

        When generating derived sources, use the same compiler that is used to compile WebKitTestRunner.

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2012-01-31  Csaba Osztrogonác  <ossy@webkit.org>

        If the QTDIR environment variable is set, the build system fails to compile WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=77112

        Reviewed by Daniel Bates.

        * Scripts/webkitdirs.pm:
        (determineIsQt):

2012-01-31  Adam Roben  <aroben@apple.com>

        Only call -typingAttributes on WebViews, not WebHTMLViews

        Looks like this case was just missed in r105908.

        Fixes <http://webkit.org/b/77432> REGRESSION (r105908): WebKit1.InspectorBarTest is crashing

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/Tests/mac/InspectorBar.mm:
        (TestWebKitAPI::TEST): Call -typingAttributes on the WebView, just like we do 2 lines
        earlier.

2012-01-31  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] MiniBrowser: Show touch mocking indicators only when Ctrl is held down.
        https://bugs.webkit.org/show_bug.cgi?id=77221

        Reviewed by Kenneth Rohde Christiansen.

        This makes sure that the indicator isn't in the way when doing clicks or dealing with the rest of the UI.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::sendTouchEvent):

2012-01-26  Hans Wennborg  <hans@chromium.org>

        Speech Input: move MockSpeechInputClient into Chromium DumpRenderTree implementation
        https://bugs.webkit.org/show_bug.cgi?id=77083

        Reviewed by Darin Fisher.

        Add MockWebSpeechInputController which provides a mock implementation
        of the WebSpeechInputController interface, and use that in
        DumpRenderTree.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::addMockSpeechInputResult):
        * DumpRenderTree/chromium/LayoutTestController.h:
        ():
        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp: Added.
        (MockWebSpeechInputController::create):
        (MockWebSpeechInputController::addMockRecognitionResult):
        (MockWebSpeechInputController::clearResults):
        (MockWebSpeechInputController::startRecognition):
        (MockWebSpeechInputController::cancelRecognition):
        (MockWebSpeechInputController::stopRecording):
        (MockWebSpeechInputController::MockWebSpeechInputController):
        (MockWebSpeechInputController::speechTaskFired):
        (MockWebSpeechInputController::SpeechTask::SpeechTask):
        (MockWebSpeechInputController::SpeechTask::stop):
        (MockWebSpeechInputController::SpeechTask::runIfValid):
        * DumpRenderTree/chromium/MockWebSpeechInputController.h: Added.
        (WebKit):
        (MockWebSpeechInputController):
        (MockWebSpeechInputController::taskList):
        (SpeechTask):
        * DumpRenderTree/chromium/TestShell.cpp:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::speechInputController):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebKit):
        (WebViewHost::speechInputControllerMock):
        (WebViewHost):
        ():

2012-01-31  Hajime Morrita  <morrita@chromium.org>

        [PerformanceTests] Add landing html for Dromaeo dom-query test
        https://bugs.webkit.org/show_bug.cgi?id=77329

        Reviewed by Ryosuke Niwa.

        Added some more ignorable output patterns to allow warnings
        from a third party test suite.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner._should_ignore_line_in_parser_test_result):

2012-01-30  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Update download URLs to new domain.
        
        * waf/build/build_utils.py:
        (update_wx_deps):

2012-01-30  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Build fix, add JavaScriptCore/tools
        to the list of build directories.
        
        * waf/build/settings.py:

2012-01-30  Kentaro Hara  <haraken@chromium.org>

        REGRESSION(r105797): prepare-ChangeLog for a .cpp file can
        output an empty method name (i.e. "()")
        https://bugs.webkit.org/show_bug.cgi?id=77336

        Reviewed by Darin Adler.

        r105797 tried to detect a change outside methods, but it causes a bug that
        prepare-ChangeLog can output an empty method name, like this:

            * foo/bar/baz.cpp:
            (method1):
            ():
            (method2):

        This is because the cpp parser in prepare-ChangeLog cannot distinguish
        '{' as the beginning of a method with '{' as the beginning of an array definition
        at the top level.

            int a[] = { 1, 2, 3 };  // This '{' is the beginning of an array definition.

            void func() { // This '{' is the beginning of a method.
                ...;
            }

        This patch fixes prepare-ChangeLog so that it skips an array definition at the top level.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_cpp): Modified as described above.
        (generateFunctionLists): As a hack, modified so that prepare-ChangeLog does not output
        an empty method name. Ideally this should not happen but may happen, since the
        parsers are not perfect.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests.cpp: Added test cases.
        (NameSpace7):
        (NameSpace8):
        (Class109):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests-expected.txt:

2012-01-30  Ojan Vafai  <ojan@chromium.org>

        run-webkit-tests calls out to webkit-build-directory twice
        https://bugs.webkit.org/show_bug.cgi?id=77248

        Reviewed by Dirk Pranke.

        This reduces to calls to webkit-build-directory to one call and
        saves 500ms for run-webkit-tests over a single file.

        * Scripts/webkit-build-directory:
        If called with no arguments, print out both the top-level directory and the 
        configuration directory.

        * Scripts/webkit-build-directory:
        * Scripts/webkitpy/layout_tests/port/config.py:
        (Config.build_directory):
        When called with no arguments, get and cache both the top-level and configuration directories.

        * Scripts/webkitpy/layout_tests/port/config_standalone.py:
        (main):
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        (ConfigTest.assert_configuration):
        (ConfigTest.test_build_directory.mock_webkit_build_directory):
        (ConfigTest.test_build_directory):
        (ConfigTest.test_default_configuration__notfound):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._build_path):
        Cache the root directory in the options object so that other users
        of the options object don't need to call out to webkit-build-directory.

2012-01-30  Ojan Vafai  <ojan@chromium.org>

        Parsing test_expecations.txt + Skipped lists takes too long
        https://bugs.webkit.org/show_bug.cgi?id=77059

        Reviewed by Dirk Pranke.

        This saves ~100ms on the Apple Mac port.
        -memoize a bunch of path methods.
        -Avoid doing multiple disk accesses per line.
        -Parse the skipped list directly instead of turning it into a test_expecations.txt
        formatting string and parsing that.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser):
        (TestExpectationParser.expectation_for_skipped_test):
        (TestExpectationParser._parse_line):
        (TestExpectationParser._collect_matching_tests):
        (TestExpectations.__init__):
        (TestExpectations._add_skipped_tests):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_add_skipped_tests):
        (test_add_skipped_tests_duplicate):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port):
        (Port.test_isfile):
        (Port.normalize_test_name):
        (Port.layout_tests_dir):
        (Port.abspath_for_test):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2012-01-30  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed. Add myself to CSS, GStreamer, Qt related watchlists.
        
        * Scripts/webkitpy/common/config/watchlist:

2012-01-30  Gavin Barraclough  <barraclough@apple.com>

        Unreviewed build fix following bug#76855

        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:
        ():
        (TestWebKitAPI::TEST_F):

2012-01-26  No'am Rosenthal  <noam.rosenthal@nokia.com> and Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] WKTR: Use a software rendering pipiline when running tests.
        https://bugs.webkit.org/show_bug.cgi?id=76708

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::WrapperWindow):
        (WTR::PlatformWebView::PlatformWebView): Use software rendering of layers since the wrapping QQuickView isn't shown.

2012-01-30  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Store build config immediately instead of waiting for a successfull build

        Otherwise we will not pick up changes to the config if the build is aborted,
        for example due to build errors or if the user pressed Ctrl+Z. We now write
        the new config before starting a build, but still defer to write the SVN
        revision once the build completes successfully.

        Reviewed by Ossy.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-01-30  Alexander Færøy  <ahf@0x90.dk>

        [Qt] Add "New Window" button to the Qt MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=77281

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/icons/plus.png: Added.
        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-01-30  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed rolling out r106222.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.handle_test_list):
        * Scripts/webkitpy/layout_tests/models/test_input.py:
        (TestInput.__init__):
        * 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_repeat_each):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::setIsPixelTest):

2012-01-30  Hans Wennborg  <hans@chromium.org>

        Unreviewed, rolling out r106219.
        http://trac.webkit.org/changeset/106219
        https://bugs.webkit.org/show_bug.cgi?id=77083

        This broke Chromium's test_shell.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::addMockSpeechInputResult):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (WebKit):
        (LayoutTestController):
        ():
        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp: Removed.
        * DumpRenderTree/chromium/MockWebSpeechInputController.h: Removed.
        * DumpRenderTree/chromium/TestShell.cpp:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::speechInputController):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebKit):
        (WebViewHost::speechInputControllerMock):
        (WebViewHost):
        ():

2012-01-26  Hans Wennborg  <hans@chromium.org>

        Speech Input: move MockSpeechInputClient into Chromium DumpRenderTree implementation
        https://bugs.webkit.org/show_bug.cgi?id=77083

        Reviewed by Darin Fisher.

        Add MockWebSpeechInputController which provides a mock implementation
        of the WebSpeechInputController interface, and use that in
        DumpRenderTree.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::addMockSpeechInputResult):
        * DumpRenderTree/chromium/LayoutTestController.h:
        ():
        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp: Added.
        (MockWebSpeechInputController::create):
        (MockWebSpeechInputController::addMockRecognitionResult):
        (MockWebSpeechInputController::clearResults):
        (MockWebSpeechInputController::startRecognition):
        (MockWebSpeechInputController::cancelRecognition):
        (MockWebSpeechInputController::stopRecording):
        (MockWebSpeechInputController::MockWebSpeechInputController):
        (MockWebSpeechInputController::speechTaskFired):
        (MockWebSpeechInputController::SpeechTask::SpeechTask):
        (MockWebSpeechInputController::SpeechTask::stop):
        (MockWebSpeechInputController::SpeechTask::runIfValid):
        * DumpRenderTree/chromium/MockWebSpeechInputController.h: Added.
        (WebKit):
        (MockWebSpeechInputController):
        (MockWebSpeechInputController::taskList):
        (SpeechTask):
        * DumpRenderTree/chromium/TestShell.cpp:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::speechInputController):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebKit):
        (WebViewHost::speechInputControllerMock):
        (WebViewHost):
        ():

2012-01-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106109.
        http://trac.webkit.org/changeset/106109
        https://bugs.webkit.org/show_bug.cgi?id=77302

        It made tests crash (Requested by Ossy_weekend on #webkit).

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::WrapperWindow):
        (WTR::PlatformWebView::PlatformWebView):

2012-01-28  Nico Weber  <thakis@chromium.org>

        [chromium] Add support for building standalone webkit/chromium checkouts with ninja.
        https://bugs.webkit.org/show_bug.cgi?id=77243

        Reviewed by Adam Barth.

        * Scripts/update-webkit:
        * Scripts/webkitdirs.pm:
        (isChromiumNinja):
        (determineIsChromiumNinja):
        (buildChromiumNinja):
        (buildChromium):

2012-01-27  Kentaro Hara  <haraken@chromium.org>

        The cpp parser of prepare-ChangeLog treats if(...) {} as a method
        https://bugs.webkit.org/show_bug.cgi?id=77241

        Reviewed by Ryosuke Niwa.

        The cpp parser of prepare-ChangeLog is wrong, and an inner {} block
        in a method in some namespace or class is treated as a method.
        This patch fixes the bug.

            class C {
                void func()
                {
                    if (1) {    // This should not be treated as a method.
                    }
                }
            };

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_cpp):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests-expected.txt:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests.cpp:
        (Class108):
        (Class108::func35):

2012-01-27  Enrica Casucci  <enrica@apple.com>

        Followup to http://trac.webkit.org/changeset/106171.
        Dan Bernstein pointed out correctly that I should
        have used copy instead of initWithString.

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        (-[LocalPasteboard initWithName:]):

2012-01-27  Enrica Casucci  <enrica@apple.com>

        DRT pasteboard object should return the correct pasteboard name.
        https://bugs.webkit.org/show_bug.cgi?id=77260
        
        Currently the name property always returns nil.
        Adding a memeber variable to store the pasteboard name and return its
        value from the name method instead of returning nil always.

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        (+[DumpRenderTreePasteboard _pasteboardWithName:]):
        (-[LocalPasteboard initWithName:]):
        (-[LocalPasteboard name]):

2012-01-27  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WK2] Implement the policy client
        https://bugs.webkit.org/show_bug.cgi?id=76343

        Reviewed by Gustavo Noronha Silva.

        * gtk/generate-gtkdoc:
        (get_webkit2_options): Update the list of skipped source files to include all clients.

2012-01-27  Ada Chan  <adachan@apple.com>

        Add test for WKBundleFrameGetParentFrame().
        https://bugs.webkit.org/show_bug.cgi?id=77161

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add ParentFrame.cpp and ParentFrame_Bundle.cpp.
        * TestWebKitAPI/Tests/WebKit2/ParentFrame.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle): Get the check result from the injected bundle.
        (TestWebKitAPI::setInjectedBundleClient):
        (TestWebKitAPI::TEST): Load simple-iframe.html and then wait for the injected bundle to post result.
        Make sure the check is successful.
        * TestWebKitAPI/Tests/WebKit2/ParentFrame_Bundle.cpp: Added.
        (TestWebKitAPI):
        (ParentFrameTest):
        (TestWebKitAPI::ParentFrameTest::ParentFrameTest):
        (TestWebKitAPI::didFinishLoadForFrame): If the frame is a subframe, store it off for checking later.
        If the frame is the main frame, check whether it's indeed the subframe's parent frame and post the result
        to the test controller.
        (TestWebKitAPI::ParentFrameTest::didCreatePage): Set the page loader client on this page.

2012-01-27  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] DumpRenderTree lacks --no-timeout command line option
        https://bugs.webkit.org/show_bug.cgi?id=77196

        Reviewed by Martin Robinson.

        Add the --no-timeout command line option and reorganize
        watchdog code to make running DumpRenderTree without
        timeout possible.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (setWaitToDumpWatchdog):
        (shouldSetWaitToDumpWatchdog):
        (initializeGlobalsFromCommandLineOptions):
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (waitToDumpWatchdogFired):
        (LayoutTestController::setWaitToDump):

2012-01-27  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Enable the automatic touch->mouse mocking on the new Qt5 hashes
        https://bugs.webkit.org/show_bug.cgi?id=77122

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication):

2012-01-27  Zeno Albisser  <zeno@webkit.org>

        [Qt][Mac] Build fails after adding ICU support (r105997).
        https://bugs.webkit.org/show_bug.cgi?id=77118

        Define WTF_USE_ICU_UNICODE if we are on mac.

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/features.prf:

2012-01-27  Roland Takacs  <takacs.roland@stud.u-szeged.hu>

        Update committers.py with new contributors.
        https://bugs.webkit.org/show_bug.cgi?id=77207

        I added six new contributors into committers.py:

        - Adam Kallai
        - Balazs Ankes
        - Janos Badics
        - Nandor Huszka
        - Roland Takacs
        - Szilard Ledan-Muntean

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

2012-01-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Add Vsevolod Vlasov to reviewers list.

        Reviewed by Pavel Feldman.

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

2012-01-26  No'am Rosenthal  <noam.rosenthal@nokia.com> and Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] WKTR: Use a software rendering pipiline when running tests.
        https://bugs.webkit.org/show_bug.cgi?id=76708

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::WrapperWindow):
        (WTR::PlatformWebView::PlatformWebView): Use software rendering of layers since the wrapping QQuickView isn't shown.

2012-01-26  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Build fix, add WebCore/testing/js
        to the list of source directories we build.

        * waf/build/settings.py:

2012-01-26  Filip Pizlo  <fpizlo@apple.com>

        Tools/Scripts/commit-log-editor is broken due to $_ getting clobbered
        https://bugs.webkit.org/show_bug.cgi?id=77177

        Reviewed by Jon Honeycutt.

        * Scripts/commit-log-editor:

2012-01-26  Ojan Vafai  <ojan@chromium.org>

        Decrease sleep time when killing server_process on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=77169

        Reviewed by Eric Seidel.

        This shaves another ~70ms off single test runtime.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess.stop):

2012-01-26  Ojan Vafai  <ojan@chromium.org>

        Remove builder name so http://trac.webkit.org/changeset/106035 actually works.
        https://bugs.webkit.org/show_bug.cgi?id=77164

        Reviewed by Dirk Pranke.

        http://trac.webkit.org/changeset/106035 depends on builder_name being
        falsey by default. There's other code that requires it to be iterable
        by default. So, make it be the empty string.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-01-26  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-test should include relative file paths in test names
        https://bugs.webkit.org/show_bug.cgi?id=77144

        Reviewed by Adam Barth.

        Include all directory names in the test name separated by "/".
        e.g. Bindings/event-target-wrapper.html translates to Bindings/event-target-wrapper

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner._process_parser_test_result):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_test_set_with_json_output):
        (test_run_test_set_with_json_source):

2012-01-26  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: re-land cleanup of test scaffolding
        https://bugs.webkit.org/show_bug.cgi?id=77153

        Reviewed by Eric Seidel.

        This is an attempt to reland the change in bug 76973 / 
        r105935. My earlier attempt to manipulate PYTHONPATH
        seems to only work some of the time, for reasons that
        elude me. Directly adding Tools/Scripts to sys.path from
        inside the test script appears to work (more?) reliably.

        Also, it seemed like the files didn't actually get deleted
        the last time; I don't know why.

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (command_line):
        (ExecutiveTest):
        (ExecutiveTest.test_run_command_args_type):
        (ExecutiveTest.test_run_command_with_unicode):
        (ExecutiveTest.test_running_pids):
        (main):
        * Scripts/webkitpy/common/system/fileutils.py: Removed.
        * Scripts/webkitpy/test/cat.py: Removed.
        * Scripts/webkitpy/test/cat_unittest.py: Removed.
        * Scripts/webkitpy/test/echo.py: Removed.
        * Scripts/webkitpy/test/echo_unittest.py: Removed.

2012-01-26  Ojan Vafai  <ojan@chromium.org>

        run-webkit-tests calls "nm" when it doesn't need to
        https://bugs.webkit.org/show_bug.cgi?id=77143

        Reviewed by Dirk Pranke.

        If we are not running any test that can be skipped by checking
        the DRT feature list or looking at the list of symbols, avoid calling
        out to DRT or calling "nm".

        This saves ~700ms on my Mac Pro. In cases where you still have to call out
        to "nm" it's only a couple ms slower.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.skipped_tests):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._should_check_for_missing_features):
        (WebKitPort):
        (WebKitPort._should_check_for_missing_symbols):
        (WebKitPort._skipped_tests_for_unsupported_features):
        (WebKitPort.skipped_layout_tests):
        (WebKitPort.skipped_tests):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitPortTest.test_skipped_directories_for_symbols):
        (test_skipped_directories_for_features):
        (test_skipped_directories_for_features_no_matching_tests_in_test_list):
        (test_skipped_layout_tests):

2012-01-26  Benjamin Poulain  <bpoulain@apple.com>

        Support a suffix on ChangeLog filenames based on a configuration file
        https://bugs.webkit.org/show_bug.cgi?id=76956

        Reviewed by Kentaro Hara.

        Modify the tools used to generate, edit and resolve ChangeLogs to support
        the addition of a suffix to the ChangeLog filename.

        This patch makes it easier to support alternate ChangeLog files in branches.

        * Scripts/VCSUtils.pm:
        (changeLogSuffix):
        (changeLogFileName):
        * Scripts/commit-log-editor:
        * Scripts/prepare-ChangeLog:
        (getLatestChangeLogs):
        (generateNewChangeLogs):
        (generateFileList):
        * Scripts/resolve-ChangeLogs:
        (findChangeLog):

2012-01-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106038.
        http://trac.webkit.org/changeset/106038
        https://bugs.webkit.org/show_bug.cgi?id=77142

        Caused a bunch of skipped tests to not be skipped. (Requested
        by ojan on #webkit).

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser):
        (TestExpectationParser.parse):
        (TestExpectationParser._parse_line):
        (TestExpectationParser._collect_matching_tests):
        (TestExpectations.__init__):
        (TestExpectations._add_skipped_tests):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.test_dirs):
        (Port.normalize_test_name):
        (Port.update_baseline):
        (Port.layout_tests_dir):
        (Port.relative_perf_test_filename):
        (Port.abspath_for_test):

2012-01-25  Ojan Vafai  <ojan@chromium.org>

        Parsing test_expecations.txt + Skipped lists takes too long
        https://bugs.webkit.org/show_bug.cgi?id=77059

        Reviewed by Dirk Pranke.

        This saves ~100ms on the Apple Mac port.
        -memoize a bunch of path methods.
        -Avoid doing multiple disk accesses per line.
        -Parse the skipped list directly instead of turning it into a test_expecations.txt
        formatting string and parsing that.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser):
        (TestExpectationParser.parse_skipped_tests):
        (TestExpectationParser._parse_line):
        (TestExpectationParser._collect_matching_tests):
        (TestExpectations.__init__):
        (TestExpectations._add_skipped_tests):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port):
        (Port.test_isfile):
        (Port.normalize_test_name):
        (Port.layout_tests_dir):
        (Port.abspath_for_test):

2012-01-25  Ojan Vafai  <ojan@chromium.org>

        Only store the SVN revision in the summarized results if we're on a builder
        https://bugs.webkit.org/show_bug.cgi?id=76976

        Reviewed by Dirk Pranke.

        This shaves another ~130ms off the single test run-webkit-tests runtime.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (summarize_results):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ResultSummaryTest.get_result):
        (ResultSummaryTest):
        (ResultSummaryTest.get_result_summary):
        (ResultSummaryTest.get_unexpected_results):
        (ResultSummaryTest.test_no_svn_revision):
        (ResultSummaryTest.test_svn_revision):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.use_trac_links_in_results_html):

2012-01-26  Luciano Wolf  <luciano.wolf@openbossa.org>

        [Qt][WK2] fast/loader tests failed after r94178
        https://bugs.webkit.org/show_bug.cgi?id=67388

        Reviewed by Simon Hausmann.

        Applying the same fix used for Qt-WebKit1 from bug #67254 -
        [Qt][DRT] Normalize file:///tmp/LayoutTests in LayoutTestController::pathToLocalResource()
        https://bugs.webkit.org/show_bug.cgi?id=67254
        Translate file:///tmp/LayoutTests/* urls into the repository LayoutTests directory, which is
        derived from the running location of DumpRenderTree binary.

        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp:
        (WTR::LayoutTestController::pathToLocalResource):

2012-01-26  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Implement overridePreference for boolean preferences in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=77033

        Reviewed by Alexey Proskuryakov.

        For now overridePreference supports boolean values.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setXSSAuditorEnabled):
        (WTR::LayoutTestController::overridePreference):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Reset the overrides
        explicitly and properly disable the use of PageCache when resetting the
        state. Tests that use PageCache can now enable it via overridePreference.

2012-01-26  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Support opening multiple URL's from the command line in the Qt MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=77100

        Reviewed by Simon Hausmann.

        This patch makes the MiniBrowser read multiple URL's from the command
        line such that there will be one browser window opened for each URL.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):

2012-01-26  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] The Qt MiniBrowser crashes when given multiple URL's
        https://bugs.webkit.org/show_bug.cgi?id=77009

        Reviewed by Simon Hausmann.

        This patch fixes a crash in BrowserWindow::newWindow() where a
        BrowserWindow-object is constructed with a 0 pointer as the
        WindowOptions parameter which leads to a crash.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::newWindow):
        * MiniBrowser/qt/BrowserWindow.h:

2012-01-26  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt] Use ICU if available
        https://bugs.webkit.org/show_bug.cgi?id=76821

        Reviewed by Simon Hausmann.

        Adding unicode defines for a Qt 5 based build.

        * qmake/mkspecs/features/features.prf:

2012-01-26  Nándor Huszka  <huszka.nandor@stud.u-szeged.hu>

        [WK2] WebKitTestRunner needs layoutTestController.setGeolocationPermission
        https://bugs.webkit.org/show_bug.cgi?id=42545

        Reviewed by Zoltan Herczeg.

        Implement the setGeolocationPermission method.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setGeolocationPermission):
        (WTR):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):

2012-01-26  Balazs Kelemen  <kbalazs@webkit.org>

        [NRWT] Support --ignore-metrics
        https://bugs.webkit.org/show_bug.cgi?id=76278

        Reviewed by Tony Chang.

        Port the feature from ORWT.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._run_compare_test):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverOutput):
        (DriverOutput.strip_metrics):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverOutputTest):
        (DriverOutputTest.test_strip_metrics):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        (parse_args):

2012-01-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105935 and r105954.
        http://trac.webkit.org/changeset/105935
        http://trac.webkit.org/changeset/105954
        https://bugs.webkit.org/show_bug.cgi?id=77080

        test-webkitpy is still broken (Requested by abarth on
        #webkit).

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (never_ending_command):
        (ExecutiveTest.test_run_command_args_type):
        (ExecutiveTest.test_run_command_with_unicode):
        (ExecutiveTest.test_running_pids):
        * Scripts/webkitpy/common/system/fileutils.py:
        (make_stdout_binary):
        * Scripts/webkitpy/test/cat.py:
        (command_arguments):
        (main):
        * Scripts/webkitpy/test/cat_unittest.py:
        (CatTest):
        (CatTest.assert_cat):
        (CatTest.test_basic):
        (CatTest.test_no_newline):
        (CatTest.test_unicode):
        (CatTest.test_as_command):
        * Scripts/webkitpy/test/echo.py:
        (command_arguments):
        (main):
        * Scripts/webkitpy/test/echo_unittest.py:
        (EchoTest):
        (EchoTest.test_basic):
        (EchoTest.test_no_newline):
        (EchoTest.test_unicode):
        (EchoTest.test_argument_order):
        (EchoTest.test_empty_arguments):
        (EchoTest.test_no_arguments):
        (EchoTest.test_as_command):

2012-01-26  Gabor Rapcsanyi  <rgabor@webkit.org>

        [GTK] Detect cross-compilation in webkitdirs.pm to not generate gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=76138

        Reviewed by Martin Robinson.

        * Scripts/webkitdirs.pm:
        (isCrossCompilation):
        (buildAutotoolsProject):

2012-01-25  Adam Barth  <abarth@webkit.org>

        Kentaro is a reviewer now.  Yay!

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

2012-01-25  Dirk Pranke  <dpranke@chromium.org>

        nrwt: running w/ no arguments fails
        https://bugs.webkit.org/show_bug.cgi?id=77064

        Unreviewed, build fix.

        This change fixes a regression introduced in r105944
        where running without --platform <foo> or one of the other
        platform switches would cause a null deref :(.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main):

2012-01-25  Eric Seidel  <eric@webkit.org>

        Automatically CC someone from Apple on any changes to Obj-C public API
        https://bugs.webkit.org/show_bug.cgi?id=77053

        Reviewed by Timothy Hatcher.

        This has long been de-facto practice, seems now that we have
        fancy watchlist support, we should just make the tools
        do this automatically.

        * Scripts/webkitpy/common/config/watchlist:

2012-01-25  Antoine Labour  <piman@chromium.org>

        Updating status in committers.py.

        Unreviewed.

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

2012-01-25  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: executive_unittest fails if PYTHONPATH isn't set
        https://bugs.webkit.org/show_bug.cgi?id=77058

        Reviewed by Eric Seidel.

        r105935 broke executive_unittest by changing which script we
        were running and not ensuring that the PYTHONPATH was set up
        properly.

        This change also fixes a regression introduced recently where
        test-webkitpy wasn't figuring out the path to Tools/Scripts
        right, either (so running ./test-webkitpy would fail).

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (script_dir):
        (ExecutiveTest.setUp):
        (ExecutiveTest):
        (ExecutiveTest.tearDown):

2012-01-25  Adam Barth  <abarth@webkit.org>

        Disable tests on the mac-ews while we sort out hte stability issues.

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

2012-01-23  Dirk Pranke  <dpranke@chromium.org>

        investigate use of 'mac' and 'win' as fully-specified port names for the apple ports
        https://bugs.webkit.org/show_bug.cgi?id=76475

        Reviewed by Eric Seidel.

        This patch cleans up the internal usage of port names for the
        Apple mac and Apple win ports so that 'mac' and 'win are never
        considered "fully specified" port names: they are still legal
        input to the PortFactory.get() routine, but only if run on the given
        platform (i.e. trying to PortFactory.get('mac') on windows or
        linux will return an error, since we don't know which version of
        the port is desired.

        This also cleans up handling of the webkit2 variants, so that
        the full port names consistently follow the
        <operating_system>-<version>[-<wk2>] convention.

        Lastly this patch adds some assertions and removes some
        try/catch logic to catch more programming and usage errors;
        previously mac-tiger might've been allowed -- and it would've
        translated into using just the baselines in platform/mac -- but
        now it should fail.

        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.determine_full_port_name):
        (ApplePort.__init__):
        (ApplePort):
        (ApplePort._port_name_with_version):
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.test_mac):
        (FactoryTest.test_win):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacTest.test_versions):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinTest.test_versions):

2012-01-25  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: print nicer errors while linting expectations files, remove redundant tests
        https://bugs.webkit.org/show_bug.cgi?id=76955

        Reviewed by Adam Barth.

        This change cleans up the errors that are printed so that the
        are more "quickfix" compatible (path:lineno).

        Also, there were a bunch of redundant tests between
        layout_tests.models.test_expectations_unittest and
        style.checkers.test_expectations_unittest. The latter should
        just expect the former to do most of the testing.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser._parse_modifiers):
        (TestExpectations._report_errors):
        (TestExpectations._add_skipped_tests):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_parse_error_nonfatal):
        (SemanticTests.test_bad_bugid):
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.__init__):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.assert_lines_lint):
        (TestExpectationsTestCase.test_valid_expectations):
        (TestExpectationsTestCase.test_invalid_expectations):
        (TestExpectationsTestCase.test_tab):

2012-01-25  Eric Seidel  <eric@webkit.org>

        webkit-patch apply-* should always continue after failures
        https://bugs.webkit.org/show_bug.cgi?id=77057

        Reviewed by Adam Barth.

        As far as I can tell there is only one potential drawback to always
        forcing: that if you're somehow in the wrong directory it will create new
        directories for new files.  Since webkit-patch always cd's to the root
        it seems that's not a drawback.  The drawback of not using --force for
        svn-apply, is that it will stop after the first failure, which is rarely
        (if ever) the desired behavior.  This just removes the force option
        (which was strangely hidden behind --non-interactive).  This should
        make for a better user experiance.

        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout.apply_patch):
        * Scripts/webkitpy/common/checkout/checkout_mock.py:
        (MockCheckout.apply_patch):
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CheckoutTest.test_chromium_deps):
        (CheckoutTest):
        (CheckoutTest.test_apply_patch):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (DownloadCommandsTest._default_options):
        * Scripts/webkitpy/tool/steps/applypatch.py:
        (ApplyPatch.options):
        (ApplyPatch.run):
        * Scripts/webkitpy/tool/steps/options.py:
        (Options):

2012-01-25  Dirk Pranke  <dpranke@chromium.org>

        nrwt: should be able to run --platform test interactively
        https://bugs.webkit.org/show_bug.cgi?id=76959

        Reviewed by Adam Barth.

        As part of refactoring the Port interfaces, in r103254 I made
        passing a Host object to the Port mandatory; previously TestPort
        objects would create their own (mock) hosts. However,
        new-run-webkit-tests always passed a real Host, not a MockHost,
        and so you couldn't run new-run-webkit-tests --platform test
        interactively to debug test failures.

        This change fixes that by creating a MockHost instead of a real
        host if you say --platform test*.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main):

2012-01-25  Dirk Pranke  <dpranke@chromium.org>

        run-webkit-tests --lint-test-files should lint all the ports by default
        https://bugs.webkit.org/show_bug.cgi?id=76749

        Reviewed by Ojan Vafai.

        Currently run-webkit-tests --lint-test-files will only lint the
        test_expectations for the single port determined by the command
        line options. This is not obvious and can produce unintended results
        if you want to lint the chromium port (probably the normal case
        for using --lint-test-files) but don't specify a port name or
        --chromium.

        I think we should probably lint *all* of the ports if no port
        name is supplied. This change implements that, and also moves
        the linting logic out of the Manager class, since this really
        has nothing to do with Managers. It has little to do with
        run-webkit-tests, but splitting it into a different script would
        introduce compatibility issues. It might make sense to do that
        anyway, in a separate patch and combining that with cleaning up
        the style checker to share more code.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._strip_test_dir_prefix):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (lint):
        (run):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (LintTest.test_all_configurations): added.
        (LintTest.test_lint_test_files): added.
        (LintTest.test_lint_test_files__errors): added.
        (MainTest.test_lint_test_files): removed.
        (MainTest.test_lint_test_files__errors): removed.

2012-01-25  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up a bunch of test scaffolding
        https://bugs.webkit.org/show_bug.cgi?id=76973

        Reviewed by Eric Seidel.

        There were several helper modules in the webkitpy.test package
        that appear to only be used by executive_unittest.py. I am
        rolling them all into that file to make that clearer.

        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_run_command_args_type):
        (ExecutiveTest.test_run_command_with_unicode):
        (ExecutiveTest.test_running_pids):
        (command_line):
        (main):
        * Scripts/webkitpy/common/system/fileutils.py: Removed.
        * Scripts/webkitpy/test/cat.py: Removed.
        * Scripts/webkitpy/test/cat_unittest.py: Removed.
        * Scripts/webkitpy/test/echo.py: Removed.
        * Scripts/webkitpy/test/echo_unittest.py: Removed.

2012-01-25  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up a bunch of test scaffolding
        https://bugs.webkit.org/show_bug.cgi?id=76973

        Reviewed by Eric Seidel.

        There were several helper modules in the webkitpy.test package
        that appear to only be used by executive_unittest.py. I am
        rolling them all into that file to make that clearer.

        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_run_command_args_type):
        (ExecutiveTest.test_run_command_with_unicode):
        (ExecutiveTest.test_running_pids):
        (command_line):
        (main):
        * Scripts/webkitpy/common/system/fileutils.py: Removed.
        * Scripts/webkitpy/test/cat.py: Removed.
        * Scripts/webkitpy/test/cat_unittest.py: Removed.
        * Scripts/webkitpy/test/echo.py: Removed.
        * Scripts/webkitpy/test/echo_unittest.py: Removed.

2012-01-25  Eric Seidel  <eric@webkit.org>

        Remove Python 2.5 support from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=71593

        Reviewed by Adam Barth.

        Just removing support from this one core file.
        I'll commit the rest of the (large) change once we've
        gone 24 hours and seen that no bots have exploded.
        We can roll out this one change if we break bots
        and then roll in the rest once those bots are fixed.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.cpu_count):

2012-01-25  Hajime Morita  <morrita@google.com>

        ENABLE_SHADOW_DOM should be available via build-webkit --shadow-dom
        https://bugs.webkit.org/show_bug.cgi?id=76863

        Reviewed by Dimitri Glazkov.

        Added a feature flag.

        * Scripts/build-webkit:
        * qmake/mkspecs/features/features.prf:

2012-01-25  Martin Robinson  <mrobinson@igalia.com>

        [WK2] Navigation events not triggered by a mouse event claim to be triggered by the left mouse button during policy decisions
        https://bugs.webkit.org/show_bug.cgi?id=76344

        Reviewed by Sam Weinig.

        Add a test verifying that the mouse button during policy decisions for
        events not triggered by mouse events is NoButton.

        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::decidePolicyForNavigationAction): Added test.
        (TestWebKitAPI::decidePolicyForNewWindowAction): Added test.

2012-01-25  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should timeout sooner
        https://bugs.webkit.org/show_bug.cgi?id=77026

        Reviewed by Adam Barth.

        Bump off the timeout from 10 minutes to 4 minutes.

        Also use float instead of str in test result values to compress the size of json files bots upload.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner._process_chromium_style_test_result):
        (PerfTestsRunner._process_parser_test_result):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_test_set_for_parser_tests):
        (test_run_test_set_with_json_output):
        (test_run_test_set_with_json_source):

2012-01-25  Enrica Casucci  <enrica@apple.com>

        WebView should implement typingAttributes methods to work correctly with the Inspector bar in Mail.
        https://bugs.webkit.org/show_bug.cgi?id=76951
        <rdar://problem/9325158>

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/mac/InspectorBar.mm: Modified to reflect the changes to WebView
        and WebHTMLView.
        (TestWebKitAPI::TEST):

2012-01-23  MORITA Hajime  <morrita@google.com>

        [Refactoring][Internals] Should have InternalSettings
        https://bugs.webkit.org/show_bug.cgi?id=76424

        Reviewed by Kent Tamura.

        * GNUmakefile.am: Added so new files.

2012-01-25  Takashi Toyoshima  <toyoshim@chromium.org>

        webkitpy: new-run-webkit-websocket is broken
        https://bugs.webkit.org/show_bug.cgi?id=76999

        Reviewed by Dirk Pranke.

        r105674 broke new-run-webkit-websocket, since options.chromium
        doesn't exist any more. new-run-webkit-httpd was also broken
        and already fixed at r105835.
        * Scripts/new-run-webkit-websocketserver:
        (main):

2012-01-25  Nándor Huszka  <huszka.nandor@stud.u-szeged.hu>

        [WK2] WebKitTestRunner needs layoutTestController.setPopupBlockingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=63458

        Reviewed by Adam Roben.

        Implement the setPopupBlockingEnabled method.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setPopupBlockingEnabled):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2012-01-24  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Cleanup testfonts handling
        https://bugs.webkit.org/show_bug.cgi?id=76068

        Reviewed by Simon Hausmann.

        Factor test font initialization into it's own file  so test
        font users can share the implementation by adding the file
        to their build.
        Use fonts.conf from the test font directory to not require the
        current directory to be the WebKit root.
        Fix the -use-test-fonts option of QtTestBrowser by initializing
        the fonts earlier, before it is too late (namely before calling
        show on the main window).

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/QtInitializeTestFonts.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp.
        (WebKit::initializeTestFonts):
        * DumpRenderTree/qt/QtInitializeTestFonts.h: Added.
        * DumpRenderTree/qt/fonts.conf: Removed. No need for this since
        we will use the one from the test fonts directory.
        * DumpRenderTree/qt/main.cpp:
        (main): Fix the ifdefs to make it clear that the code to
        set up the Dpi has not been ported to Qt5 yet.
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (launcherMain):
        (LauncherApplication::handleUserOptions):
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts): Remove the code to set up the Dpi
        because it does not work with Qt5.

2012-01-25  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] build-webkit --qt requires a git-svn or SVN checkout.

        Reviewed by Tor Arne Vestø.

        Don't require it by making svnRevisionForDirectory return "unknown"
        instead of bailing out with an error.

        * Scripts/VCSUtils.pm:
        (svnRevisionForDirectory):

2012-01-25  Adam Barth  <abarth@webkit.org>

        Temporarily disable running the unit tests on the Chromium EWS.  These
        tests don't work properly (see
        https://bugs.webkit.org/show_bug.cgi?id=76979) and are currently
        blocking the EWS.

        * Scripts/webkitpy/common/config/ports.py:
        (ChromiumPort):

2012-01-25  Adam Barth  <abarth@webkit.org>

        Update results.html version of PixelZoomer
        https://bugs.webkit.org/show_bug.cgi?id=76965

        Reviewed by Ojan Vafai.

        Improve readability as suggested by Ojan.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/pixelzoomer.js:

2012-01-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Page clients don't need to be GObjects anymore in WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=76899

        Reviewed by Martin Robinson.

        * gtk/generate-gtkdoc:
        (get_webkit2_options): WebKitWebLoaderClient has been renamed to
        WebKitLoaderClient.

2012-01-24  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. Trigger Chromium Mac Release (Perf) on new commits.

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

2012-01-23  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit needs public performance tests running on public bots
        https://bugs.webkit.org/show_bug.cgi?id=10266

        Reviewed by Adam Barth.

        Completes the initial implementation of WebKit Perf bots. Add a build step for run-perf-test
        and make google-mac-4 run it, and upload the results to webkit-perf.webkit.org.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunAndUploadPerfTests):
        (RunAndUploadPerfTests.start):
        (UploadPerfTestResults):
        (BuildAndPerfTestFactory):
        (BuildAndPerfTestFactory.__init__):

2012-01-24  Ojan Vafai  <ojan@chromium.org>

        Initializing the browser property of the Bugzilla class takes too long
        https://bugs.webkit.org/show_bug.cgi?id=76960

        Reviewed by Adam Barth.

        Lazily initialize it. This saves ~150ms on a no-op run-webkit-tests call
        on my Mac Pro.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.__init__):
        (Bugzilla._get_browser):
        (Bugzilla):
        (Bugzilla._set_browser):

2012-01-24  Mark Rowe  <mrowe@apple.com>

        Death to JavaScriptGlue.

        Rubber-stamped by Geoffrey Garen.

        * BuildSlaveSupport/build-launcher-app:
        (copyNightlyLauncher):
        * Scripts/build-webkit:
        * Scripts/do-file-rename:
        * Scripts/do-webcore-rename:
        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build):
        * Scripts/webkitpy/common/config/build_unittest.py: Update the test to use another Mac-specific
        path in conjunction with a cross-platform path.
        (ShouldBuildTest):

2012-01-24  Kentaro Hara  <haraken@chromium.org>

        webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl should test stdout and stderr
        https://bugs.webkit.org/show_bug.cgi?id=75836

        Reviewed by David Kilzer.

        Previously parser_unittests.pl can just test the returned value of
        get_function_line_ranges() in prepare-ChangeLog. This patch fixes
        parser_unittests.pl so that it also tests the stdout and stderr of
        get_function_line_ranges().

        This patch adds css_unittests_warning.css, which contains test cases
        for warning messages of the CSS parser of prepare-ChangeLog.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        (captureOutput): Captures the stdout and stderr of a given method.
        (convertAbsolutepathToWebKitPath): Converts absolute paths in a given
        string to relative paths.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/css_unittests_warning-expected.txt: Added.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/css_unittests_warning.css: Added.
        (element1):
        (element2):
        (element3):
        (element4):
        ():
        (element5):
        (element6):

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests-expected.txt:
        Just updated the test results, i.e. added stdout and stderr results.
        No essential changes in the test results.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/css_unittests-expected.txt: Ditto.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/java_unittests-expected.txt: Ditto.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/javascript_unittests-expected.txt: Ditto.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests-expected.txt: Ditto.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/python_unittests-expected.txt: Ditto.

2012-01-24  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: new-run-webkit-httpd is broken
        https://bugs.webkit.org/show_bug.cgi?id=76963

        Reviewed by Adam Barth.

        r105674 broke new-run-webkit-httpd, since options.chromium
        doesn't exist any more. We didn't catch this because we don't
        run the integration tests by default anywhere :(.

        * Scripts/new-run-webkit-httpd:
        (run):
        (main):

2012-01-24  Adam Barth  <abarth@webkit.org>

        garden-o-matic pixel zoomer should let you look at every pixel of the image
        https://bugs.webkit.org/show_bug.cgi?id=76962

        Reviewed by Ojan Vafai.

        Previously, you couldn't get up to the right and bottom pixels.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/pixelzoomer.js:

2012-01-24  Enrica Casucci  <enrica@apple.com>

        WebHTMLView should implement typingAttributes methods to work correctly with the Inspector bar in Mail.
        https://bugs.webkit.org/show_bug.cgi?id=76951
        <rdar://problem/9325158>

        Added test to verify that WebHTMLView supports the typingAttributes method and that it
        works as expected.
        
        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/mac/InspectorBar.mm:
        (TestWebKitAPI::TEST):

2012-01-24  James Robinson  <jamesr@chromium.org>

        Put a space between the trac link and ellipsis in sheriffbot rollout message so it linkifies better in some IRC clients
        https://bugs.webkit.org/show_bug.cgi?id=76884

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Rollout.execute):
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:
        (SheriffIRCBotTest.test_rollout):
        (SheriffIRCBotTest.test_revert):
        (SheriffIRCBotTest.test_multi_rollout):
        (SheriffIRCBotTest.test_rollout_with_r_in_svn_revision):
        (SheriffIRCBotTest.test_multi_rollout_with_r_in_svn_revision):
        (SheriffIRCBotTest.test_rollout_invalidate_reason):
        (test_multi_rollout_invalidate_reason):

2012-01-24  Kentaro Hara  <haraken@chromium.org>

        The cpp parser of prepare-ChangeLog cannot detect a change in classes and namespaces
        https://bugs.webkit.org/show_bug.cgi?id=75531

        Reviewed by David Kilzer.

        Previously, the cpp parser of prepare-ChangeLog could not detect a change
        outside methods. Consider the following cpp file.

            namespace N {
            int a;     // this change does not appear on ChangeLog.
            class C {
                int b;     // this change does not appear on ChangeLog.
                void f()
                {
                    int c;     // this change appears on ChangeLog.
                }
                int d;     // this change does not appear on ChangeLog.
            };
            int e;     // this change does not appear on ChangeLog.
            };

        The previous prepare-ChangeLog outputs just methods in which a change is found:
            (N::C::f):

        This patch fixes prepare-ChangeLog so that it outputs namespaces, classes
        and methods in which a change is found:
            (N):
            (N::C):
            (N::C::f):

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_cpp): Modified as described above.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests.cpp: Added test cases.
        (Class104):
        (Class105):
        (Class106):
        (Class106::func32):
        (Class106::func33):
        (NameSpace3):
        (NameSpace4):
        (NameSpace5):
        (NameSpace6):
        (Class107):
        (NameSpace5::NameSpace6::Class107::func34):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests-expected.txt:

2012-01-24  Kentaro Hara  <haraken@chromium.org>

        prepare-ChangeLog outputs warnings for top-level { ... } blocks
        https://bugs.webkit.org/show_bug.cgi?id=75943

        Reviewed by David Kilzer.

        Currently, prepare-ChangeLog outputs warnings for top-level { ... } blocks,
        because it does not distinguish '}' at the end of a subroutine
        with '}' at the end of a if or for statement.

        foo.pl:
            if (1) {
            }
            for (@v) {
            }

        output:
            nested functions found at top-level at foo.pl:2
            nested functions found at top-level at foo.pl:4

        This patch fixes the bug.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_perl):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests.pl:
        Added test cases. No change in the test results.

2012-01-24  Dirk Pranke  <dpranke@chromium.org>

        r105674 broke check-webkit-style for chromium's test_expectations.

        Unreviewed, build fix.
        
        We now need to pass in a platform name of 'chromium' if we want
        the chromium port; options.chromium is no longer recognized. I
        will follow this patch up with a separate patch that has a test,
        but this at least fixes the build.

        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker._determine_port_from_exepectations_path):

2012-01-20  Ojan Vafai  <ojan@chromium.org>

        check-webkit-style of the chromium test_expectations.txt file takes too long
        https://bugs.webkit.org/show_bug.cgi?id=76745

        Reviewed by Dimitri Glazkov.

        When in lint mode, have TestExpectations test all configurations instead
        of looping over each configuration. This also has the benefit of making
        the error output considerably more concise.

        Also, got rid of the double-printing of errors when linting through check-webkit-style.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.lint):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations._report_errors):
        (TestExpectations._add_expectations):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_parse_error_nonfatal):
        (test_error_on_different_platform):
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.check_test_expectations):
        (TestExpectationsChecker.check):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.test_determine_port_from_exepectations_path):
        (TestExpectationsTestCase.assert_lines_lint):

2012-01-24  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix attempt after r105543.

        * Scripts/webkitpy/common/net/file_uploader.py:
        (FileUploader.upload_as_multipart_form_data):

2012-01-24  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix attempt after r105543.

        * Scripts/webkitpy/common/net/file_uploader.py:
        (FileUploader.upload_as_multipart_form_data):

2012-01-24  Vincent Scheib  <scheib@chromium.org>

        [Chromium] Add Pointer Lock test hooks and mock implementation to DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=76411

        Reviewed by Adam Barth.

        Breaking up https://bugs.webkit.org/show_bug.cgi?id=75762
        into a series of patches, this change adds a trivial
        pointer lock implementation to the Chromium port's DumpRenderTree
        and exposes LayoutTestController hooks to force failure conditions.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::didLosePointerLock):
        (LayoutTestController::setPointerLockWillFailAsynchronously):
        (LayoutTestController::setPointerLockWillFailSynchronously):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::requestPointerLock):
        (WebViewHost::requestPointerUnlock):
        (WebViewHost::isPointerLocked):
        (WebViewHost::didCompletePointerLock):
        (WebViewHost::didNotCompletePointerLock):
        (WebViewHost::didLosePointerLock):
        (WebViewHost::reset):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost::setPointerLockWillFailAsynchronously):
        (WebViewHost::setPointerLockWillFailSynchronously):

2012-01-24  Mario Sanchez Prada  <msanchez@igalia.com>

        Unreviewed, skip WK2 API test timing out on some GTK bots.

        WebKit2APITests/TestDownloads is consistently timing out on the
        32bit release and 64bit debug bots.

        * Scripts/run-gtk-tests:
        (TestRunner): Skip WebKit2APITests/TestDownloads.

2012-01-24  Andras Becsi  <andras.becsi@nokia.com>

        [Qt] Fix the build with the newes Qt5 hashes
        https://bugs.webkit.org/show_bug.cgi?id=76657

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication): Disable the automatic touch->mouse event synthesis
        for now to prevent an infinite loop where Qt always creates mouse events out of our touch mock events.

2012-01-24  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Distinguish between Cygwin and cmd.exe in the way we set env variables

        We can't use win32-msvc* to decide whether or not to use (set FOO=bar), as
        building with MinGW inside cmd.exe will require the same construct. Instead
        we assume that when the first character in PWD is a '/' we're running under
        Cygwin, and use the normal unix way of setting environment variables.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_pre.prf:

2012-01-24  Simon Hausmann  <simon.hausmann@nokia.com>

        Some qmake build files must include Qt5's "quick" module.
        https://bugs.webkit.org/show_bug.cgi?id=76671

        Unreviewed build fix.

        * MiniBrowser/qt/MiniBrowser.pro:
        * WebKitTestRunner/Target.pri:

2012-01-24  Andras Becsi  <andras.becsi@nokia.com>

        [Qt] Fix the event timestamps for touch mocking

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::sendTouchEvent): We should not set QEvent::None as the
        timestamp argument in the QWindowSystemInterface::handleTouchEvent call.

2012-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement DownloadClient in WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=72952

        Reviewed by Martin Robinson.

        * gtk/generate-gtkdoc:
        (get_webkit2_options): Ignore WebKitDownloadClient.

2012-01-23  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] editing/deleting/5408255.html results are incorrect
        https://bugs.webkit.org/show_bug.cgi?id=53644

        Reviewed by Martin Robinson.

        WEBKIT_TOP_LEVEL environment variable is now set directly in either
        WebKitTestRunner or DumpRenderTree through usage of a compilation-time
        macro. This way both tools can be run outside the test harness without
        the need to manually set the environment variable.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (getTopLevelPath):
        * GNUmakefile.am:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.setup_environ_for_server):
        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WTR::InjectedBundle::platformInitialize):

2012-01-23  Dmitry Lomov  <dslomov@google.com>

        [Chromium] Implement layoutTestController.workerThreadCount in DRT
        https://bugs.webkit.org/show_bug.cgi?id=74653.

        Reviewed by Darin Fisher.

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

2012-01-23  Dirk Pranke  <dpranke@chromium.org>

        nrwt: make --chromium work like --qt
        https://bugs.webkit.org/show_bug.cgi?id=76875

        Reviewed by Adam Barth.

        --chromium used to have to be handled differently from --qt
        due to the way the PortFactory was implemented; there's not
        really a good reason for that any more so this patch makes
        things slightly more consistent and eliminates the
        options.chromium flag (--chromium is now truly a synonym for
        --platform chromium).

        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory._default_port):
        (PortFactory.get):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.setUp):
        (FactoryTest.test_chromium_mac):
        (FactoryTest.test_chromium_linux):
        (FactoryTest.test_chromium_win):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-01-23  Dirk Pranke  <dpranke@chromium.org>

        run-webkit-tests needs to propagate --chromium
        https://bugs.webkit.org/show_bug.cgi?id=76870

        Reviewed by Eric Seidel.

        run-webkit-tests removes '--chromium' argument from @ARGV when
        determining which port to run, which means that that doesn't
        propagate to new-run-webkit-tests. That's bad (and is handled
        for the other ports by re-adding the flag, but apparently we're
        just now noticing for Chromium).

        * Scripts/run-webkit-tests:

2012-01-23  Brian Weinstein  <bweinstein@apple.com>

        More build fixing after r105646.

        * TestWebKitAPI/Tests/WTF/RedBlackTree.cpp:
        (TestWebKitAPI::TestNode::key):

2012-01-23  Gavin Barraclough  <barraclough@apple.com>

        Unreviewed build fix - r105646 broke this.

        * TestWebKitAPI/Tests/WTF/RedBlackTree.cpp:
        (TestWebKitAPI::TestNode::TestNode):
        (TestWebKitAPI::TestNode::key):
        (TestWebKitAPI::RedBlackTreeTest::assertEqual):
        (TestWebKitAPI::RedBlackTreeTest::assertSameValuesForKey):
        (TestWebKitAPI::RedBlackTreeTest::testDriver):

2012-01-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105658.
        http://trac.webkit.org/changeset/105658
        https://bugs.webkit.org/show_bug.cgi?id=76883

        We want this eventually, but not right at this moment
        (Requested by abarth on #webkit).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:

2012-01-23  Adam Barth  <abarth@webkit.org>

        garden-o-matic should support Chromium Mac Lion
        https://bugs.webkit.org/show_bug.cgi?id=76880

        Reviewed by Eric Seidel.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:

2012-01-23  Emil A Eklund  <eae@chromium.org>

        check-webkit-style whitespace/operators triggers on overloaded division operator
        https://bugs.webkit.org/show_bug.cgi?id=76650

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_operator_methods):

2012-01-23  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should report server-side errors
        https://bugs.webkit.org/show_bug.cgi?id=76802

        Reviewed by Tony Chang.

        Report errors whenever server's response doesn't match "OK".

        * Scripts/webkitpy/common/net/file_uploader.py:
        (FileUploader.upload_single_text_file):
        (FileUploader.upload_as_multipart_form_data):
        (FileUploader._upload_data.callback):
        (FileUploader):
        (FileUploader._upload_data):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._upload_json):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_upload_json):
        (test_upload_json.MockFileUploader.upload_single_text_file):

2012-01-22  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests ignore Skipped list on chromium
        https://bugs.webkit.org/show_bug.cgi?id=76764

        Reviewed by Dirk Pranke.

        Move skipped_perf_tests from WebKit port to Base port so that Chromium port
        can also find skipped list. Chromium port only uses test_expectations.txt for
        layout tests but performacne tests don't use test_expectations.txt so Chromium port
        also needs to use Skipped list.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._tests_from_skipped_file_contents):
        (Port):
        (Port._expectations_from_skipped_files):
        (Port.skipped_perf_tests):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_skipped_perf_tests):
        (PortTest.test_skipped_perf_tests.add_text_file):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._skipped_tests_for_unsupported_features):
        (WebKitPort._skipped_file_search_paths):
        (WebKitPort.skipped_layout_tests):

2012-01-23  Andy Estes  <aestes@apple.com>

        Fix the build after r105635.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        (TestWebKitAPI::TEST):

2012-01-23  Xianzhu Wang  <wangxianzhu@chromium.org>

        Basic enhancements to StringBuilder
        https://bugs.webkit.org/show_bug.cgi?id=67081

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        (TestWebKitAPI::TEST):

2012-01-23  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] run-gtk-tests randomly fails while running the xprop comand
        https://bugs.webkit.org/show_bug.cgi?id=76817

        Reviewed by Gustavo Noronha Silva.

        No need to use xprop to remove the AT_SPI_BUS property since
        run-gtk-tests will always run new instances of Xvfb.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip TestWebKitAccessibility.
        (TestRunner.run): Uncomment lines for launching the accessibility
        bus and registry daemon, and remove lines for running xprop.

2012-01-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't warn about override and final being C++11 extensions

        Clang will emit a warning when these extensions are used without passing
        --std=c++11, but we use feature checking to decide if we have the right
        extensions, so we can safely ignore these warnings. The XCode and Windows
        project files have the same workaround.

        The reason for adding the flag to QMAKE_OBJECTIVE_CFLAGS as well is that
        we only have one extra compiler for Objective-C, which is also used for
        Objective-C++ sources, so we have to pass the flag, even if it doesn't
        make sense for Objective-C.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/unix/default_post.prf:

2012-01-20  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Change how build-webkit decides when to do full incremental builds

        Instead of relying on update-webkit (which isn't run on the bots) to
        decide when to do a full incremental build (make qmake), we let the
        build-webkit script itself check the current SVN revision against the
        previous build (by storing it in .webkit.config).

        If the two differ we assume a full incremental build is needed, since
        the new revisions might have introduced problematic things like new
        Q_OBJECT macros. If not, we assume the developer is doing changes
        locally, and revert to doing a plain 'make'.

        In addition, when the build fails in the latter case, we inform the
        developer of possible pitfalls and how to manually run 'make qmake'.

        Reviewed by Ossy.

        * Scripts/update-webkit:
        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-01-23  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] run-gtk-tests randomly fails while running the xprop comand
        https://bugs.webkit.org/show_bug.cgi?id=76817

        Reviewed by Philippe Normand.

        Temporarily comment the lines related to launching the ATSPI bus
        and registry daemon, which are making the bots to fail randomly.

        * Scripts/run-gtk-tests:
        (TestRunner): Skip TestWebKitAccessibility, as it won't run
        properly if the ATSPI infrastructure is not properly initialized.
        (TestRunner.run): Comment lines related to initialization of ATSPI.

2012-01-22  Ryosuke Niwa  <rniwa@webkit.org>

        Windows python test build fix.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__):

2012-01-22  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] DumpRenderTree converts "file:///" to a path differently
        https://bugs.webkit.org/show_bug.cgi?id=76631

        Reviewed by Martin Robinson.

        DumpRenderTree should print "/" as the last path component if the
        path is a lone slash instead of empty output.

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

2012-01-20  David Levin  <levin@chromium.org>

        The leaky DC check should use adoptPtr as a signal instead of OwnPtr to get less false positives.
        https://bugs.webkit.org/show_bug.cgi?id=76752

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_leaky_patterns):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (LeakyPatternTest.test_create_dc):
        (LeakyPatternTest.test_create_compatible_dc):

2012-01-20  Shawn Singh  <shawnsingh@chromium.org>

        Changed my status in commiters.py

        Unreviewed.

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

2012-01-20  Ojan Vafai  <ojan@chromium.org>

        run-webkit-tests --lint-test-files crawls the whole LayoutTests subtree
        https://bugs.webkit.org/show_bug.cgi?id=76748

        Reviewed by Ryosuke Niwa.

        It crawls the whole subtree and then doesn't use the data. Cutting this out
        saves 4 seconds warm and 17 seconds cold on my Mac Pro.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):

2012-01-20  Adam Barth  <abarth@webkit.org>

        Another tiny tweak to the garden-o-matic CSS.  This makes things line
        up slightly nicer when there aren't any failures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/onebar.css:
        (#summary):

2012-01-19  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should support --test-results-server option
        https://bugs.webkit.org/show_bug.cgi?id=76680

        Reviewed by Adam Barth.

        Add --test-results-server, --builder-name, and --build-number options to run-perf-tests
        to be used by perf bots. Also refactor file_uploader as needed.

        * Scripts/webkitpy/common/net/file_uploader.py:
        (FileUploader.__init__):
        (FileUploader.upload_single_file):
        (FileUploader.upload_as_multipart_form_data):
        (FileUploader):
        (FileUploader._upload_data):
        (FileUploader._upload_data.callback):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGeneratorBase.upload_json_files):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner.run):
        (PerfTestsRunner._generate_json):
        (PerfTestsRunner._upload_json):
        (PerfTestsRunner._run_tests_set):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (create_runner):
        (test_run_with_upload_json):
        (test_run_with_upload_json.mock_upload_json):
        (test_upload_json):
        (test_upload_json.MockFileUploader):
        (test_upload_json.MockFileUploader.__init__):
        (test_upload_json.MockFileUploader.upload_single_file):
        (test_parse_args):

2012-01-20  Adam Barth  <abarth@webkit.org>

        The party time image overlaps real content!  This patch makes the
        image centered vertically.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/onebar.css:
        (#onebar.partytime #summary):

2012-01-19  Ojan Vafai  <ojan@chromium.org>

        Refactor TestExpectationsParser in preparation for caching the results
        https://bugs.webkit.org/show_bug.cgi?id=76669

        Reviewed by Dimitri Glazkov.

        Make everything private expect for the parse method. 
        Eventually, we'll need the expectations lines to not be modified
        outside of TestExpectationsParser so we can cache the results.
        This makes check-webkit-style of the chromium test_expectations.txt file
        go from ~17 seconds to ~12 seconds on my Mac Pro.

        This patch is just a refactor in preparation, so no new tests.

        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor_unittest.py:
        (TestExpectationEditorTests.make_parsed_expectation_lines):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser.parse):
        (TestExpectationParser):
        (TestExpectationParser._parse_line):
        (TestExpectationParser._tokenize):
        (TestExpectationParser._tokenize_list):
        (TestExpectationsModel._clear_expectations_for_test):
        (TestExpectations.__init__):
        (TestExpectations._add_expectations):
        (TestExpectations._add_skipped_tests):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (TestExpectationParserTests.test_tokenize_blank):
        (TestExpectationParserTests.test_tokenize_missing_colon):
        (TestExpectationParserTests.test_tokenize_extra_colon):
        (TestExpectationParserTests.test_tokenize_empty_comment):
        (TestExpectationParserTests.test_tokenize_comment):
        (TestExpectationParserTests.test_tokenize_missing_equal):
        (TestExpectationParserTests.test_tokenize_extra_equal):
        (TestExpectationParserTests.test_tokenize_valid):
        (TestExpectationParserTests.test_tokenize_valid_with_comment):
        (TestExpectationParserTests.test_tokenize_valid_with_multiple_modifiers):
        (TestExpectationParserTests.test_parse_empty_string):
        (TestExpectationSerializerTests.assert_round_trip):
        (TestExpectationSerializerTests.assert_list_round_trip):
        * Scripts/webkitpy/tool/commands/expectations.py:
        (OptimizeExpectations.execute):
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningExpectationsUpdater.update_expectations):

2012-01-20  Adam Barth  <abarth@webkit.org>

        Follow-up to previous patch: don't produce NaN when the revision number
        is missing.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model_unittests.js:

2012-01-20  Adam Barth  <abarth@webkit.org>

        Garden-o-matic should tell me which revisions have been checked by all the bots
        https://bugs.webkit.org/show_bug.cgi?id=76722

        Reviewed by Dimitri Glazkov.

        This information helps me know when it's safe for me to roll a
        candidate revision.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model_unittests.js:

2012-01-20  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        build-webkit: Don't spit out congratulations message on Ctrl+C

        Reviewed by Andreas Kling.

        * Scripts/build-webkit:

2012-01-20  Philippe Normand  <pnormand@igalia.com>

        [GTK] Allow extra jhbuild modulesets
        https://bugs.webkit.org/show_bug.cgi?id=76691

        Reviewed by Gustavo Noronha Silva.

        * gtk/jhbuildrc: Extra modulesets and modules can be added in
        JHBuild using the WEBKIT_EXTRA_MODULESETS and WEBKIT_EXTRA_MODULES
        env variables respectively. Use comma-separated values. Example:
        WEBKIT_EXTRA_MODULES=file:///path/to/module.set,file:///other/path.

2012-01-20  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Expose accessibility hierarchy in WebKit2 to ATK/AT-SPI based ATs
        https://bugs.webkit.org/show_bug.cgi?id=72589

        Reviewed by Martin Robinson.

        Ensure the accessibility infrastructure is available when running
        the unit tests, otherwise WK2's accessibility tests won't work.

        * Scripts/run-gtk-tests:
        (TestRunner):
        (TestRunner._lookup_atspi2_binary): New. Looks for the directory
        where at-spi2's stuff is located (like at-spi-bus-launcher and
        at-spi2-registryd).
        (TestRunner.run): Initialize the accessibility infrastructure.

        * gtk/generate-gtkdoc:
        (get_webkit2_options): Add 'WebKitWebViewBaseAccessible.*'.

        * gtk/jhbuild.modules: Added at-spi2-core and at-spi2-atk.

2012-01-20  Hayato Ito  <hayato@chromium.org>

        Add ShadowRoot.idl which is enabled by newly introduced SHADOW_DOM flag.
        https://bugs.webkit.org/show_bug.cgi?id=76353

        Reviewed by Hajime Morita.

        Add ShadowRoot.idl, which is enabled only on chromium port since this is
        under development feature.
        ShadowRoot.idl contains minimum API so that we can test it.
        Other APIs should be added on other changes so that we can isolate issues.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2012-01-20  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] GTK's DRT not to log events for already defunct objects
        https://bugs.webkit.org/show_bug.cgi?id=76620

        Reviewed by Martin Robinson.

        Do not log 'state-change:defunct' events.

        * DumpRenderTree/gtk/AccessibilityCallbacks.cpp:
        (printAccessibilityEvent): Early return if a
        'state-change:defunct' signal is passed.
        (axObjectEventListener): Pass the signal name and value in
        separate parameters to printAccessibilityEvent.

2012-01-19  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed build fix. Wrong variable being used as the cwd for git
        remote update command.

        * gtk/run-with-jhbuild:
        (update_jhbuild):

2012-01-19  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] ensure the jhbuild used by webkit is as up-to-date as needed
        https://bugs.webkit.org/show_bug.cgi?id=76585

        Reviewed by Martin Robinson.

        This allows us to specify a minimum version of jhbuild required,
        while also providing stability against changes done to the master
        branch, by letting us choose what is the exact version that will
        be used.

        * gtk/run-with-jhbuild: refactored for more hackability and easier
        reading
        (jhbuild_installed): checks whether jhbuild is installed
        (jhbuild_cloned): checks whether jhbuild has been cloned
        (jhbuild_at_expected_revision): checks whether jhbuild is at the
        expected revision
        (update_jhbuild): brings jhbuild to the expected revision
        (clone_jhbuild): clones jhbuild
        (install_jhbuild): build and installs jhbuild
        (update_webkitgtk_libs): runs update-webkitgtk-libs
        (ensure_jhbuild): high-level logic to decide whether and which of
        the steps above are executed

2012-01-19  Alexey Proskuryakov  <ap@apple.com>

        [WK2] DumpRenderTree converts "file:///" to a path differently
        https://bugs.webkit.org/show_bug.cgi?id=76653

        Reviewed by John Sullivan.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp: (WTR::lastFileURLPathComponent):
        Do print a slash if there are no path components.

2012-01-19  Eric Seidel  <eric@webkit.org>

        webkit-patch cannot rollout patches without changelog/bug number
        https://bugs.webkit.org/show_bug.cgi?id=75962

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/download.py:
        (AbstractRolloutPrepCommand._prepare_state):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (AbstractRolloutPrepCommandTest.test_prepare_state):

2012-01-19  Alexey Proskuryakov  <ap@apple.com>

        [WK2] fast/url/degenerate-file-base.html fails
        https://bugs.webkit.org/show_bug.cgi?id=76619

        Reviewed by Adam Roben.

        A URL generated form local path for loading had an extra slash, making document.URL
        incorrect in all WebKit2 tests (file://localhost//path/to/test.html).

        * WebKitTestRunner/TestInvocation.cpp: (WTR::createWKURL):

2012-01-18  Ojan Vafai  <ojan@chromium.org>

        check-webkit-style of the chromium test_expectations.txt file doesn't test all chromium ports
        https://bugs.webkit.org/show_bug.cgi?id=76510

        Reviewed by Adam Barth.

        Unlike other style rules, if you get the syntax of the test_expectations.txt
        file wrong, the layout tests won't run. Also, this check is simple and only
        slows down committing if you actually modify one of the test_expectations.txt files.

        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.check_test_expectations):
        (TestExpectationsChecker.check):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.test_check_covers_all_configurations):
        (TestExpectationsTestCase.test_check_covers_all_configurations.mock_check_test_expectations):
        (TestExpectationsTestCase):
        (assert_lines_lint):

2012-01-19  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. Revert an unintentional change to WebKitDriver in r105443.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverProxy.__init__):

2012-01-19  Dirk Pranke  <dpranke@chromium.org>

        remove the duplicated build rules from WebKit.gyp, Tools.gyp
        https://bugs.webkit.org/show_bug.cgi?id=73384

        Reviewed by Tony Chang.

        This patch removes the no-longer-necessary conditional logic for
        build_webkit_exes_from_webkit_gyp; we now always build the exes
        from their own dedicated gyp files.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-01-19  Alexey Proskuryakov  <ap@apple.com>

        make-new-script-test should work with HTTP tests
        https://bugs.webkit.org/show_bug.cgi?id=76603

        Reviewed by Adam Roben.

        * Scripts/make-new-script-test:
        (makePathToSharedSources): Renamed from makeTestRelativePathToSharedSources(), since it
        now also creates absolute paths for HTTP.

2012-01-19  Ryosuke Niwa  <rniwa@webkit.org>

        Some perf tests time out when ran by run-perf-tests
        https://bugs.webkit.org/show_bug.cgi?id=76612

        Reviewed by Dirk Pranke and Eric Seidel.

        Always pass --no-timeout to DumpRenderTree from run-perf-tests.
        Otherwise some tests such as Parser/xml-parser.html will timeout.

        --no-timeout option is currently supported by Chromium and Mac ports.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.to.create_driver):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.__init__):
        (ChromiumDriver._wrapper_options):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.__init__):
        (DriverProxy.__init__):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.__init__):
        (WebKitDriver.cmd_line):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitDriverTest.test_read_binary_block):
        (WebKitDriverTest):
        (WebKitDriverTest.test_no_timeout):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (get_tests_run.RecordingTestDriver.__init__):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner._run_tests_set):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (create_runner):

2012-01-19  Ben Wells  <benwells@chromium.org>

        Add support for window.print to chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=76479

        When used in a test window.print goes into print mode and then
        straight out again. This will allow the afterprint event to be
        tested by having the afterprint event happen before the dump
        happens.

        Reviewed by Mihai Parparita.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::printPage):
        * DumpRenderTree/chromium/WebViewHost.h:

2012-01-18  Enrica Casucci  <enrica@apple.com>

        editingAttributedStringFromRange in WebHTMLConverter does not handle NSUnderlineStyleAttributeName.
        https://bugs.webkit.org/show_bug.cgi?id=76588
        <rdar://problem/9325183>

        Added test.
        
        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/mac/InspectorBar.mm:
        (TestWebKitAPI::TEST):

2012-01-19  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Do full incremental builds until bots use update-webkit

        Rubber-stamped by Simon Hausmann.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-01-19  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Fix the Qt build

        Unreviewed build fix.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-01-19  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make build-webkit always do safe incremental builds after update-webkit

        When building against Qt5 with GCC we would just run 'make' in the build dir,
        and rely on the dependency files output by GCC (-MD) to handle dependency
        tracking, but that fails for special-cases like adding a Q_OBJECT macro
        to a header.

        To guarantee that an incrmental build will work, we have to run 'make qmake',
        which we now do on every build-webkit that's followed by a successful run
        of update-webkit. The reasoning is that update-webkit can result in such
        potential corner-cases being applied, and since we can't know for sure
        unless we inspect the diff and account for all the corner cases we assume
        the worst and always run 'make qmake'.

        After a succesful run of build-webkit we proceed to do just 'make' for any
        subsequent runs, since we assume that the developer knows what kind of
        changes he/she is doing, and when a 'make qmake' is needed.

        Reviewed by Simon Hausmann.

        * Scripts/update-webkit:
        * Scripts/webkitdirs.pm:
        (determineCurrentSVNRevision):
        (currentSVNRevision):
        (buildQMakeProjects):
        * qmake/mkspecs/features/default_post.prf:

2012-01-18  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should support Skipped list
        https://bugs.webkit.org/show_bug.cgi?id=76594

        Reviewed by Adam Barth.

        Add a support for Skipped list in run-perf-tests; also skip files in resources directories.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.perf_tests_dir):
        (Port.skipped_perf_tests):
        (Port.skips_perf_test):
        (Port.relative_perf_test_filename):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.perf_tests_dir):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._expectations_from_skipped_files):
        (WebKitPort):
        (WebKitPort.skipped_layout_tests):
        (WebKitPort.skipped_perf_tests):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._collect_tests):
        (PerfTestsRunner.run):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_test_set_with_json_output):
        (test_run_test_set_with_json_source):
        (test_collect_tests_with_skipped_list):
        (test_collect_tests_with_skipped_list.add_file):

2012-01-18  Dirk Pranke  <dpranke@chromium.org>

        Fix path to chromium_src_dir introduced in previous change.

        Unreviewed, build fix.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-01-18  Alexey Proskuryakov  <ap@apple.com>

        Need infrastructure to test Content-Disposition filename encoding support
        https://bugs.webkit.org/show_bug.cgi?id=76572
        <rdar://problem/6421825>

        Reviewed by Sam Weinig.

        Made policy delegate log suggested file name when resource has Content-Disposition: attachment.

        WebKitTestRunner does not have a policy delegate yet, bug 42546.

        * DumpRenderTree/mac/PolicyDelegate.mm:
        (dispositionTypeFromContentDispositionHeader):
        (-[PolicyDelegate webView:decidePolicyForMIMEType:request:frame:decisionListener:]):

2012-01-18  Ojan Vafai  <ojan@chromium.org>

        Fix tests from http://trac.webkit.org/changeset/105332.

        The code assumed that if you passed an options object with a configuration
        attribute that it would have a valid value. A bunch of the testing mocks
        do things like having a configuration value of None.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):

2012-01-18  Ojan Vafai  <ojan@chromium.org>

        Shave 0.5 seconds off check-webkit-style runtime for test_expectations.txt
        https://bugs.webkit.org/show_bug.cgi?id=76576

        Reviewed by Adam Barth.

        Avoid calling default_configuration in base.py. We don't need it for
        checking test_expectations.txt style. It takes ~0.5 seconds to run on my
        Mac Pro. It's the call to "perl Tools/Scripts/webkit-build-directory --top-level"
        from common.executive.

        At some point someone should probably look into why that call is so slow
        since it's on the critical path for run-webkit-tests and build-webkit startup.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker._determine_port_from_exepectations_path):

2012-01-18  Dirk Pranke  <dpranke@chromium.org>

        [chromium] move Tools.gyp, switch build-webkit --chromium to All.gyp
        https://bugs.webkit.org/show_bug.cgi?id=76505

        Reviewed by Tony Chang.

        Update chromium build script to use All.gyp instead of WebKit.gyp

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp: Renamed from Source/WebKit/chromium/Tools.gyp.
        * Scripts/webkitdirs.pm:

2012-01-18  Sam Weinig  <sam@webkit.org>

        Don’t hardcode the path to ‘make‘.

        Reviewed by Dan Bernstein.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2012-01-18  Joshua Bell  <jsbell@chromium.org>

        Adding myself to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=76569

        Unreviewed.

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

2012-01-18  Adam Barth  <abarth@webkit.org>

        Up the cap on test failures tolerated by the EWS so the mac-ews can run to completion
        https://bugs.webkit.org/show_bug.cgi?id=76567

        Reviewed by Eric Seidel.

        Current the AppleMac port has slightly more failures than we allow on
        the EWS, causing the mac-ews to spin.  This patch ups the limit a bit,
        which should hopefully let the mac-ews run to completion.  Once
        AppleMac has fewer failures, we can lower the cap again.

        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        (LayoutTestResultsReaderTest.test_layout_test_results):
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests):
        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2012-01-18  Eric Carlson  <eric.carlson@apple.com>

        Provide access to user's list of preferred languages
        https://bugs.webkit.org/show_bug.cgi?id=76138

        Reviewed by Alexey Proskuryakov.

        * GNUmakefile.am: Add JSInternalsCustom.cpp.

2012-01-18  Adam Barth  <abarth@webkit.org>

        Add Chromium Linux GPU 32 to the list of allowed Chromium Linux
        configurations.

        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort.__init__):

2012-01-18  Dominic Mazzoni  <dmazzoni@google.com>

        Accessibility: Chromium needs methods to scroll an object into view or to a specific location.
        https://bugs.webkit.org/show_bug.cgi?id=73460

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::scrollToMakeVisibleCallback):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocusCallback):
        (AccessibilityUIElement::scrollToGlobalPointCallback):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::scrollToMakeVisible):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::scrollToMakeVisible):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::scrollToMakeVisible):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):

2012-01-17  Enrica Casucci  <enrica@apple.com>

        Missing NSForegroundColorAttributeName should be treated as black instead of transparent.
        https://bugs.webkit.org/show_bug.cgi?id=76490
        <rdar://problem/9460733>

        Added TestWebKitAPI test.
        
        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added new test file.
        * TestWebKitAPI/Tests/mac/InspectorBar.mm: Added test that calls
        changeAttributes to the WebView.
        
2012-01-18  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Consolidate layout test crash logging
        https://bugs.webkit.org/show_bug.cgi?id=75088

        Reviewed by Simon Hausmann.

        Move backtrace generating logic into WTFReportBacktrace
        and add a way to deinstall signal handlers if we know
        that we have already printed the backtrace.

        * DumpRenderTree/qt/main.cpp:
        (crashHandler):
        (setupSignalHandlers):
        (WTFCrashHook):
        (main):
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WTR::crashHandler):
        (WTR::setupSignalHandlers):
        (WTR::crashHook):
        (WTR::InjectedBundle::platformInitialize):

2012-01-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix after r105256.

        There was a cyclic dependency between self._port and self._host assigments.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__):

2012-01-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Add new watchlist rule for the Qt build system

        Reviewed by Simon Hausmann.

        * Scripts/webkitpy/common/config/watchlist:

2012-01-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Move OTHER_FILES from WebKit.pro to Tools.pro

        Reviewed by Simon Hausmann.

        * Tools.pro:

2012-01-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Allow building only a subset of the WebKit sub-projects

        Fixes build-jsc, broken in r104825.

        We no longer need the intermediate buildQMakeQtProject(), as we're the
        only port using qmake, and buildQMakeProject is now highly Qt specific.

        <http://webkit.org/b/76179>

        Reviewed by Simon Hausmann.

        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-01-18  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should generate a json file that summaries the result
        https://bugs.webkit.org/show_bug.cgi?id=76504

        Reviewed by Adam Barth.

        Add an ability to generate a json file to run-perf-test in the preparation for perf bots.
        New option --outout-json-path specifies the json file's path, and --source-json-path specifies
        another json file to be merged into the generated json file.

        Also fixed a bug that --build wasn't set by default.

        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.webkit_base):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__):
        (PerfTestsRunner):
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner.run):
        (PerfTestsRunner._generate_json_if_specified):
        (PerfTestsRunner._process_chromium_style_test_result):
        (PerfTestsRunner._process_parser_test_result):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest):
        (create_runner):
        (test_run_test_set):
        (test_run_test_set_for_parser_tests):
        (test_run_test_set_with_summary_json):
        (test_collect_tests):
        (test_parse_args):

2012-01-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105244.
        http://trac.webkit.org/changeset/105244
        https://bugs.webkit.org/show_bug.cgi?id=76518

        broke Chromium Mac (Requested by rolandsteiner on #webkit).

        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::removeSelection):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::removeSelection):

2012-01-17  Dominic Mazzoni  <dmazzoni@google.com>

        Accessibility: Chromium needs methods to scroll an object into view or to a specific location.
        https://bugs.webkit.org/show_bug.cgi?id=73460

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::scrollToMakeVisibleCallback):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocusCallback):
        (AccessibilityUIElement::scrollToGlobalPointCallback):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::scrollToMakeVisible):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::scrollToMakeVisible):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::scrollToMakeVisible):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):

2012-01-17  Adam Barth  <abarth@webkit.org>

        Enable tests on the mac-ews
        https://bugs.webkit.org/show_bug.cgi?id=76502

        Reviewed by Simon Fraser.

        Apple now has five machines running the mac-ews.  Lucas Forschler has
        asked that we try enabling tests to see if we have enough bandwidth.

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

2012-01-17  Sanjoy Das  <sanjoy@playingwithpointers.com>

        Add a check-webkit-style exception for GDBInterface.cpp
        https://bugs.webkit.org/show_bug.cgi?id=76187

        Add an exception for Source/JavaScriptCore/jit/GDBInterface.cpp so
        that it does not fail the style check.

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/style/checker.py: Tell the style checker to not run
        readability/naming tests on
        Source/JavaScriptCore/jit/GDBInterface.cpp.
        * Scripts/webkitpy/style/checker_unittest.py:
        (GlobalVariablesTest.test_path_rules_specifier): Add a test for
        the above exception.

2012-01-17  Hajime Morrita  <morrita@chromium.org>

        https://bugs.webkit.org/show_bug.cgi?id=76245
        [Mac][DRT] should allow query string for the file URL.

        Reviewed by Tony Chang.

        Taught DRT about file:// as a url instead of a file path.
        We are now able to use a path file:///foo/bar.html?baz as a url
        with which DRT opens "/foo/bar.html" with "baz" as a query string.

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

2012-01-17  Ojan Vafai  <ojan@chromium.org>

        Check style on test_expectations.txt files before commit
        https://bugs.webkit.org/show_bug.cgi?id=76484

        Reviewed by Adam Barth.

        Unlike other style rules, if you get the syntax of the test_expectations.txt
        file wrong, the layout tests won't run. Also, this check is simple and only
        slows down committing if you actually modify one of the test_expectations.txt files.

        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit._check_test_expectations):
        (Commit.run):
        * Scripts/webkitpy/tool/steps/commit_unittest.py: Added.
        (CommitTest):
        (CommitTest.test_check_test_expectations):

2012-01-17  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt] Debug build fails with debug qt5
        https://bugs.webkit.org/show_bug.cgi?id=76463

        Reviewed by Simon Hausmann.

        Add QNetworkCookie include in order to satisfy sizeof in QTypeInfo in debug builds.

        * QtTestBrowser/cookiejar.h:

2012-01-17  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: fix json import on linux
        https://bugs.webkit.org/show_bug.cgi?id=76481

        Reviewed by Adam Barth.

        For some reason, the version of simplejson autoinstalled on my linux
        box seems to be broken. We should really only be using
        simplejson if json isn't available anyway, so this change looks
        for json first.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        (JSONGeneratorTest.test_test_timings_trie):

2012-01-17  Dirk Pranke  <dpranke@chromium.org>

        Fix failures in test-webkitpy caused by r105177.

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort._determine_driver_path_statically):
        (ChromiumLinuxPort._static_build_path):

2012-01-17  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: make PortFactory.get() be fully data-driven
        https://bugs.webkit.org/show_bug.cgi?id=76360

        Reviewed by Eric Seidel.

        Refactor PortFactory.get() to be fully data-driven.

        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory):
        (PortFactory._default_port):
        (PortFactory.get):
        (PortFactory.get.in):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.assert_port):

2012-01-17  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: add determine_full_port_name(), clean up port.__init__()
        https://bugs.webkit.org/show_bug.cgi?id=76357

        Reviewed by Adam Barth.

        Each Port class is now required to implement a 'port_name' field
        that will match the start of all ports constructed by this class and
        a 'determine_full_port_name' field that will make the port
        fully-qualified.

        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.__init__):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port):
        (Port.determine_port_name):
        (Port.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.for):
        (ChromiumPort.__init__):
        (ChromiumPort):
        (ChromiumPort._chromium_base_dir):
        (ChromiumPort.path_from_chromium_base):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        (ChromiumGpuLinuxPort):
        (ChromiumGpuLinuxPort.__init__):
        (ChromiumGpuMacPort):
        (ChromiumGpuMacPort.__init__):
        (ChromiumGpuWinPort):
        (ChromiumGpuWinPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort):
        (ChromiumLinuxPort.determine_port_name):
        (ChromiumLinuxPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort):
        (ChromiumMacPort.determine_port_name):
        (ChromiumMacPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort):
        (ChromiumWinPort.determine_port_name):
        (ChromiumWinPort.__init__):
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        (DryRunPort):
        (DryRunPort.determine_port_name):
        (DryRunPort.__init__):
        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory):
        (PortFactory._default_port):
        (PortFactory.get):
        (PortFactory.get.in):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.assert_port):
        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        (GoogleChromeLinux32Port):
        (GoogleChromeLinux32Port.determine_port_name):
        (GoogleChromeLinux64Port):
        (GoogleChromeLinux64Port.determine_port_name):
        (GoogleChromeMacPort):
        (GoogleChromeMacPort.determine_port_name):
        (GoogleChromeWinPort):
        (GoogleChromeWinPort.determine_port_name):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort):
        (MacPort.determine_port_name):
        (MacPort.__init__):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_versions):
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        (MockDRTPort):
        (MockDRTPort.determine_port_name):
        (MockDRTPort.__init__):
        (MockDRT):
        (MockDRT.determine_port_name):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.make_port):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort):
        (QtPort.determine_port_name):
        (QtPort.__init__):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort):
        (TestPort.determine_port_name):
        (TestPort.__init__):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort.__init__):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort):
        (WinPort.determine_port_name):
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        (get_test_baselines.AllPlatformsPort.__init__):
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:
        (get_test_config.TestMacPort):
        (get_test_config):

2012-01-17  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up port code in preparation for static port names
        https://bugs.webkit.org/show_bug.cgi?id=76356

        Reviewed by Adam Barth.

        To fix bug 76215 and be able to determine appropriate port names
        in webkitpy without actually constructing Port objects, we need
        to shuffle some logic in the chromium ports to be able to figure
        out whether we built DRT in 32 or 64-bit mode.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        (ChromiumPort._chromium_base_dir):
        (ChromiumPort.__init__):
        (ChromiumPort.path_from_chromium_base):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort):
        (ChromiumLinuxPort._determine_driver_path_statically):
        (ChromiumLinuxPort._static_build_path):
        (ChromiumLinuxPort._determine_architecture):
        (ChromiumLinuxPort.__init__):
        (ChromiumLinuxPort._build_path):

2012-01-17  Hao Zheng  <zhenghao@chromium.org>

        Do not remove pixel failures for ref tests.
        https://bugs.webkit.org/show_bug.cgi?id=76243

        Reviewed by Tony Chang.

        'NRWT --no-pixel-tests' complains when reftests are expected to
        be image mismatch.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._update_summary_with_result):
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (is_reftest_failure):
        (determine_result_type):

2012-01-17  Balazs Ankes  <Ankes.Balazs@stud.u-szeged.hu>

        REGRESSION(r81225): ORWT should ignore reftests
        https://bugs.webkit.org/show_bug.cgi?id=67936

        Reviewed by Csaba Osztrogonác.

        * Scripts/old-run-webkit-tests:
        (isUsedInReftest): $filename should be the first parameter
        (findTestsToRun): run test if it isn't reftest

2012-01-17  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed. Fix python unit test I broke with r105142

        * Scripts/webkitpy/common/config/ports_unittest.py:
        (WebKitPortTest.test_gtk_port):

2012-01-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't set the 'primary' flag when mocking touch-points in MiniBrowser

        Qt 5 no longer has that flag.

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):

2012-01-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        GTK+ EWS needs to run update-webkitgtk-libs after applying a patch
        https://bugs.webkit.org/show_bug.cgi?id=75857

        Reviewed by Adam Barth.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject): move cleaning the build to happen early,
        and handle --update-gtk right after that
        * Scripts/webkitpy/common/config/ports.py:
        (GtkPort.build_webkit_command): pass --update-gtk as an option to
        build-webkit, so that it is used in the EWS

2012-01-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't add _debug postfix to targets when building debug only

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/functions.prf:

2012-01-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Add more files to project-files for easier navigation in Qt Creator

        Reviewed by Simon Hausmann.

        * Tools.pro:
        * qmake/config.tests/README: Added.

2012-01-17  Philippe Normand  <pnormand@igalia.com>

        [GTK] fast/dom/constructed-objects-prototypes.html fails
        https://bugs.webkit.org/show_bug.cgi?id=75432

        Reviewed by Martin Robinson.

        * Scripts/build-webkit: Enable video-track in GTK.

2012-01-16  Takashi Toyoshima  <toyoshim@chromium.org>

        Add toyoshim as a committer.
        https://bugs.webkit.org/show_bug.cgi?id=76390

        Reviewed by Hajime Morita.

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

2012-01-16  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Build fix after r104155. Several debug targets were not
        properly including the '*Common' property sheets.

        * DumpRenderTree/win/DumpRenderTreeLauncherDebugCairoCFLite.vsprops:
        * DumpRenderTree/win/ImageDiffLauncherDebugCairoCFLite.vsprops:
        * MiniBrowser/Configurations/MiniBrowserLauncherDebugCairoCFLite.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerLauncherDebugCairoCFLite.vsprops:
        * WinLauncher/WinLauncherLauncherDebugCairoCFLite.vsprops:

2012-01-16  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r105072): It broke committers_unittest.py
        https://bugs.webkit.org/show_bug.cgi?id=76396

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/committers_unittest.py:
        (CommittersTest._assert_fuzz_match): It should handle more names.
        (CommittersTest.test_contributors_by_fuzzy_match_with_legacy_names): Fix the testcase.

2012-01-16  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Include gtk+3 in the jhbuild modules
        https://bugs.webkit.org/show_bug.cgi?id=76284

        Reviewed by Philippe Normand.

        * gtk/jhbuild.modules: Add some gtk+3 to the jhbuild moduleset.

2012-01-16  Dan Winship  <danw@gnome.org>

        Add myself as a committer

        Unreviewed

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

2012-01-16  Raphael Kubo da Costa  <kubo@profusion.mobi>

        Unreviewed; fix the build when --as-needed and --no-copy-dt-needed-entries are passed to the linker.

        Some recent versions of a few Linux distributions have started passing
        --as-needed and --no-copy-dt-needed-entries by default to the linker,
        which broke the build when SHARED_CORE was turned on, as libwtf_efl.so
        needed a few symbols from libjavascriptcore_efl.so.

        * DumpRenderTree/efl/CMakeLists.txt: Explicitly pass WTF_LIBRARY_NAME
        before JavaScriptCore_LIBRARY_NAME in DumpRenderTree_LIBRARIES so the
        libraries are searched in the right order by the linker.

2012-01-16  Philippe Normand  <pnormand@igalia.com>

        [GTK] set audio resources path in NRTW
        https://bugs.webkit.org/show_bug.cgi?id=76380

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.setup_environ_for_server): Set $AUDIO_RESOURCES_PATH so
        the uninstalled audio resources are used during webaudio tests.

2012-01-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] ldflags and cflags should take precedence over the existing flags in gtkdoc.py
        https://bugs.webkit.org/show_bug.cgi?id=76369

        Reviewed by Xan Lopez.

        If there's an installed version of webkit and there are new
        symbols in the build tree, gtkdoc-scanobj fails due to undefined
        references, because the env ldflags are given before the local
        ones.

        * gtk/gtkdoc.py:
        (GTKDoc._run_gtkdoc_scangobj):

2012-01-15  Pablo Flouret  <pablof@motorola.com>

        Fix compilation errors on build-webkit --debug --no-video on mac.
        https://bugs.webkit.org/show_bug.cgi?id=75867

        Reviewed by Philippe Normand.

        Add --[no-]video-track to build-webkit, since video track feature
        depends on video.

        * Scripts/build-webkit:

2012-01-14  James Robinson  <jamesr@chromium.org>

        [chromium] Failing webkit_unit_tests does not make the cr-linux EWS bubble red
        https://bugs.webkit.org/show_bug.cgi?id=76313

        Reviewed by Adam Barth.

        The exit code of this script should be the exit code of webkit_unit_tests. Tested manually.

        * Scripts/run-chromium-webkit-unit-tests:

2012-01-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105017.
        http://trac.webkit.org/changeset/105017
        https://bugs.webkit.org/show_bug.cgi?id=76333

        broke the build (Requested by philn-tp on #webkit).

        * gtk/jhbuild.modules:

2012-01-14  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Include gtk+3 in the jhbuild modules
        https://bugs.webkit.org/show_bug.cgi?id=76284

        Reviewed by Philippe Normand.

        * gtk/jhbuild.modules: Add some gtk+3 to the jhbuild moduleset.

2012-01-13  Adam Barth  <abarth@webkit.org>

        Remove --dry-run support from webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=76300

        Reviewed by Dirk Pranke.

        This is the rest of the patch from Bug 76300.  I landed it separtely
        because main.py had some stray conflict markers that I needed to clean
        up first.

        * Scripts/webkitpy/test/main.py:
        (Tester.parse_args):
        (Tester._run_tests):

2012-01-13  Adam Barth  <abarth@webkit.org>

        test-webkitpy does not run
        https://bugs.webkit.org/show_bug.cgi?id=76318

        Unreviewed.

        Looks like some conflict markers got left in the file.

        * Scripts/webkitpy/test/main.py:
        (Tester.run):

2012-01-13  Adam Barth  <abarth@webkit.org>

        Remove --dry-run support from webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=76300

        Reviewed by Dirk Pranke.

        We don't use this functionality for anything, and it doesn't really
        work.  Someone in #webkit tried using it and and got sad/confused.  We
        should just remove it.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.push_local_commits_to_server):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.__init__):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (_shared_test_commit_with_message):
        (GitSVNTest.test_commit_text_parsing):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.commit_with_message):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.__init__):
        (Bugzilla.quips):
        (Bugzilla.authenticate):
        (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/test/main.py:
        (Tester.parse_args):
        (Tester.run_tests):

2012-01-13  David Levin  <levin@chromium.org>

        check-webkit-style: should encourage the use of Own* classes for Windows DC.
        https://bugs.webkit.org/show_bug.cgi?id=76227

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_leaky_patterns): The new check.
        (process_line): Added a call to the new check.
        (CppChecker): Added the new error type.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTestBase):
        (CppStyleTestBase.perform_leaky_pattern_check):
        The check for only leaky pattern errors.
        (LeakyPatternTest): Test cases.

2012-01-13  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: clean up handling of test directories, QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=76238

        Reviewed by Adam Barth.

        This patch cleans up a bunch of hacks related to how we find all
        of the python unit tests and set up the sys.path variable in
        test-webkitpy.

        This patch changes how test-webkitpy works slightly in that we
        will now look for test files under Tools/Scripts and Source/WebKit2/Scripts
        rather than just Tools/Scripts/webkitpy and Source/WebKit2/Scripts/webkit.
        This greatly simplifies the mapping of paths to module names and
        appears to have no significant performance impact or other drawbacks.

        There are other ways that we could remove all of the hacks and
        still have a more flexible mapping of paths to module names, but
        the ones I've thought of so far add a decent amount of complexity to
        the implementation and don't seem to buy us much.
        
        * QueueStatusServer/__init__.py:
        * Scripts/test-webkitpy:
        * Scripts/webkitpy/test/main.py:
        (Tester._modules_from_paths):
        (Tester._is_module):

2012-01-13  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: should support classes and individual test names as well as modules
        https://bugs.webkit.org/show_bug.cgi?id=76233

        Reviewed by Adam Barth.

        The default unittest.main() supports a list of individual
        TestCase classes or individual tests as well as modules. This
        change adds support for the same to test-webkitpy, so now you
        can say

          % test-wekbitpy webkitpy.test.cat_unittest.CatTest

        and

          % test-wekbitpy webkitpy.test.cat_unittest.CatTest.test_basic

        in addition to

          % test-wekbitpy webkitpy.test.cat_unittest

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/test/cat_unittest.py:
        * Scripts/webkitpy/test/main.py:
        (Tester.parse_args):
        (Tester.run):
        (Tester):
        (Tester._find_modules):
        (Tester._exclude):
        (Tester._run_tests):
        (Tester._is_module):
        (Tester._log_exception):

2012-01-13  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: add basic code coverage support
        https://bugs.webkit.org/show_bug.cgi?id=76201

        Reviewed by Adam Barth.

        This test adds basic code coverage support to test-webkitpy; if
        you pass the -c flag, we will generate a new coverage file. We
        can start simply with this and add more features as necessary.

        This patch requires coverage to be already installed on the
        machine. I am not auto-installing this for now.

        * Scripts/webkitpy/test/main.py:
        (Tester.parse_args):
        (Tester.run_tests):

2012-01-13  Dirk Pranke  <dpranke@chromium.org>

        StatusBubbleTest.test_build_bubble is failing
        https://bugs.webkit.org/show_bug.cgi?id=76222

        Reviewed by Adam Barth.

        * QueueStatusServer/handlers/statusbubble_unittest.py:
        (StatusBubbleTest.test_build_bubble):

2012-01-13  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        nrwt should use multiple http shards
        https://bugs.webkit.org/show_bug.cgi?id=75958

        Add --max-locked-shards option to the nrwt for manual set
        the maximum number of the locked shards

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._max_locked_shards):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ShardingTests.get_shards):
        (ShardingTests.test_multiple_locked_shards):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-01-13  Raphael Kubo da Costa  <kubo@profusion.mobi>

        prepare-ChangeLog: Look for a text editor in a few more variables.
        https://bugs.webkit.org/show_bug.cgi?id=76289

        Reviewed by Ryosuke Niwa.

        A text editor was looked for only in the CHANGE_LOG_EDITOR and
        CHANGE_LOG_EDIT_APPLICATION environment variables before falling back
        to the OS X-specific open(1) command.

        As there does not seem to be a common way of looking for a text editor
        among the scripts in Tools/Scripts right now, just look at $VISUAL and
        $EDITOR (set much more often than the other variables in Unix systems)
        before falling back to open(1).

        * Scripts/prepare-ChangeLog:
        (openChangeLogs):

2012-01-13  Gabor Rapcsanyi  <rgabor@webkit.org>

        [GTK] gtkdoc.py ignoring LDFLAGS and CFLAGS environment variables
        https://bugs.webkit.org/show_bug.cgi?id=76269

        Reviewed by Martin Robinson.

        * gtk/gtkdoc.py:
        (GTKDoc._run_gtkdoc_scangobj):

2012-01-13  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2]REGRESSION(r104881):It broke hundreds of tests
        https://bugs.webkit.org/show_bug.cgi?id=76247

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Disable mock scrollbars on Qt by default. (workaround)

2012-01-13  Hajime Morrita  <morrita@chromium.org>

        [Mac][DRT] Should support --no-timeout
        https://bugs.webkit.org/show_bug.cgi?id=76242

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions): Added "--no-timeout" to the options list.
        (setWaitToDumpWatchdog): Added to encapsulate the waitToDumpWatchdog global variable.
        (shouldSetWaitToDumpWatchdog): Added to check the useTimeoutWatchdog flag set by the option.
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setWaitToDump): Now calls shouldSetWaitToDumpWatchdog() to check the flag.

2012-01-12  Simon Fraser  <simon.fraser@apple.com>

        Mitigate scrollbar differences when running pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=67217

        Reviewed by Dan Bernstein.
        
        Enable mock scrollbars by default for tests.

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

2012-01-12  Ryosuke Niwa  <rniwa@webkit.org>

        Need a script to run tests in PerformanceTests
        https://bugs.webkit.org/show_bug.cgi?id=76132

        Reviewed by Adam Barth.

        Add run-perf-tests to run performance tests using parser/resources/runner.js.
        Unfortunately, there isn't an easy way of telling which test uses which format
        so hard-code directory that uses Chromium perf-bot style (only inspector perf. tests for now).

        All test outputs are re-formatted to match Chromium perf-bot style.

        * Scripts/run-inspector-perf-tests.py:
        * Scripts/run-perf-tests: Added.
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner.__init__):
        (PerfTestsRunner._collect_tests):
        (PerfTestsRunner.run):
        (PerfTestsRunner._print_status):
        (PerfTestsRunner._run_tests_set):
        (PerfTestsRunner._process_chromium_style_test_result):
        (PerfTestsRunner._should_ignore_line_in_parser_test_result):
        (PerfTestsRunner._process_parser_test_result):
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.TestDriver.run_test):
        (create_runner):
        (run_test):
        (test_run_test_set):
        (test_run_test_set_for_parser_tests):
        (test_collect_tests):

2012-01-12  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up port unit tests in preparation for making port_name mandatory
        https://bugs.webkit.org/show_bug.cgi?id=76123

        Reviewed by Adam Barth.

        This change updates the unit tests to be more consistent in how
        ports are created, in preparation for making port_name a
        mandatory parameter to the constructor and removing any version
        interpretation from it.

        There should be no functional changes in this patch, but some
        tests that are no longer relevant have been removed or reworked.

        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_get_option__default):
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        (ChromiumLinuxPortTest):
        (ChromiumLinuxPortTest.assert_architecture):
        (ChromiumLinuxPortTest.test_determine_architecture_fails):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest):
        (ChromiumPortTest.test_all_test_configurations):
        (ChromiumPortTest.TestMacPort.__init__):
        (ChromiumPortTest.TestLinuxPort.__init__):
        (ChromiumPortTest.TestWinPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest):
        * Scripts/webkitpy/layout_tests/port/efl_unittest.py:
        (EflPortTest):
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        (GtkPortTest):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacTest):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest):
        (MockDRTPortTest.make_port):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._port_flag_for_scripts):
        (QtPort.__init__):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest):
        (QtPortTest._assert_search_path):
        (QtPortTest.test_baseline_search_path):
        (QtPortTest.test_operating_system):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitPortTest):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest):
        (WinPortTest._assert_search_path):
        (WinPortTest.test_baseline_search_path):
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:
        (get_test_config.TestMacPort.__init__):

2012-01-12  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: clean up logging and provide a real --help message
        https://bugs.webkit.org/show_bug.cgi?id=76142

        Reviewed by Adam Barth.

        This test is mostly more refactoring - it calls objects in
        unittest directly instead of routing through unittest.main() --
        in order to gain more control over the logging and to provide a
        correct --help message. This will also give us a better
        foundation for adding more feautures down the road.

        This patch adds different levels of logging controlled by the
        '-s', '-q', and '-v' options (see --help for details), and
        removes the --verbose-logging option.

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/test/main.py:
        (Tester):
        (Tester.clean_packages):
        (Tester.__init__):
        (Tester.parse_args):
        (Tester.configure):
        (Tester._configure_logging):
        (Tester.find_modules):
        (Tester._exclude):
        (Tester._modules_from_paths):
        (Tester.run_tests):

2012-01-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Make the new WTF module build on Qt
        https://bugs.webkit.org/show_bug.cgi?id=76163

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/modules/wtf.prf: Pull in WTF from the new location.

2012-01-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed, mac DumpRenderTree fix.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:withSource:]):

2012-01-12  Vsevolod Vlasov  <vsevik@chromium.org>

        WebKitTestRunner should not print console message line number when it is equal to zero.
        https://bugs.webkit.org/show_bug.cgi?id=76167

        Reviewed by Csaba Osztrogonác.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willAddMessageToConsole):

2012-01-11  Vsevolod Vlasov  <vsevik@chromium.org>

        Make default console messages line numbers consistent.
        https://bugs.webkit.org/show_bug.cgi?id=74075

        Reviewed by Pavel Feldman.

        Unset line numbers are not printed to console now.
        Added Source/WebCore/inspector to efl DumpRenderTree include path.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didAddMessageToConsole):
        * DumpRenderTree/efl/CMakeLists.txt:
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onConsoleMessage):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewConsoleMessage):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:withSource:]):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::javaScriptConsoleMessage):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewAddMessageToConsole):
        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (LayoutWebViewEventHandler::OnConsoleMessageEvent):

2012-01-10  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: push more logic into webkitpy.test.main, clean up code
        https://bugs.webkit.org/show_bug.cgi?id=76021

        Reviewed by Eric Seidel.

        I plan to add more functionality to test-webkitpy, but it is
        difficult to hack on now; this patch is the first of two that
        brings test-webkitpy more inline with current coding style by
        pushing more logic into the webkitpy.test.main.Tester class (so
        that it will be testable itself).
        
        There should be no functional changes in this patch.

        * Scripts/test-webkitpy:
        (_path_from_webkit_root):
        * Scripts/webkitpy/test/main.py:
        (Tester):
        (Tester.init):
        (Tester.configure_logging):
        (Tester.configure_logging.filter):
        (Tester.clean_packages):
        (Tester.run_tests):

2012-01-11  Wei Jia  <wjia@chromium.org>

        implement layout tests for <video> with media stream
        https://bugs.webkit.org/show_bug.cgi?id=74882

        Reviewed by Kent Tamura.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/WebUserMediaClientMock.cpp: Added.
        (WebKit::WebUserMediaClientMock::create):
        (WebKit::WebUserMediaClientMock::IsMockStream):
        (WebKit::WebUserMediaClientMock::requestUserMedia):
        (WebKit::WebUserMediaClientMock::cancelUserMediaRequest):
        * DumpRenderTree/chromium/WebUserMediaClientMock.h: Added.
        (WebKit::WebUserMediaClientMock::~WebUserMediaClientMock):
        (WebKit::WebUserMediaClientMock::WebUserMediaClientMock):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::userMediaClient):
        (WebViewHost::userMediaClientMock):
        (WebViewHost::createMediaPlayer):
        (WebViewHost::mediaStreamUtil):
        (WebViewHost::testMediaStreamClient):
        * DumpRenderTree/chromium/WebViewHost.h:

2012-01-11  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Fix chromium-win's version remapping to work correctly on Win 7 SP1.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort.__init__):

2012-01-11  Ryosuke Niwa  <rniwa@webkit.org>

        Sheriffbot build fix. Don't emit empty lines on IRC.

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

2012-01-11  Ryosuke Niwa  <rniwa@webkit.org>

        last-green-revision should report the revision that succeeded on all bots
        https://bugs.webkit.org/show_bug.cgi?id=76109

        Reviewed by Adam Barth.

        Add an algorithm to find the last known good revision among the specified bots. For a revision to be
        considered green by this algorithm, all matching builders must have a successful run at the revision
        or two consecutive successful runs before and after the revision.

        Also fixed a bug in irc_command that the result wasn't posted on IRC properly and a bug in queries.py
        that resulted in an exception when the user didn't pass BUILDER_NAME argument.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot._revisions_for_builder):
        (BuildBot):
        (BuildBot._find_green_revision):
        (BuildBot.last_green_revision):
        * Scripts/webkitpy/common/net/buildbot/buildbot_mock.py:
        (MockBuildBot.last_green_revision):
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (test_revisions_for_builder):
        (test_find_green_revision):
        (test_last_green_revision):
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (LastGreenRevision.execute):
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:
        (SheriffIRCBotTest.test_lgr):
        * Scripts/webkitpy/tool/commands/queries.py:
        (LastGreenRevision):

2012-01-11  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, fix build bustage on win32 introduced by r104725.

        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest.make_port):
        (MockChromiumDRTTest.test_pixeltest__fails):

2012-01-11  Jochen Eisinger  <jochen@chromium.org>

        [Chromium] mimic the (old) behavior of the mac port for (re)setting the color profile
        https://bugs.webkit.org/show_bug.cgi?id=75618

        Eventually, we should get away from setting the display's color profile, as the mac port is doing now.

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/LayoutTestHelper.mm:
        (installLayoutTestColorProfile):
        (restoreUserColorProfile):
        (main):

2012-01-11  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: fix -v and eliminate some spurious warnings
        https://bugs.webkit.org/show_bug.cgi?id=76099

        Reviewed by Adam Barth.

        when we added support for --xml output, we broke the -v flag.

        Also, fix the code to swallow a harmless warning from
        VCSUtils.pm and fix a deprecated warning in jsonchecker.py.

        test-webkitpy is now silent again except for the one known
        logging issue.

        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout.commit_message_for_this_commit):
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (test_commit_message_for_this_commit):
        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONChecker.check):
        (JSONChecker.line_number_from_json_exception):
        * Scripts/webkitpy/test/main.py:
        (Tester.run_tests):

2012-01-11  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: webkitpy.layout_tests.port tests should only use MockSystemHost, not MockHost
        https://bugs.webkit.org/show_bug.cgi?id=76084

        Reviewed by Adam Barth.

        This will help make it easier to catch layering violations. This
        change just refactors test code; there are no changes to
        production code.

        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.make_port):
        (PortTest.test_find_no_paths_specified):
        (PortTest.test_find_one_test):
        (PortTest.test_find_glob):
        (PortTest.test_find_with_skipped_directories):
        (PortTest.test_find_with_skipped_directories_2):
        (PortTest.test_parse_reftest_list):
        (PortTest.test_httpd_returns_error_code):
        (PortTest.test_virtual_methods):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        (ChromiumGpuTest.assert_port_works):
        (ChromiumGpuTest._assert_baseline_path):
        (ChromiumGpuTest.test_graphics_type):
        (ChromiumGpuTest.test_default_tests_paths.test_paths):
        (ChromiumGpuTest.test_test_files):
        (ChromiumGpuTest.test_test_files.test_paths):
        (ChromiumGpuTest):
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        (ChromiumLinuxPortTest.assert_architecture):
        (ChromiumLinuxPortTest.test_check_illegal_port_names):
        (ChromiumLinuxPortTest.test_determine_architecture_fails):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverTest.make_port):
        (DriverTest):
        (DriverTest.assertVirtual):
        (DriverTest._assert_wrapper):
        (DriverTest.test_virtual_driver_methods):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest.make_port):
        (MockDRTPortTest.test_port_name_in_constructor):
        (MockDRTTest.assertTest):
        (MockDRTTest.test_main):
        (MockChromiumDRTTest.test_pixeltest__fails):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest._assert_search_path):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (TestWebKitPort.__init__):
        (WebKitPortUnitTests.test_default_options):
        (test_runtime_feature_list):
        (test_test_expectations):

2012-01-11  Ojan Vafai  <ojan@chromium.org>

        Style skipped tests in the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=76091

        Reviewed by Tony Chang.

        * TestResultServer/static-dashboards/dashboard_base.js:
        Removed "FLAKY" from this list since we don't ever mark individual runs
        as flaky. Also deleted an outdated line.
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2012-01-11  Ojan Vafai  <ojan@chromium.org>

        Remove gtest normalization code from the test results server
        https://bugs.webkit.org/show_bug.cgi?id=76089

        Reviewed by Tony Chang.

        The normalization now happens on the gtest side.

        * TestResultServer/model/jsonresults.py:
        (JsonResults.merge):
        * TestResultServer/model/jsonresults_unittest.py:
        (JsonResultsTest.test_gtest):

2012-01-11  Ojan Vafai  <ojan@chromium.org>

        Be more aggressive about deleting unnecessary results from the test-results-server json files
        https://bugs.webkit.org/show_bug.cgi?id=76086

        Reviewed by Tony Chang.

        Remove any tests that only contain skip/pass/nodata values whose runtime
        is less than 5 seconds.

        * TestResultServer/model/jsonresults.py:
        (JsonResults._normalize_results_json):
        * TestResultServer/model/jsonresults_unittest.py:
        (JsonResultsTest.test_merge_remove_test):
        (JsonResultsTest.test_merge_keep_test_with_all_pass_but_slow_time):

2012-01-11  Ryosuke Niwa  <rniwa@webkit.org>

        last-green-revision should give us per-bot information
        https://bugs.webkit.org/show_bug.cgi?id=76011

        Reviewed by Adam Barth.

        Rewrote last-green-revision command. Instead of finding a revision for which all bots succeeded,
        we report the latest green run on each bot from the last 100 runs.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot._fetch_builder_page):
        (BuildBot):
        (BuildBot._green_revision_for_builder):
        (BuildBot.last_green_revision):
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (test_green_revision_for_builder):
        (test_last_green_revision):
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (LastGreenRevision.execute):
        * Scripts/webkitpy/tool/commands/queries.py:
        (LastGreenRevision.execute):

2012-01-11  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up version detection in webkitpy.layout_tests.port
        https://bugs.webkit.org/show_bug.cgi?id=76016

        Reviewed by Adam Barth.

        This change updates the code in webkitpy.layout_tests.port to
        use the new os_name and os_version fields on host.platform. This
        gets layout_tests.port out of the version parsing business. Most
        of the diffs are just cleaning up test code to accomodate the
        changes.

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive):
        (MockExecutive.ignore_error):
        (MockExecutive2):
        (MockExecutive2.ignore_error):
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.is_mac):
        (MockPlatformInfo.is_linux):
        (MockPlatformInfo.is_win):
        * Scripts/webkitpy/common/system/systemhost_mock.py:
        (MockSystemHost.__init__):
        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.__init__):
        (ChromiumMacPort.check_wdiff):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest):
        (ChromiumMacPortTest.assert_name):
        (ChromiumMacPortTest.test_versions):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_all_test_configurations):
        (ChromiumPortTest.TestMacPort.__init__):
        (ChromiumPortTest.TestLinuxPort.__init__):
        (ChromiumPortTest.TestWinPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest):
        (ChromiumWinTest.assert_name):
        (ChromiumWinTest.test_versions):
        (ChromiumWinTest.test_baseline_path):
        (ChromiumWinTest.test_build_path):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory._port_name_from_arguments_and_options):
        (PortFactory.get):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest):
        (FactoryTest.setUp):
        (FactoryTest.assert_port):
        (FactoryTest.test_mac):
        (FactoryTest.test_win):
        (FactoryTest.test_google_chrome):
        (FactoryTest.test_gtk):
        (FactoryTest.test_qt):
        (FactoryTest.test_chromium_gpu):
        (FactoryTest.test_chromium_gpu_linux):
        (FactoryTest.test_chromium_gpu_mac):
        (FactoryTest.test_chromium_gpu_win):
        (FactoryTest.test_chromium_mac):
        (FactoryTest.test_chromium_linux):
        (FactoryTest.test_chromium_win):
        (FactoryTest.test_unknown_specified):
        (FactoryTest.test_unknown_default):
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        (TestGoogleChromePort):
        (TestGoogleChromePort._verify_baseline_path):
        (TestGoogleChromePort._verify_expectations_overrides):
        (TestGoogleChromePort.test_get_google_chrome_port):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacTest):
        (assert_name):
        (test_tests_for_other_platforms):
        (test_version):
        (test_versions):
        (test_is_version_methods):
        (test_setup_environ_for_server):
        (_assert_search_path):
        (test_show_results_html_file):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase):
        (PortTestCase.make_port):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest):
        (WinPortTest.test_show_results_html_file):
        (WinPortTest._assert_search_path):
        (WinPortTest._assert_version):

2012-01-11  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [Qt][WK2] Remove workaround introduced into bug 75470
        https://bugs.webkit.org/show_bug.cgi?id=75889

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-01-10  Dmitry Lomov  <dslomov@google.com>

        [Chromium] Remove obsolete references to WebWorker class.
        https://bugs.webkit.org/show_bug.cgi?id=76020

        Reviewed by David Levin.

        * DumpRenderTree/chromium/TestWebWorker.h: Removed.
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:

2012-01-11  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Some css3 filter tests are failing after r104698
        https://bugs.webkit.org/show_bug.cgi?id=76055

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference): Add WebKitAcceleratedCompositingEnabled preference.

2012-01-11  Tony Chang  <tony@chromium.org>

        Don't remove 0 byte files when running build-webkit --chromium
        https://bugs.webkit.org/show_bug.cgi?id=75997

        Reviewed by Csaba Osztrogonác.

        If QTDIR is set, isQt() is true even when running build-webkit --chromium.

        * Scripts/webkitdirs.pm:
        (determineIsQt):

2012-01-10  David Kilzer  <ddkilzer@apple.com>

        Add TestWebKitAPI tests for KURL
        <http://webkit.org/b/75774>

        Reviewed by Adam Barth.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add a
        WebCore folder and KURL.cpp source file to the project.
        * TestWebKitAPI/Tests/WebCore/KURL.cpp: Added.
        (TestWebKitAPI::WebCore::SetUp): Initialize the main thread
        during setup since this test doesn't go through WebKit or
        WebKit2.
        (TestWebKitAPI::TEST_F): Add two basic tests.

2012-01-10  David Kilzer  <ddkilzer@apple.com>

        Extract common code for comparing WTF::String objects into WTFStringUtilities.h

        Reviewed by Adam Barth.

        Needed for: <http://webkit.org/b/75774> Add TestWebKitAPI tests for KURL

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add
        WTFStringUtilities.h to the project.
        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp: Update to use
        WTFStringUtilities.h.
        * TestWebKitAPI/WTFStringUtilities.h: Added.
        (WTF::operator<<):

2012-01-10  Vincent Scheib  <scheib@chromium.org>

        Clarify run-webkit-tests options reset-results and new-baseline
        https://bugs.webkit.org/show_bug.cgi?id=75993

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-01-10  Simon Fraser  <simon.fraser@apple.com>

        Disabled mock scrollbars should draw differently
        https://bugs.webkit.org/show_bug.cgi?id=75995

        Reviewed by James Robinson.

        When the scrollbar is disabled, paint the entire track of
        mock scrollbars with a lighter gray, and hide the thumb.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (-[DRTMockScroller drawKnob]):
        (-[DRTMockScroller drawRect:]):

2012-01-10  James Robinson  <jamesr@chromium.org>

        [chromium] Run webkit_unit_tests as part of webkit-patch build-and-test
        https://bugs.webkit.org/show_bug.cgi?id=75988

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/ports.py:
        (WebKitPort.run_webkit_unit_tests_command):
        (WebKitPort):
        (ChromiumPort.run_webkit_unit_tests_command):
        (ChromiumPort):
        * Scripts/webkitpy/common/config/ports_mock.py:
        (MockPort.run_webkit_unit_tests_command):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (DownloadCommandsTest.test_build_and_test):
        (test_land):
        (test_land_red_builders):
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:

2012-01-09  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: add os_name, os_version to platforminfo
        https://bugs.webkit.org/show_bug.cgi?id=75931

        Reviewed by Eric Siedel.

        As a first step in cleaning up the version parsing logic in
        webkitpy.layout_tests.port, this adds common routines for
        getting the os_name and os_version fields to the PlatformInfo
        class. Nothing uses them yet but I've added FIXME's to some of
        the code that needs to be deleted in the port files.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__):
        (PlatformInfo):
        (PlatformInfo._determine_os_name):
        (PlatformInfo._determine_mac_version):
        (PlatformInfo._determine_linux_version):
        (PlatformInfo._determine_win_version):
        (PlatformInfo.display_name):
        (PlatformInfo.total_bytes_memory):
        (PlatformInfo._compute_bytes_from_vm_stat_output):
        (PlatformInfo.free_bytes_memory):
        * Scripts/webkitpy/common/system/platforminfo_unittest.py: Added.
        (TestPlatformInfo):
        (TestPlatformInfo.make_info):
        (TestPlatformInfo.make_info.mock_run_command):
        (TestPlatformInfo.setUp):
        (TestPlatformInfo.tearDown):
        (TestPlatformInfo.test_basic):
        (TestPlatformInfo.integration_test_basic):
        (TestPlatformInfo.test_display_name_mac):
        (TestPlatformInfo.test_display_name_win32):
        (TestPlatformInfo.test_memory_mac):
        (TestPlatformInfo.test_memory_win32):
        (TestPlatformInfo.test_determine_os_name):
        (TestPlatformInfo.test_determine_mac_version):
        (TestPlatformInfo.test_determine_linux_version):
        (TestPlatformInfo.test_determine_win_version_from_tuple):
        (TestPlatformInfo.test_determine_win_version_from_cmd):
        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.__init__):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort):

2012-01-10  Adam Roben  <aroben@apple.com>

        Make it possible to type data: URLs into MiniBrowser on Windows

        Fixes <http://webkit.org/b/75084> Crash when trying to navigate to a data: URL in
        MiniBrowser on Windows

        Reviewed by Darin Adler.

        * MiniBrowser/win/BrowserWindow.cpp:
        (BrowserWindow::handleMessage): Instead of checking for an "http://" prefix when deciding
        whether to prepend "http://", just look for whether the typed URL contains a colon. If it
        does, we assume it already has a scheme and don't modify it.

2012-01-10  Adam Roben  <aroben@apple.com>

        Make MiniBrowser automatically escape invalid URL characters typed in its URL field

        Fixes <http://webkit.org/b/75086> Crash when typing a data: URL containing double-quotes in
        MiniBrowser on Windows

        Reviewed by Darin Adler.

        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::goToURL): Pass the typed string through
        CFURLCreateStringByAddingPercentEscapes before trying to create a URL from it.

2012-01-10  Ben Wells  <benwells@chromium.org>

        Adding myself (benwells) to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=75971

        Reviewed by Ojan Vafai.

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

2012-01-10  Mario Sanchez Prada  <msanchez@igalia.com>

        AX: support helpText() in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=40193

        Reviewed by Chris Fleizach.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::helpText): Implemented.

2012-01-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r104572.
        http://trac.webkit.org/changeset/104572
        https://bugs.webkit.org/show_bug.cgi?id=75967

        It broke zillion tests (Requested by Ossy on #webkit).

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::EventSender):
        (EventSender::sendOrQueueEvent):
        (EventSender::replaySavedEvents):
        (EventSender::eventFilter):
        * DumpRenderTree/qt/EventSenderQt.h:

2012-01-10  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [Qt] fast/events/dont-loose-last-event test fails on WK1
        https://bugs.webkit.org/show_bug.cgi?id=73894

        Reviewed by Simon Hausmann.

        Empty the entire event queue when requested besides using
        sendEvent instead of postEvent to make sure all events were
        delivered.
        This commit also removes not working DRT code to handle drag and drop,
        for more refs see: https://bugs.webkit.org/show_bug.cgi?id=31332

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::EventSender):
        (EventSender::sendOrQueueEvent):
        (EventSender::replaySavedEvents):
        * DumpRenderTree/qt/EventSenderQt.h:

2012-01-10  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Enable CSS_FILTERS in Qt build
        https://bugs.webkit.org/show_bug.cgi?id=75777

        Add the CSS_FILTERS feature flag to Qt.

        Reviewed by Kenneth Rohde Christiansen.

        * qmake/mkspecs/features/features.prf:

2012-01-10  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Unreviewed -Werror build fix.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication): Re-order initialization to match
        declaration.

2012-01-10  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Remove dependency to uitools
        https://bugs.webkit.org/show_bug.cgi?id=75952

        Reviewed by Tor Arne Vestbø.

        QUiLoader is used for creating QLabel/QProgressBar widgets for
        a layout test, to verify some widget embedding feature. Unfortunately
        in Qt 5, QUiLoader is part of qttools, which depends on webkit, which
        depends on qttools. Since we don't really _need_ QUiLoader for our tests,
        let's break the circular dependency.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::createPlugin):
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.h:
        * QtTestBrowser/webpage.cpp:
        (WebPage::createPlugin):
        * qmake/mkspecs/features/minimal_qt.prf:
        * qmake/mkspecs/features/uitools.prf: Removed.

2012-01-10  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Don't expose m_windowOptions as part of the public interface in MiniBrowserApplication
        https://bugs.webkit.org/show_bug.cgi?id=75894

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/MiniBrowserApplication.h:
        (MiniBrowserApplication::windowOptions):
        * MiniBrowser/qt/main.cpp:
        (main):

2012-01-10  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] DRT crashes with Qt 5
        https://bugs.webkit.org/show_bug.cgi?id=75951

        Reviewed by Ossy.

        * DumpRenderTree/qt/fonts.conf: Add missing last-resort font fallback for Qt 5 where
        Qt relies on font-config to define the default font family.

2012-01-10  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] REGRESSION(r100130): Clean build feature is broken.
        https://bugs.webkit.org/show_bug.cgi?id=75863

        Reviewed by Tor Arne Vestbø.

        * Scripts/webkitdirs.pm:
        (buildQMakeProject):

2012-01-10  Zeno Albisser  <zeno@webkit.org>

        [Qt][WK2] Fix keyboard shortcuts in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=75885

        In QML events are propagated through parents. But since the
        WebView may consume key events, a shortcut might never reach
        the top QtQuickItem.
        Therefore an application wide event handling function in C++
        needs to take care of shortcuts for MiniBrowser.

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::reload):
        (BrowserWindow::focusAddressBar):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-01-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add --efl alias for --platform=efl to run-webkit-test
        https://bugs.webkit.org/show_bug.cgi?id=75937

        Reviewed by Andreas Kling.
        
        * Scripts/run-webkit-tests: Add --efl alias.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: Add --efl alias.
        (parse_args):

2012-01-09  Dan Bernstein  <mitz@apple.com>

        -[DOMRange renderedImageForcingBlackText:] fails with non-user-selectable text
        https://bugs.webkit.org/show_bug.cgi?id=75920

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/mac/RenderedImageFromDOMRange.mm:
        (TestWebKitAPI::TEST): Added a test for a range in a
        -webkit-user-select: none; block.

2012-01-09  Dirk Pranke  <dpranke@chromium.org>

        webkitpy.layout_tests.port.mock_drt_unittest.MockChromiumDRTTest has been failing on cr-win
        https://bugs.webkit.org/show_bug.cgi?id=75884

        Reviewed by Ryosuke Niwa.

        Fix regression introduced (revealed?) in r104340. Chromium file         
        url syntax is different on win32 and the test results weren't           
        expecting that.                                                         

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations._report_errors):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_parse_error_nonfatal):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTTest.input_line):
        (MockChromiumDRTTest.test_pixeltest__fails):
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        (TestRebaseliner.make_rebaseliner):
        (TestRebaseliner.test_one_platform):
        (TestRebaseliner.test_all_platforms):
        (TestRebaseliner.test_png_file_with_comment):
        (TestRebaseliner.test_png_file_with_comment_remove_old_checksum):
        (TestRebaseliner.test_png_file_with_comment_as_duplicate):
        (TestRealMain.test_all_platforms):

2012-01-09  Dirk Pranke  <dpranke@chromium.org>

        Fix regression in test-webkitpy introduced by removing the webkitpy/python24 directory.

        Unreviewed, build fix.

        test-webkitpy had a built-in self-test routine to verify that
        deleting the .pyc files worked correctly. When I removed the
        python24 directory in r104482, I broke the self-test.

        I have deleted the self-test for now. Since I am reworking
        test-webkitpy I will make sure the new version is adequately
        tested.

        * Scripts/test-webkitpy:
        (configure_logging):
        (_clean_pyc_files):
        (_clean_packages):
        (init):

2012-01-09  Justin Novosad  <junov@chromium.org>

        [Chromium] remove all references to the legacy accelerated 2d Canvas
        implementation
        https://bugs.webkit.org/show_bug.cgi?id=75108

        Purging an old settings flag that is no longer referenced

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setAccelerated2dCanvasEnabled):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:

2012-01-09  Adam Roben  <aroben@apple.com>

        Convert Cygwin paths to Windows paths before passing them to DRT

        Fixes <http://webkit.org/b/64468> <rdar://problem/10663409> WIN: DumpRenderTree hangs under
        NRWT

        I couldn't find a way to test this because I couldn't figure out how to override the
        cygpath function as it is used by WebKitDriver.

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver._command_from_driver_input): On Cygwin, convert the test's path to a
        Windows-style path before passing it to DRT.

2012-01-06  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: revamp version checking
        https://bugs.webkit.org/show_bug.cgi?id=75765

        Reviewed by Adam Barth.

        The version-checking code in webkitpy/python24/versioning seems really
        awkward and overdesigned, especially since we don't support python 2.4
        any more.

        In addition, I am tired of getting warnings about Python 2.6 being "a
        newer release than what is supported" :).

        I'm taking a page from the depot_tools python code and just creating a
        new webkitpy.common.version_check module that will print a message on
        stderr and call sys.exit() if we're running an unsupported version.

        * Scripts/check-webkit-style:
        * Scripts/new-run-webkit-httpd:
        * Scripts/new-run-webkit-tests:
        * Scripts/rebaseline-chromium-webkit-tests:
        * Scripts/test-webkitpy:
        (configure_logging):
        (init):
        * Scripts/webkit-patch:
        (main):
        * Scripts/webkitpy/common/system/executive.py:
        (Executive._child_process_encoding):
        (Executive._should_encode_child_process_arguments):
        * Scripts/webkitpy/common/version_check.py: Copied from Tools/Scripts/rebaseline-chromium-webkit-tests.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/python24/__init__.py: Removed.
        * Scripts/webkitpy/python24/versioning.py: Removed.
        * Scripts/webkitpy/python24/versioning_unittest.py: Removed.

2012-01-09  Adam Barth  <abarth@webkit.org>

        Remove Chromium Mac CG from the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=75873

        Reviewed by Ojan Vafai.

        This configuration no longer exists.

        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (testOverrideJustBuildType):
        (testPlatformAndBuildType):

2012-01-06  Adam Roben  <aroben@apple.com>

        Print an error message when NRWT can't run Apache

        Fixes <http://webkit.org/b/75712> NRWT mysteriously exits when Apache returns an error code

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.check_httpd): Print an error message when Apache returns an error code instead of
        failing silently.

        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_check_httpd_success): Test that we don't print anything when we successfully
        run Apache.
        (PortTest.test_httpd_returns_error_code): Test that we print an error message when Apache
        fails.

2012-01-09  Gabor Rapcsanyi  <rgabor@webkit.org>

        [Gtk][ARM] Cross compiler buildbot is failing after r103040
        https://bugs.webkit.org/show_bug.cgi?id=75846

        Reviewed by Philippe Normand.

        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProjectIfNecessary):

2012-01-09  Alexander Færøy  <ahf@0x90.dk>

        [Qt] Add support for dynamically enabling and disabling touch mocking in the Qt MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=75807

        This patch adds a new icon to navigationbar of the Qt MiniBrowser
        which allows you to dynamically toggle whether touch mocking is
        enabled or disabled.

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):
        (WindowOptions::touchMockingEnabled):
        (WindowOptions::setTouchMockingEnabled):
        * MiniBrowser/qt/icons/touch.png: Added.
        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-01-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck issues.

        * MiniBrowser/gtk/GNUmakefile.am:

2012-01-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r104421.
        http://trac.webkit.org/changeset/104421
        https://bugs.webkit.org/show_bug.cgi?id=75816

        Need to rebaseline some tests on Linux (Requested by noamr on
        #webkit).

        * qmake/mkspecs/features/features.prf:

2012-01-08  Adam Barth  <abarth@webkit.org>

        Remove support for Chromium Mac CG from garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=75814

        Reviewed by Eric Seidel.

        This configuration no longer exists.  This patch is mostly a matter of
        updating config.js and removing the examples from the unit tests.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:

2012-01-08  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Enable CSS_FILTERS in Qt build
        https://bugs.webkit.org/show_bug.cgi?id=75777

        Add the CSS_FILTERS feature flag to Qt.

        Reviewed by Kenneth Rohde Christiansen.

        * qmake/mkspecs/features/features.prf:

2012-01-08  Ryosuke Niwa  <rniwa@webkit.org>

        Categorize bots by ports instead of core/non-core separation
        https://bugs.webkit.org/show_bug.cgi?id=75766

        Reviewed by Eric Seidel.

        Rename categorizes so as to preserve the original ordering of bots per Eric's suggestion
        (Chromium still comes before GTK and Qt).

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (loadBuilderConfig):
        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2012-01-08  Ryosuke Niwa  <rniwa@webkit.org>

        Remove the concept of core builders from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=75809

        Reviewed by Ryosuke Niwa.

        Treat all bots equally since core/non-core sepration has been removed from build.webkit.org,
        and remove the relevant code.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot.__init__):
        (BuildBot._matches_regexps):
        (BuildBot._builder_statuses_with_names_matching_regexps):
        (BuildBot.builder_statuses):
        (BuildBot.failure_map):
        (BuildBot._latest_builds_from_builders):
        (BuildBot.last_green_revision):
        * Scripts/webkitpy/common/net/buildbot/buildbot_mock.py:
        (MockBuildBot.builder_statuses):
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (test_status_parsing):
        (test_last_green_revision):
        (test_last_green_revision.mock_builds_from_builders):

2012-01-08  Adam Barth  <abarth@webkit.org>

        Remove Chromium Mac CG concept from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=75810

        Reviewed by Ryosuke Niwa.

        This configuration no longer exists.  We can remove all the supporting
        code from webkitpy.

        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        (BaselineOptimizerTest.test_move_baselines):
        (BaselineOptimizerTest.test_chromium_covers_mac_win_linux):
        (BaselineOptimizerTest.test_chromium_mac_redundant_with_apple_mac):
        (BaselineOptimizerTest.test_common_directory_includes_root):
        (BaselineOptimizerTest.test_complex_shadowing):
        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build):
        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest):
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        (ChromiumPort._generate_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        (_default_tests_paths):
        (ChromiumGpuLinuxPort.tests):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        (ChromiumGpuTest.integration_test_chromium_gpu_mac):
        (ChromiumGpuTest.assert_port_works):
        (ChromiumGpuTest.test_baseline_paths):
        (ChromiumGpuTest.test_graphics_type):
        (ChromiumGpuTest.test_default_tests_paths):
        (ChromiumGpuTest.test_test_files):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort):
        (ChromiumMacPort.__init__):
        (ChromiumMacPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_graphics_type):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory._port_name_from_arguments_and_options):
        (PortFactory.get):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.test_chromium_gpu_mac):
        (FactoryTest.test_chromium_mac):
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        (GetGoogleChromePortTest._verify_expectations_overrides):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockChromiumDRTTest.test_chromium_parse_options):
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        (test_url_fetcher):
        (test_zip_factory):
        (test_archive):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline_expectations):

2012-01-08  Ryosuke Niwa  <rniwa@webkit.org>

        Categorize bots by ports instead of core/non-core separation
        https://bugs.webkit.org/show_bug.cgi?id=75766

        Reviewed by Adam Barth.

        Get rid of the concept of core/non-core builders, and categorize build bots by ports instead.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (loadBuilderConfig):
        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2012-01-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r104403.
        http://trac.webkit.org/changeset/104403
        https://bugs.webkit.org/show_bug.cgi?id=75803

        It broke all tests on Qt5 (Requested by Ossy_weekend on
        #webkit).

        * qmake/mkspecs/features/features.prf:

2012-01-08  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Enable CSS_FILTERS in Qt build
        https://bugs.webkit.org/show_bug.cgi?id=75777

        Add the CSS_FILTERS feature flag to Qt.

        Reviewed by Kenneth Rohde Christiansen.

        * qmake/mkspecs/features/features.prf:

2012-01-04  Kentaro Hara  <haraken@chromium.org>

        Rewrite the CSS parser of prepare-ChangeLog with unittests.
        https://bugs.webkit.org/show_bug.cgi?id=75202

        Reviewed by David Kilzer.

        The current CSS parser can just parse simple CSSes like

            foo bar baz {
                property1: value;
                property2: value;
            }

        , and cannot parse comments nor a CSS in which a selector and {
        appears in different lines. This patch rewrites the CSS parser
        (i.e. get_selector_line_ranges_for_css()) so that it can parse more CSSes
        shown in css_unittests.css.

        Test: Scripts/webkitperl/prepare-ChangeLog_unittest/resources/css_unittests.css

        * Scripts/prepare-ChangeLog:
        (get_selector_line_ranges_for_css):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/css_unittests-expected.txt: Added.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/css_unittests.css: Added.
        (element1):
        (element2):
        (element3):
        (element4.p):
        (element5.p.q.r.s):
        (element6#p):
        (element7 element8):
        (element9.p element10.q):
        (element11#p element12#q):
        (element13, element14):
        (.p):
        (#p):
        (.p element15 #q element16.r element17#s):
        (element18:target):
        (element19):
        (element20):
        (element21):
        (element22):

2012-01-04  Kentaro Hara  <haraken@chromium.org>

        The Perl parser of prepare-ChangeLog can parse here-documents
        https://bugs.webkit.org/show_bug.cgi?id=73208

        Reviewed by David Kilzer.

        Currently prepare-ChangeLog cannot recognize here-documents in Perl,
        which results in wrong subroutine names in ChangeLogs.
        With this patch, prepare-ChangeLog can judge whether the line of "}"
        is the end of a subroutine or a line inside a here-document.

        Test: Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests.pl

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_perl):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests-expected.txt:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests.pl:
        Added test cases for here-documents.
        (func7):
        (func8):
        (func9):
        (func10):
        (func11):
        (func12):
        (func13):
        (func14):
        (func15):
        (func16):

2012-01-08  Kentaro Hara  <haraken@chromium.org>

        Add unittests for the JavaScript parser of prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=75201

        Reviewed by David Kilzer.

        javascript_unittests.js is a unittest for get_function_line_ranges_for_javascript()
        of prepare-ChangeLog.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_javascript): Before this patch, a string found was just
        omitted from parsing. Thus,

            str = "foo"
            function func() {
            }

        was recognized as equivalent to

            str = function func() {
            }

        This patch replaces a string with a dummy identifier 'string_appeared_here'
        to tell the parser that a string appeared there.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/javascript_unittests-expected.txt: Added.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/javascript_unittests.js: Added.
        (func1):
        (func2):
        (func3):
        (func4):
        (func5):
        (func6):
        (func7):
        (func8):
        (func9):
        (func10):
        (func11):
        (func12):
        (funcOverloaded):
        (Func1.prototype.get x1):
        (Func1.prototype.get x2):
        (Func1.prototype.set x1):
        (Func1.prototype.set x3):
        (Func2.prototype.func13):
        (Func2.prototype.func14):
        (Func2.prototype.func15):
        (func16.func17):
        (func16.func18):
        (func16.func19):
        (func16):

2012-01-08  David Levin  <levin@chromium.org>

        [chromium] Add layout test support for autosize code in FrameView.
        https://bugs.webkit.org/show_bug.cgi?id=73631

        Reviewed by Dmitry Titov.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): Expose the new autoresize method.
        (LayoutTestController::reset): Set the autoresize mode back to false.
        (LayoutTestController::enableAutoResizeMode): A way to turn on autoresizing from javascript code in DumpRenderTree.
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didAutoResize): Handle the autoresize callback so that the outer bounds change appropriately.
        * DumpRenderTree/chromium/WebViewHost.h:

2012-01-07  Zan Dobersek  <zandobersek@gmail.com>

        [WK2][GTK] Each test takes roughly half a second to load
        https://bugs.webkit.org/show_bug.cgi?id=70699

        Reviewed by Martin Robinson.

        Set the XDG_CACHE_HOME environment variable when testing with
        WebKitTestRunner. This way the testing is started with a non-existing
        application cache. If the cache exists and is not empty, the emptying
        and vacuuming that is performed before every test can consume a lot of
        time.

        This is just a temporary workaround until it becomes possible to set
        a desired directory to be used as the application cache location through
        WebKitWebContext.

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

2012-01-07  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Enable requestAnimationFrame in build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=75773

        Reviewed by Martin Robinson.

        Enable requestAnimationFrame for the Gtk port.

        * Scripts/build-webkit:

2012-01-06  Jarred Nicholls  <jarred@sencha.com>

        Unreviewed build-webkit fix for Chromium to properly use make if gyp generates Makefiles.

        * Scripts/webkitdirs.pm:
        (buildChromium):
        Missing parentheses.

2012-01-06  Simon Fraser  <simon.fraser@apple.com>

        Fix DRT build on case-sensitive file systems.

        Fix case of include of WebDynamicScrollBarsView.h
        
        * DumpRenderTree/mac/DumpRenderTree.mm:

2012-01-06  Simon Fraser  <simon.fraser@apple.com>

        Pixel results from DumpRenderTree and WebKitTestRunner don't match because of colorspace issues
        https://bugs.webkit.org/show_bug.cgi?id=75662

        Reviewed by Dan Bernstein.
        
        The pixel results generated by DumpRenderTree and WebKitTestRunner differed because
        of color profile issues. Fix by keeping everything in device RGB and ensuring that the
        test window uses the main display's color space, so that the pixel values in the bitmap
        that gets checksummed are identical to the CSS colors.
        
        Removed the code that switches the display profile in DRT, since that is no longer required.

        * DumpRenderTree/PixelDumpSupport.h: Remove unused function declarations.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (crashHandler): Remove code that switches display profiles.
        (prepareConsistentTestingEnvironment): Ditto.
        (dumpRenderTree): Ditto.
        * DumpRenderTree/mac/PixelDumpSupportMac.mm: Ditto.
        (createBitmapContext): Use DeviceRGB for the bitmap colorspace.
        (createBitmapContextFromWebView): Add comment about the colorspace handling.
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::createCGContextFromImage): Use a RetainPtr, add comment.
        (WTR::computeMD5HashStringForContext): Simplify the #ifdefs around the braces.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView): Set the window's colorspace to that of the main display.
        (WTR::PlatformWebView::windowSnapshotImage): Add comment about colorspaces.

2012-01-06  David Kilzer  <ddkilzer@apple.com>

        run-api-tests: specify individual suites and tests on the command-line

        Reviewed by Adam Roben.

        Fixes: <http://webkit.org/b/75065> run-api-tests should be able to run individual suites and tests

        The run-api-tests script will now accept a list of arguments on
        the command-line that are used as prefix filters.  To run all
        tests in a suite that starts with "WTF" (WTF and WTF_Vector)
        use:

            $ run-api-tests WTF

        To run only the tests in the "WTF" suite, not the "WTF_Vector"
        suite, use:

            $ run-api-tests WTF.

        * Scripts/run-api-tests: Filter tests if any prefix arguments
        are passed on the command-line.

2012-01-06  David Kilzer  <ddkilzer@apple.com>

        run-api-tests: change internal representation of tests to array of "SuiteName.TestName" strings

        Reviewed by Adam Roben.

        Part of: <http://webkit.org/b/75065> run-api-tests should be able to run individual suites and tests

        * Scripts/run-api-tests:
        (dumpTestsBySuite): Update to accept array of tests instead of
        hash data structure.
        (runTestsBySuite): Ditto.
        (listAllTests): Rename from populateTests().  Update to return
        an array of tests instad of the hash data structure.

2012-01-05  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up test/uri conversion routines
        https://bugs.webkit.org/show_bug.cgi?id=75648

        Reviewed by Eric Seidel.

        This change moves test_to_uri and uri_to_test from the Port
        class to the Driver class (the routines were only being
        called by the drivers), and removes a bunch of stale and/or
        busted logic.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (is_http_test):
        (test_to_uri):
        (uri_to_test):
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        (run_one_test):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTTest.input_line):
        (input_line):
        (expected_output):
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (_command_from_driver_input):

2012-01-06  Simon Fraser  <simon.fraser@apple.com>

        Mitigate scrollbar differences when running pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=67217

        Reviewed by Dan Bernstein.
        
        Add an NSScroller subclass that draws mock scrollbars identically
        to the WebCore mock scrollbar theme, and register it with the
        WebDynamicScrollbarsView.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (-[DRTMockScroller rectForPart:]):
        (-[DRTMockScroller drawKnob]):
        (-[DRTMockScroller drawRect:]):
        (registerMockScrollbars):
        (prepareConsistentTestingEnvironment):

2012-01-05  Jon Lee  <jonlee@apple.com>

        Update DRT on Mac to draw resize handles on text areas.

        Reviewed by John Sullivan.

        Enable resize handles on text areas so that we don't have to create two different sets of pixel test results,
        between WK1 and WK2. This will require rebaselining existing textarea pixel tests.

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

2012-01-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Move listing of include paths and libs to pri files in sources

        Includepaths are sometimes modified by non-Qt contributors so keeping
        them in files inside Sources makes it more likely that they are updated
        along with project files for the other ports.

        Using pri files instead of prf files for this also has the benefit that
        the include() from the main target file can be parsed and followed by
        Qt Creator -- something that does not work with load().

        Dependency from a target to a library through the WEBKIT variable are
        handled through forwarding-files in Tools/qmake/mkspecs/modules, which
        set the source root of the module and include the right pri file.

        Ideally we'd use the variant of include() that takes an optional
        namespace to read the variables into, or the fromfile() function,
        but both of these add an overhead of about 40% on the total qmake
        runtime, due to making a deep copy of all the variables in the
        project or re-reading all the prf files from scratch.

        Reviewed by Simon Hausmann.
        Reviewed by Ossy.

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/modules/javascriptcore.prf: Added.
        * qmake/mkspecs/modules/webcore.prf: Added.
        * qmake/mkspecs/modules/webkit2.prf: Added.
        * qmake/mkspecs/modules/wtf.prf: Added.

2012-01-06  JungJik Lee  <jungjik.lee@samsung.com>

        [EFL] Add pre-render handling code in EWebLauncher.
        https://bugs.webkit.org/show_bug.cgi?id=73430

        Reviewed by Zoltan Herczeg.

        Add pre-render handling code by pressing Insert key.

        * EWebLauncher/main.c:
        (on_key_down):

2012-01-06  Csaba Osztrogonác  <ossy@webkit.org>

        NRWT should use test_expectation.txt on wk2 platforms
        https://bugs.webkit.org/show_bug.cgi?id=75417

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (path_to_test_expectations_file):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (test_path_to_test_expectations_file):

2012-01-05  Jochen Eisinger  <jochen@chromium.org>

        Don't hardcode expected file URIs in as they depend on the platform
        https://bugs.webkit.org/show_bug.cgi?id=75666

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort.show_results_html_file):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_unexpected_failures):
        (MainTest.test_results_directory_default):
        (MainTest.test_results_directory_relative):

2012-01-05  Anders Carlsson  <andersca@apple.com>

        Crash when trying to invalidate the NPRuntimeObjectMap for a plug-in in a subframe
        https://bugs.webkit.org/show_bug.cgi?id=75667
        <rdar://problem/10389454>

        Reviewed by Kevin Decker.

        Add an evaluate method to the plug-in test scriptable object that can be used to evaluate a given JS string.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::executeScript):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        * DumpRenderTree/TestNetscapePlugIn/Tests/NPRuntimeObjectFromDestroyedPlugin.cpp:
        (NPRuntimeObjectFromDestroyedPlugin::ScriptableObject::hasMethod):
        (NPRuntimeObjectFromDestroyedPlugin::ScriptableObject::invoke):
        (NPRuntimeObjectFromDestroyedPlugin::ScriptableObject::hasProperty):

2012-01-05  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up port factory methods
        https://bugs.webkit.org/show_bug.cgi?id=75590

        Reviewed by Eric Seidel.

        This change consolidates much of the "factory method" logic
        of determining which port objects to create for a given set
        of configurations by merging the separate factory methods in
        chromium_gpu and google_chrome into PortFactory so that at least
        all of the logic is in one place.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (_port_name_from_arguments_and_options):
        (get):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (test_google_chrome):
        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        (GoogleChromeLinux32Port):
        (GoogleChromeLinux32Port.baseline_search_path):
        (test_expectations_overrides):
        (architecture):
        (GoogleChromeLinux64Port):
        (GoogleChromeLinux64Port.baseline_search_path):
        (GoogleChromeMacPort):
        (GoogleChromeMacPort.baseline_search_path):
        (GoogleChromeWinPort):
        (GoogleChromeWinPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        (_verify_baseline_path):

2012-01-05  Jochen Eisinger  <jochen@chromium.org>

        Replace webkitpy.common.system.filesystem.file_path_as_url with webkitpy.common.system.path.abspath_to_uri
        https://bugs.webkit.org/show_bug.cgi?id=75617

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.exists):
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.exists):
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (GenericFileSystemTests.teardown_generic_test_dir):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.to.show_results_html_file):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_results_directory_absolute):

2012-01-05  Adam Roben  <aroben@apple.com>

        Remove some unnecessary code from old-run-webkit-tests

        Thanks to r104187/r104188, we no longer need to set PATH before launching DumpRenderTree or
        WebKitTestRunner.

        Fixes <http://webkit.org/b/75640> ORWT unnecessarily sets PATH before launching DRT/WTR on
        Windows

        Reviewed by Eric Seidel.

        * Scripts/old-run-webkit-tests:
        (top level):
        (openDumpTool):
        Removed calls to setPathForRunningWebKitApp.

2012-01-05  Adam Roben  <aroben@apple.com>

        Teach NRWT to use run-safari to open results.html on Apple's Windows port

        NRWT was trying to use User.open_url, which doesn't work on Cygwin. But run-safari is
        better, since we always want to open results.html using the user's build of WebKit, not
        whatever their default browser is.

        Fixes <http://webkit.org/b/75629> <rdar://problem/10648621> NRWT fails to open results.html
        for Apple's Windows port

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort.show_results_html_file): Changed to use run_safari, like MacPort does. Also removed
        an obsolete comment.

        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest.test_show_results_html_file): Updated expected results.

2012-01-05  Adam Roben  <aroben@apple.com>

        Prepend Safari.exe's path to the command-line passed to CreateProcess

        Safari expects the first argument in the command-line to be the path to Safari.exe itself.
        This is how things get set up when Safari is launched normally (e.g., by Explorer). Safari
        thus ignores the first argument when looking for command-line arguments. WebKitLauncherWin
        was not including the path to Safari.exe in the command-line, so Safari was ignoring the
        first argument that WebKitLauncherWin was trying to pass to it.

        Fixes <http://webkit.org/b/56571> First argument passed to WebKit.exe is ignored by Safari

        Reviewed by Steve Falkenburg.

        * WebKitLauncherWin/WebKitLauncherWin.cpp:
        (_tWinMain): Construct a command-line for CreateProcess that first contains a double-quoted
        path to Safari.exe, then contains any arguments that were passed to WebKitLauncherWin.

2012-01-05  Adam Roben  <aroben@apple.com>

        Stop using explicit memory management in WebKitLauncherWin

        We now use stack-allocated STL objects instead.

        Prep work for <http://webkit.org/b/56571> First argument passed to WebKit.exe is ignored by
        Safari

        Reviewed by Steve Falkenburg.

        * WebKitLauncherWin/WebKitLauncherWin.cpp:
        (getStringValue):
        (applePathFromRegistry):
        (safariInstallDir):
        (safariBrowserExe):
        (_tWinMain):
        Changed to use stack-allocated STL objects instead of malloc/free.

2012-01-05  Adam Roben  <aroben@apple.com>

        Turn WebKitTestRunner into a stub .exe launcher and a .dll that contains all the real code

        This allows us to add the Safari and Apple Application Support directories to PATH before
        trying to load WebKit so that SafariTheme.dll, CoreGraphics.dll and friends can be found.

        Fixes <http://webkit.org/b/75486> <rdar://problem/10638124> NRWT fails to launch Apple's
        Windows port of DumpRenderTree/WebKitTestRunner

        Reviewed by Steve Falkenburg.

        * WebKitTestRunner/WebKitTestRunner.sln: Added WebKitTestRunnerLauncher and
        ImageDiffLauncher, which I forgot to add to this .sln when that project was created.

        * WebKitTestRunner/Configurations/WebKitTestRunnerCommon.vsprops:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        Changed to build WebKitTestRunner.dll instead of WebKitTestRunner.exe.

        * WebKitTestRunner/win/WebKitTestRunnerLauncher.vcproj: Copied from
        Tools/WebKitTestRunner/win/WebKitTestRunner.vcproj but changed to build
        the stub launcher.

        * WebKitTestRunner/win/WebKitTestRunnerLauncherCommon.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherDebug.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherDebugAll.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherDebugCairoCFLite.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherProduction.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherRelease.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherReleaseCairoCFLite.vsprops: Added.

        * WebKitTestRunner/win/main.cpp:
        (dllLauncherEntryPoint): Renamed from main. This is what the stub launcher calls.

2012-01-05  Adam Roben  <aroben@apple.com>

        Turn DumpRenderTree into a stub .exe launcher and a .dll that contains all the real code

        This allows us to add the Safari and Apple Application Support directories to PATH before
        trying to load WebKit so that SafariTheme.dll, CoreGraphics.dll and friends can be found.

        Part of <http://webkit.org/b/75486> <rdar://problem/10638124> NRWT fails to launch Apple's
        Windows port of DumpRenderTree/WebKitTestRunner

        Reviewed by Steve Falkenburg.

        * DumpRenderTree/DumpRenderTree.sln: Added DumpRenderTreeLauncher and ImageDiffLauncher,
        which I forgot to add to this .sln when that project was created.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dllLauncherEntryPoint): Renamed from main. This is what the stub launcher calls.

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/DumpRenderTreeCommon.vsprops:
        Changed to build DumpRenderTree.dll instead of DumpRenderTree.exe.

        * DumpRenderTree/win/DumpRenderTreeLauncher.vcproj: Added.
        * DumpRenderTree/win/DumpRenderTreeLauncherCommon.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeLauncherDebug.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeLauncherDebugAll.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeLauncherDebugCairoCFLite.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeLauncherProduction.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeLauncherRelease.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeLauncherReleaseCairoCFLite.vsprops: Added.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (modifyPath): Moved code to modify PATH here from main/wWinMain. Changed to also prepend
        Safari's directory to PATH so that SafariTheme.dll can be found.

        (main):
        (wWinMain):
        Changed to use the new modifyPath function.

2012-01-05  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Never enable FontConfig on Mac OS X
        https://bugs.webkit.org/show_bug.cgi?id=75616

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/features.prf:

2012-01-05  Alpha Lam  <hclam@chromium.org>

        Unreviewed, rolling out r104159.
        http://trac.webkit.org/changeset/104159
        https://bugs.webkit.org/show_bug.cgi?id=75590

        Chromium port GPU tests cannot be executed.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        (get):
        (_default_tests_paths):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        (ChromiumGpuTest.assert_port_works):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory._port_name_from_arguments_and_options):
        (PortFactory):
        (PortFactory._get_kwargs):
        (PortFactory.get):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.test_google_chrome.names):
        (FactoryTest.test_google_chrome):
        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        (GetGoogleChromePort):
        (GetGoogleChromePort.GoogleChromeLinux32Port):
        (GetGoogleChromePort.GoogleChromeLinux32Port.baseline_search_path):
        (GetGoogleChromePort.GoogleChromeLinux32Port.test_expectations_overrides):
        (GetGoogleChromePort.GoogleChromeLinux32Port.architecture):
        (GetGoogleChromePort.GoogleChromeLinux64Port):
        (GetGoogleChromePort.GoogleChromeLinux64Port.baseline_search_path):
        (GetGoogleChromePort.GoogleChromeLinux64Port.test_expectations_overrides):
        (GetGoogleChromePort.GoogleChromeLinux64Port.architecture):
        (GetGoogleChromePort.GoogleChromeMacPort):
        (GetGoogleChromePort.GoogleChromeMacPort.baseline_search_path):
        (GetGoogleChromePort.GoogleChromeMacPort.test_expectations_overrides):
        (GetGoogleChromePort.GoogleChromeWinPort):
        (GetGoogleChromePort.GoogleChromeWinPort.baseline_search_path):
        (GetGoogleChromePort.GoogleChromeWinPort.test_expectations_overrides):
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        (GetGoogleChromePortTest._verify_baseline_path):
        (GetGoogleChromePortTest._verify_expectations_overrides):

2012-01-05  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up port factory methods
        https://bugs.webkit.org/show_bug.cgi?id=75590

        Reviewed by Eric Seidel.

        This change consolidates much of the "factory method" logic
        of determining which port objects to create for a given set
        of configurations by merging the separate factory methods in
        chromium_gpu and google_chrome into PortFactory so that at least
        all of the logic is in one place.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (_port_name_from_arguments_and_options):
        (get):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (test_google_chrome):
        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        (GoogleChromeLinux32Port):
        (GoogleChromeLinux32Port.baseline_search_path):
        (test_expectations_overrides):
        (architecture):
        (GoogleChromeLinux64Port):
        (GoogleChromeLinux64Port.baseline_search_path):
        (GoogleChromeMacPort):
        (GoogleChromeMacPort.baseline_search_path):
        (GoogleChromeWinPort):
        (GoogleChromeWinPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        (_verify_baseline_path):

2012-01-04  Adam Roben  <aroben@apple.com>

        Turn ImageDiff into a stub .exe launcher and a .dll that contains all the real code

        This allows us to add the Apple Application Support directory to PATH before trying to load
        WebKit so that CoreGraphics.dll and friends can be found.

        Fixes <http://webkit.org/b/75572> ImageDiff.exe can't be run without first munging PATH

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/ImageDiffCommon.vsprops:
        Changed to build ImageDiff.dll instead of ImageDiff.exe.

        * DumpRenderTree/win/ImageDiffLauncher.vcproj: Copied from
        Tools/DumpRenderTree/win/ImageDiff.vcproj but changed to build the stub launcher.

        * DumpRenderTree/win/ImageDiffLauncherCommon.vsprops: Added.
        * DumpRenderTree/win/ImageDiffLauncherDebug.vsprops: Added.
        * DumpRenderTree/win/ImageDiffLauncherDebugAll.vsprops: Added.
        * DumpRenderTree/win/ImageDiffLauncherDebugCairoCFLite.vsprops: Added.
        * DumpRenderTree/win/ImageDiffLauncherProduction.vsprops: Added.
        * DumpRenderTree/win/ImageDiffLauncherRelease.vsprops: Added.
        * DumpRenderTree/win/ImageDiffLauncherReleaseCairoCFLite.vsprops: Added.

        * DumpRenderTree/win/ImageDiffWin.cpp: Added.
        (dllLauncherEntryPoint): This function is called by the stub launcher and just calls through
        to main.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (main):
        (wWinMain):
        Added support for launching console programs. When USE_CONSOLE_ENTRY_POINT is defined, the
        stub launcher acts as a console program and calls a console version of
        dllLauncherEntryPoint.

2012-01-04  Adam Roben  <aroben@apple.com>

        Turn MiniBrowser into a stub .exe launcher and a .dll that contains all the real code

        This allows us to add the Apple Application Support directory to PATH before trying to load
        WebKit so that CoreGraphics.dll and friends can be found.

        Fixes <http://webkit.org/b/68576> <rdar://problem/10163853> MiniBrowser fails to launch when
        double-clicked

        Reviewed by Anders Carlsson.

        * MiniBrowser/MiniBrowser.vcproj:
        * MiniBrowser/Configurations/MiniBrowserCommon.vsprops:
        Changed to build MiniBrowser.dll instead of MiniBrowser.exe.

        * MiniBrowser/Configurations/MiniBrowserLauncherCommon.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserLauncherDebug.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserLauncherDebugAll.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserLauncherDebugCairoCFLite.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserLauncherProduction.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserLauncherRelease.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserLauncherReleaseCairoCFLite.vsprops: Added.

        * MiniBrowser/MiniBrowserLauncher.vcproj: Copied from Tools/MiniBrowser/MiniBrowser.vcproj
        but changed to build the stub launcher.

        * MiniBrowser/win/main.cpp: Moved the /manifestdependency code to DLLLauncherMain.cpp, since
        it needs to be compiled into the .exe instead of the .dll.
        (DllMain): Added. We use this to store the DLL's HINSTANCE.
        (dllLauncherEntryPoint): Renamed from _tWinMain. This is what gets called by the
        DLLLauncherMain code.

        * win/DLLLauncher/DLLLauncherMain.cpp: Moved the /manifestdependency code from MiniBrowser
        to here.

2012-01-04  Adam Roben  <aroben@apple.com>

        Make WinLauncher's window frame respond to clicks/drags again

        Fixes <http://webkit.org/b/75562> REGRESSION (r84990): Can't drag WinLauncher by its title
        bar when Aero is disabled

        Reviewed by Brent Fulgham.

        * WinLauncher/WinLauncher.cpp:
        (WndProc): Always call up to our parent wndproc when we don't handle WM_NCHITTEST ourselves.
        Also removed an unnecessary "break" keyword.

2012-01-04  Adam Roben  <aroben@apple.com>

        Turn WinLauncher into a stub .exe launcher and a .dll that contains all the real code

        This allows us to add the Apple Application Support directory to PATH before trying to load
        WebKit so that CoreGraphics.dll and friends can be found. Eventually all our WebKit apps
        should use this mechanism.

        Fixes <http://webkit.org/b/68578> <rdar://problem/10163861> WinLauncher fails to launch when
        double-clicked

        Reviewed by Anders Carlsson.

        * WinLauncher/WinLauncher.cpp: Removed InitInstance.
        (DllMain): Added. Stores the DLL HINSTANCE in the global hInst variable. This used to be
        done by the now-removed InitInstance function.
        (dllLauncherEntryPoint): Renamed from _tWinMain. This is the function that our stub launcher
        calls. Merged code from InitInstance into this function, and change to use the global hInst
        variable, which corresponds to WinLauncher.dll, rather than the HINSTANCE passed into this
        function, which corresponds to WinLauncher.exe.

        * WinLauncher/WinLauncher.vcproj:
        * WinLauncher/WinLauncherCommon.vsprops:
        Changed to build WinLauncher.dll instead of WinLauncher.exe.

        * WinLauncher/WinLauncherLauncher.rc: Added.
        * WinLauncher/WinLauncherLauncherResource.h: Added.
        This just references the WinLauncher.ico file to set the application icon (though it looks
        like that's a default icon).

        * WinLauncher/WinLauncherLauncher.vcproj: Copied from Tools/WinLauncher/WinLauncher.vcproj
        but changed to build WinLauncher.exe using the new DLLLauncherMain.cpp file.

        * WinLauncher/WinLauncherLauncherCommon.vsprops: Added.
        * WinLauncher/WinLauncherLauncherDebug.vsprops: Added.
        * WinLauncher/WinLauncherLauncherDebugAll.vsprops: Added.
        * WinLauncher/WinLauncherLauncherDebugCairoCFLite.vsprops: Added.
        * WinLauncher/WinLauncherLauncherProduction.vsprops: Added.
        * WinLauncher/WinLauncherLauncherRelease.vsprops: Added.
        * WinLauncher/WinLauncherLauncherReleaseCairoCFLite.vsprops: Added.

        * win/DLLLauncher/DLLLauncherMain.cpp: Added.
        (enableTerminationOnHeapCorruption): Uses HeapSetInformation to tell Windows to kill the
        program if it detects heap corruption.
        (getStringValue): Helper function to read a string value from the registry.
        (applePathFromRegistry): Helper function to read the InstallDir for a given Apple
        application from the registry.
        (appleApplicationSupportDirectory): Helper function to return the path to the Apple
        Application Support directory.
        (copyEnvironmentVariable): Helper function to copy an environment variable's value.
        (prependPath): Helper function to prepend a directory to the PATH.
        (fatalError): Helper function to display an error to the user.
        (wWinMain): Add Apple Application Support to the PATH, then load our DLL and call its
        dllLauncherEntryPoint function.

2012-01-05  Kentaro Hara  <haraken@chromium.org>

        prepare-ChangeLog cannot parse python code that nests classes and defs
        https://bugs.webkit.org/show_bug.cgi?id=75524

        Reviewed by Ryosuke Niwa.

        This patch fixes the python parser of prepare-ChangeLog so that it can parse
        python code that nests classes and defs, like this:

        class C:
            pass
            def f():
                pass
            pass

        Also, this patch fixes the python parser so that it inserts a dummy line
        at the end of the file to pop out all popped scopes.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_python):

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/python_unittests.py:
        Added test cases that nest classes and defs.
        (func7):
        (func7.func8):
        (func7.func8.func9):
        (Class2):
        (Class2.Class3):
        (Class2.Class3.Class4):
        (Class5):
        (Class5.func10):
        (Class5.func11):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/python_unittests-expected.txt:

2012-01-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Rename webkit_web_view_load_alternate_html as webkit_web_view_replace_content in WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=75433

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewLoadFailed): Reset the progress bar when load fails.
        (browserWindowConstructed): Connect to load-failed signal.

2012-01-04  Dan Bernstein  <mitz@apple.com>

        Add a --target-web-process option to the debug-* scripts. When specified, the scripts will
        start WebProcess under gdb and WebProcess will then run the client executable.

        This is the Tools part of fixing <http://webkit.org/b/75444> Debugging WebProcess requires running a UI process first and waiting to attach

        Reviewed by Anders Carlsson.

        * Scripts/webkitdirs.pm:
        (shouldTargetWebProcess): Added.
        (determineShouldTargetWebProcess): Added. Checks for --target-web-process.
        (execMacWebKitAppForDebugging): Changed to target gdb at WebProcess and pass the path to the
        app using the -client-executable option if targeting the web process.

2012-01-04  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Adding myself to committers list.

        Unreviewed.

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

2012-01-04  David Kilzer  <ddkilzer@apple.com>

        Revert fix for Bug 75064: TestWebKitAPI: initialize the main thread before running tests

        This reverts commit r103546.

        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController):

2012-01-04  James Robinson  <jamesr@chromium.org>

        [chromium] Move WebMimeRegistry and dependencies to Source/Platform
        https://bugs.webkit.org/show_bug.cgi?id=74583

        Reviewed by Darin Fisher.

        Teaches the WEBKIT_EXPORT check about the chromium WebKit platform API header location.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_function_definition):

2012-01-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix link order of static libraries and unbreak QtWin32

        We were keeping the correct static link order between the intermediate
        WebKit libraries, but not the internal dependencies for each of those
        libraries. The load() will in some instances mess with LIBS, so we need
        to ensure that the dependent libraries are added after the library we
        are linking against.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:

2012-01-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Introduce new qmake variable 'WEBKIT' for signaling dependencies

        The custom qmake variable 'WEBKIT' is used for signaling that a
        target depends in some way on other subproject of the WebKit
        project. For now this is limited to the set of intermediate
        libraries: wtf, javascriptcore, webcore, and webkit2.

        This replaces the previous convension of using load(foo) for
        just include paths, and CONFIG += foo to also link against foo.

        Adding a dependency results in additional include paths being
        available, and potentially linking to the library. This is
        decided by the build system based on conditions such as what
        kind of target is being built and the general build config.

        An advantage to his approach is that it simplifies the individual
        foo.prf files, for example by allowing us to use INCLUDEPATH +=
        and LIBS += as normal instead of prepending.

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/Target.pri:
        * qmake/README:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/functions.prf:
        * qmake/mkspecs/features/javascriptcore.prf:
        * qmake/mkspecs/features/qtwebkit.prf:
        * qmake/mkspecs/features/webcore.prf:
        * qmake/mkspecs/features/webkit2.prf:
        * qmake/mkspecs/features/wtf.prf:

2012-01-04  Alexander Færøy  <ahf@0x90.dk>

        [Qt] Add UI for JavaScript Prompt dialog in the Qt MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=75488

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/Dialog.qml:
        * MiniBrowser/qt/qml/DialogLineInput.qml: Copied from Tools/MiniBrowser/qt/qml/Dialog.qml.
        * MiniBrowser/qt/qml/PromptDialog.qml: Copied from Tools/MiniBrowser/qt/qml/Dialog.qml.

2012-01-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use rpath for WTR's InjectedBundle to pick up the right QtWebKit

        It wasn't really a problem at runtime since the right QtWebKit was
        already loaded as a dependency of the web process, but the ldd output
        would still be busted.

        Reviewed by Simon Hausmann.

        * WebKitTestRunner/InjectedBundle/Target.pri:

2012-01-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Move use of $$qtLibraryTarget() to a single place

        Reviewed by Kenneth Rohde Christiansen.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/webcore.prf:

2012-01-04  Mary Wu  <mary.wu@torchmobile.com.cn>

        Enable DOWNLOAD_ATTRIBUTE in BlackBerry porting
        https://bugs.webkit.org/show_bug.cgi?id=75238

        Reviewed by Antonio Gomes.

        Add ENABLE_DOWNLOAD_ATTRIBUTE webkit feature into the build script so that 
        it could initiate download directly if it has the download attribute in the link 
        and doesn't need to open new blank page for the target="_blank". Enabling this 
        feature in the BlackBerry porting also prepares for later blob feature implementation.

        * Scripts/build-webkit: Modified to handle ENABLE_DOWNLOAD_ATTRIBUTE. Make it default on
        for the BlackBerry porting.

2012-01-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix a runtime warning when hovering hyperlink auditing setting in MiniBroweser settings dialog
        https://bugs.webkit.org/show_bug.cgi?id=75475

        Reviewed by Martin Robinson.

        The problem is that the property blurb contains <a ping> and tree
        view uses gtk_tooltip_set_markup() internally, so we need to
        escape the text.

        * MiniBrowser/gtk/BrowserSettingsDialog.c:
        (browserSettingsDialogConstructed): Escape property blurb before
        storing it in the GtkTreeModel.

2012-01-03  Jochen Eisinger  <jochen@chromium.org>

        When showing results.html pass a correct URL to webbrowser.open
        https://bugs.webkit.org/show_bug.cgi?id=75438

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/system/filesystem.py:
        (file_path_as_url):
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (file_path_as_url):
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (test_file_path_as_url):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (show_results_html_file):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (test_show_results_html_file):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (test_results_directory_relative):

2012-01-03  Ojan Vafai  <ojan@chromium.org>

        shrink the header on the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=65153

        Reviewed by Adam Roben.

        Move some of the "show" links to be to the right of the header
        instead of below the header when they content they're showing
        is hidden. That way we don't waste vertical space on them.

        No new tests. This code is covered by existing tests.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2012-01-03  Ryosuke Niwa  <rniwa@webkit.org>

        Add a tool to analyze change logs
        https://bugs.webkit.org/show_bug.cgi?id=72243

        Reviewed by Eric Seidel.

        Add the initial implementation of analyze-changelog command. This version supports parsing multiple changelogs
        in a single directory and summarizes the result in json files. It also copies summary.html to the output directory
        for visualizing json files.

        Usage: webkit-patch analyze-changelog [--changelog-count N] <CHANGELOG_DIR> <OUTPUT_DIR>
        where CHANGELOG_DIR is the directory to look for changelogs, OUTPUT_DIR is the directory into which the tool
        generates json files, and N is the number of changelogs to parse.

        * Scripts/webkitpy/common/config/contributionareas.py: Added names().
        * Scripts/webkitpy/common/system/filesystem_mock.py: Added readline and iterator support to ReadableTextFileObject.
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/analyzechangelog.py: Added.
        * Scripts/webkitpy/tool/commands/analyzechangelog_unittest.py: Added.
        * Scripts/webkitpy/tool/commands/data/summary.html: Added.
        * Scripts/webkitpy/tool/steps/options.py:

2012-01-03  Ryosuke Niwa  <rniwa@webkit.org>

        Add a tool to analyze change logs
        https://bugs.webkit.org/show_bug.cgi?id=72243

        Reviewed by Eric Seidel.

        Add the initial implementation of analyze-changelog command. This version supports parsing multiple changelogs
        in a single directory and summarizes the result in json files. It also copies summary.html to the output directory
        for visualizing json files.

        Usage: webkit-patch analyze-changelog [--changelog-count N] <CHANGELOG_DIR> <OUTPUT_DIR>
        where CHANGELOG_DIR is the directory to look for changelogs, OUTPUT_DIR is the directory into which the tool
        generates json files, and N is the number of changelogs to parse.

        * Scripts/webkitpy/common/config/contributionareas.py: Added names().
        * Scripts/webkitpy/common/system/filesystem_mock.py: Added readline and iterator support to ReadableTextFileObject.
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/analyzechangelog.py: Added.
        * Scripts/webkitpy/tool/commands/analyzechangelog_unittest.py: Added.
        * Scripts/webkitpy/tool/commands/data/summary.html: Added.
        * Scripts/webkitpy/tool/steps/options.py:

2012-01-03  Adam Roben  <aroben@apple.com>

        Make Port subclasses override the operating_system method rather than setting an attribute

        Without this patch, any use of Port.operating_system() within a port's __init__ method would
        return the default value ("mac"). This was confusing the version-checking logic inside
        ApplePort.__init__ on Windows.

        Fixes <http://webkit.org/b/75479> <rdar://problem/10637385> REGRESSION (r102161): NRWT
        crashes on launch on Windows 7 SP1

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.__init__): Replaced uses of self._operating_system with self.operating_system().

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__): Removed code that set the self._operating_system attribute. Subclasses
        should now override the operating_system method instead.
        (Port.operating_system): Changed to always return "mac". Subclasses should override to
        return something else.

        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort.__init__):
        (ChromiumLinuxPort.operating_system):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.__init__):
        (ChromiumMacPort.operating_system):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort.__init__):
        (ChromiumWinPort.operating_system):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.__init__):
        (MacPort.operating_system):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort.__init__):
        (WinPort.operating_system):
        Changed to override the operating_system method rather than setting the _operating_system
        attribute, since setting the attribute isn't sufficient for code inside __init__ methods.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.__init__):
        (QtPort._path_to_webcore_library):
        Changed to use self.operating_system() instead of self._operating_system, for consistency
        with other Port-related code.

        (QtPort.operating_system): Added this override of Port.operating_system that returns the
        value we determined in our __init__ method.

        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.operating_system): Added this override of Port.operating_system that returns the
        value we determined in our __init__ method.

        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_operating_system):
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        (ChromiumLinuxPortTest.test_operating_system):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_operating_system):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinPortTest.test_operating_system):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacPortTest.test_operating_system):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest.test_operating_system):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest.test_operating_system):
        Test that all ports return the expected operating system string.

2012-01-03  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] run-gtk-test should ignore files with names without a "test" or "Test" prefix
        https://bugs.webkit.org/show_bug.cgi?id=75474

        Reviewed by Philippe Normand.

        * Scripts/run-gtk-tests: Ignore files whose name does not start
        with a "test" (for WK1's API tests) or a "Test" prefix (for WK2).

2012-01-03  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Add UI for JavaScript Confirmation dialog in the Qt MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=75472

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/ConfirmDialog.qml: Added.

2012-01-03  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Add UI for JavaScript Alert dialog in the Qt MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=75471

        Reviewed by Tor Arne Vestbø.

        Add simple UI for JavaScript Alert dialogs. This patch also adds a
        simple DialogButton QML type and a Dialog QML type which will be
        reusable for other JavaScript dialogs.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/qml/AlertDialog.qml: Added.
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/Dialog.qml: Added.
        * MiniBrowser/qt/qml/DialogButton.qml: Added.

2012-01-03  Rafael Brandao  <rafael.lobo@openbossa.org>

        [Qt][WK2] MiniBrowser doesn't show url bar
        https://bugs.webkit.org/show_bug.cgi?id=75470

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/qml/BrowserWindow.qml: Remove clipping until it is fixed
        on QtDeclarative (QTBUG-23422).

2012-01-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Simplify loader client WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=74605

        Reviewed by Gustavo Noronha Silva.

        * gtk/generate-gtkdoc: Ignore WebKitWebLoaderClient since it's now
        private API.

2012-01-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Clean up detection of fontconfig

        We decide in features.prf whether or not fontconfig is available, and
        set the HAVE_FONTCONFIG define accordingly. All leaf project files
        should use this define to decide whether or not to link against
        fontconfig, not do their own detection.

        We don't need to add link_pkgconfig to CONFIG in each project file,
        as we selectivly enable that configuration in defaults_post when
        needed.

        Reviewed by Ossy.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * qmake/mkspecs/features/unix/default_post.prf:
        * qmake/mkspecs/features/unix/default_pre.prf:

2012-01-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Introduce qmake replace function for the active build config

        Reviewed by Ossy.

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/functions.prf:

2012-01-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use gdk_screen_get_monitor_workarea() when available for screenAvailableRect()
        https://bugs.webkit.org/show_bug.cgi?id=75435

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Make sure DRT links to X11.
        * WebKitTestRunner/GNUmakefile.am: Make sure WTR links to X11.

2011-12-04  Philippe Normand  <pnormand@igalia.com>

        [WK2][GTK] WebSettings support in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=73773

        Reviewed by Martin Robinson.

        Patch heavily inspired from the WebKit GtkLauncher to support
        command-line WebSettings. Example: --enable-fullscreen=TRUE.
        The full list of options can be consulted with --help-websettings.

        * MiniBrowser/gtk/main.c:
        (loadURI):
        (parseOptionEntryCallback):
        (isValidParameterType):
        (getOptionEntriesFromWebKitSettings):
        (addSettingsGroupToContext):
        (main):

2012-01-02  Philippe Normand  <pnormand@igalia.com>

        [GTK] GtkLauncher settings improvements
        https://bugs.webkit.org/show_bug.cgi?id=75439

        Reviewed by Martin Robinson.

        * GtkLauncher/main.c:
        (filenameToURL): We can use NULL in C.
        (isValidParameterType): Utility function to filter GParamTypes
        that can be edited.
        (getOptionEntriesFromWebKitWebSettings): Avoid handling
        construct-only properties and use the isValidParameterType
        function. Makes the code a bit cleaner.

2012-01-02  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Remove whitespace/declaration style exception
        https://bugs.webkit.org/show_bug.cgi?id=75424

        Reviewed by David Levin.

        Remove *whitespace/eclaration* style rule. However, EWebLauncher and MiniBrowser are EFL simple
        application. So, they still need to use EFL coding style.

        * Scripts/webkitpy/style/checker.py:

2012-01-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add a way to change web view settings in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=71568

        Reviewed by Philippe Normand.

        Add a preferences button to the toolbar that shows a dialog to
        change settings of the current web view. It uses a GtkTreeView
        with a custom cell renderer to support multiple types of values.

        * MiniBrowser/gtk/BrowserCellRendererVariant.c: Added.
        (browserCellRendererVariantFinalize):
        (browserCellRendererVariantGetProperty):
        (browserCellRendererVariantSetModeForValue):
        (browserCellRendererVariantSetProperty):
        (browserCellRendererVariantGetRendererForValue):
        (browserCellRendererVariantCellRendererTextEdited):
        (browserCellRendererVariantCellRendererSpinEdited):
        (browserCellRendererVariantCellRendererActivate):
        (browserCellRendererVariantCellRendererRender):
        (browserCellRendererVariantCellRendererStartEditing):
        (browserCellRendererVariantCellRendererGetPreferredWidth):
        (browserCellRendererVariantCellRendererGetPreferredHeight):
        (browserCellRendererVariantCellRendererGetPreferredWidthForHeight):
        (browserCellRendererVariantCellRendererGetPreferredHeightForWidth):
        (browserCellRendererVariantCellRendererGetAlignedArea):
        (browser_cell_renderer_variant_init):
        (browser_cell_renderer_variant_class_init):
        (browser_cell_renderer_variant_new):
        * MiniBrowser/gtk/BrowserCellRendererVariant.h: Added.
        * MiniBrowser/gtk/BrowserSettingsDialog.c: Added.
        (cellRendererChanged):
        (browserSettingsDialogSetProperty):
        (browser_settings_dialog_init):
        (browserSettingsDialogConstructed):
        (browser_settings_dialog_class_init):
        (browser_settings_dialog_new):
        * MiniBrowser/gtk/BrowserSettingsDialog.h: Added.
        * MiniBrowser/gtk/BrowserWindow.c:
        (settingsCallback):
        (browser_window_init):
        * MiniBrowser/gtk/GNUmakefile.am:
        * MiniBrowser/gtk/browser-marshal.list: Added.

2012-01-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement create/ready-to-show/close signals in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=74711

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewClose): Destroy the window.
        (webViewReadyToShow): Use WindowProperties of the new view to
        setup and show the window.
        (webViewCreate): Create a new view and add it to a browser window.
        (browser_window_init):
        (browserWindowConstructed): Connect to WebKitWebView::create signal.

2011-12-31  Dan Bernstein  <mitz@apple.com>

        MiniBrowser sets the WKView’s frame incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=75393

        Reviewed by Anders Carlsson.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj: Removed Make Launchable build phase,
        which is not needed since the binray is linked with the frameworks search path set to the
        built products directory.
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]): Changed to set the WKView’s frame to its
        container’s bounds rather than its frame.
        * MiniBrowser/mac/make-launchable.sh: Removed.

2011-12-29  Dan Bernstein  <mitz@apple.com>

        debug-safari --no-saved-state fails to start the debugger
        https://bugs.webkit.org/show_bug.cgi?id=75374

        Reviewed by Sam Weinig.

        * Scripts/webkitdirs.pm:
        (execMacWebKitAppForDebugging): Pass the --args option to gdb so that it passes arguments to
        the executable being debugged.

2011-12-29  Sam Weinig  <sam@webkit.org>

        It should be easier to iterate a Vector backwards
        https://bugs.webkit.org/show_bug.cgi?id=75359

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Add new Vector test.

        * TestWebKitAPI/Tests/Vector.cpp: Added.
        (TestWebKitAPI::TEST):
        Test Vector iterators, reverse_iterators and new reversed proxy.

2011-12-28  Dmitry Lomov  <dslomov@google.com>

        [WebWorkers][Chromium] Remove remains of cross-process dedicated worker implementation.
        https://bugs.webkit.org/show_bug.cgi?id=66509
        Just renames, merges and removal of dead code. Here are the list of renames:
          - WebCommonWorkerClient merged with WebWorkerClient and renamed to WebSharedWorkerClient
          - NewWebCommonWorkerClient renamed to WebCommonWorkerClient
          - WebWorkerBase merged into WebSharedWorkerImpl
          - NewWebWorkerBase renamed into WebWorkerBase
 
        Reviewed by David Levin.

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::createWorker):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createWorker):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-12-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r103785.
        http://trac.webkit.org/changeset/103785
        https://bugs.webkit.org/show_bug.cgi?id=75332

        Broke builders; looks like clobbering didnt help (Requested by
        dslomov on #webkit).

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::createWorker):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createWorker):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-12-28  Dmitry Lomov  <dslomov@google.com>


        [WebWorkers][Chromium] Remove remains of cross-process dedicated worker implementation.
        https://bugs.webkit.org/show_bug.cgi?id=66509
        Just renames, merges and removal of dead code. Here are the list of renames:
          - WebCommonWorkerClient merged with WebWorkerClient and renamed to WebSharedWorkerClient
          - NewWebCommonWorkerClient renamed to WebCommonWorkerClient
          - WebWorkerBase merged into WebSharedWorkerImpl
          - NewWebWorkerBase renamed into WebWorkerBase
 
        Reviewed by David Levin.

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::createWorker):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createWorker):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-12-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r103620.
        http://trac.webkit.org/changeset/103620
        https://bugs.webkit.org/show_bug.cgi?id=75316

        Causes many crashes (Requested by abarth on #webkit).

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:

2011-12-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r103734.
        http://trac.webkit.org/changeset/103734
        https://bugs.webkit.org/show_bug.cgi?id=75278

        Broke cr-mac (Requested by dslomov on #webkit).

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::createWorker):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createWorker):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-12-27  Dmitry Lomov  <dslomov@google.com>


        [WebWorkers][Chromium] Remove remains of cross-process dedicated worker implementation.
        https://bugs.webkit.org/show_bug.cgi?id=66509
        Just renames, merges and removal of dead code. Here are the list of renames:
          - WebCommonWorkerClient merged with WebWorkerClient and renamed to WebSharedWorkerClient
          - NewWebCommonWorkerClient renamed to WebCommonWorkerClient
          - WebWorkerBase merged into WebSharedWorkerImpl
          - NewWebWorkerBase renamed into WebWorkerBase
 
        Reviewed by David Levin.

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::createWorker):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createWorker):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-12-27  Anders Carlsson  <andersca@apple.com>

        Function should handle wrapping/unwrapping RefPtr and PassRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=75266

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:
        (TestWebKitAPI::Number::create):
        (TestWebKitAPI::Number::~Number):
        (TestWebKitAPI::Number::value):
        (TestWebKitAPI::Number::Number):
        (TestWebKitAPI::multiplyNumberByTwo):
        (TestWebKitAPI::TEST):

2011-12-24  Kentaro Hara  <haraken@chromium.org>

        Add unittests for the C++ parser of prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=75191

        Reviewed by Ryosuke Niwa.

        cpp_unittests.cpp is the unittests for get_function_line_ranges_for_cpp()
        of prepare-ChangeLog.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges): Renames get_function_line_ranges_for_c()
        to get_function_line_ranges_for_cpp().
        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests-expected.txt: Added.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests.cpp: Added.
        (func1):
        (func2):
        (func3):
        (func4):
        (func5):
        (func6):
        (func7):
        (func8):
        (func9):
        (func10):
        (func11):
        (func12):
        (func13):
        (func14):
        (func15):
        (funcOverloaded):
        (Class::func16):
        (Class1::Class2::func17):
        (Class2::func18):
        (Class2::func19):
        (Class2::func20):
        (Class2::func21):
        (Class2::func22):
        (func23):
        (func24):
        (Class2::func25):
        (Class1::func26):
        (Class2::func27):
        (Class3::func28):
        (Class7::operator+):
        (Class100::Class100):
        (Class101::~Class101):
        (Class102::Class102):
        (Class103::Class103):
        (Struct1::func29):
        (Struct2::func30):
        (NameSpace1::func30):
        (NameSpace1::NameSpace2::func31):

2011-12-24  Kentaro Hara  <haraken@chromium.org>

        Add unittests for the Java parser of prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=75195

        Reviewed by Ryosuke Niwa.

        java_unittests.java is unittest cases for get_function_line_ranges_for_java()
        of prepare-ChangeLog.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_java): Fixed a parser bug.

            interface I
            {
                void f()
                {
                }
            }

        should be recognized as "I.f", and

            class C interface I
            {
                void f()
                {
                }
            }

        should be recognized as "C.f".
        Without this patch, both are recognized as "I.f".

        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/java_unittests-expected.txt: Added.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/java_unittests.java: Added.
        (Simple):
        (Simple.func1):
        (Simple.func2):
        (Simple.func3):
        (Simple.func4):
        (Simple.func5):
        (Simple.func6):
        (Simple.func7):
        (Simple.func8):
        (Simple.func9):
        (Simple.func10):
        (Simple.funcOverloaded):
        (Simple.func11):
        (Simple.func12):
        (Simple.func13):
        (Simple.func14):
        (Simple.func15):
        (Simple.func16):
        (Simple.func17):
        (Simple.func18):
        (Simple.func19):
        (Simple.func20):
        (Simple.func21):
        (Derived1):
        (Derived1.Derived1):
        (Derived1.func22):
        (Interface1):
        (Interface2):
        (Interface2.func23):
        (Derived2):
        (Derived2.Derived2):
        (Derived2.func23):

2011-12-24  Kentaro Hara  <haraken@chromium.org>

        Add unittests for the Python parser of prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=75197

        Reviewed by Ryosuke Niwa.

        python_unittests.py is the unittest for get_function_line_ranges_for_python()
        of prepare-ChangeLog. The unittest just contains classes and defs that are not nested.
        This is because the current python parser is wrong, and it cannot correctly parse nested
        classes and defs (even one def in a class), nor class inheritance.
        We will fix it in another patch.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_python): Ignores comment lines that starts from #.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/python_unittests-expected.txt: Added.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/python_unittests.py: Added.
        (func1):
        (func2):
        (func3):
        (funcInsideComment):
        (func4):
        (func5):
        (func6):
        (funcOverloaded):
        (Class1):

2011-12-24  Dan Bernstein  <mitz@apple.com>

        Set SHARED_PRECOMPS_DIR when Xcode is set to use a custom build product path.

        Reviewed by Anders Carlsson.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):

2011-12-24  Dan Bernstein  <mitz@apple.com>

        Make build-webkit aware of additional Xcode build location defaults.

        Reviewed by Anders Carlsson.

        * Scripts/webkitdirs.pm:
        (determineXcodeVersion): Added. This was previously in determineBaseProductDir().
        (readXcodeUserDefault): Added. Factored out from determineBaseProductDir().
        (determineBaseProductDir): Changed to check for a custom build location
        style specified as an absolute location.

2011-12-24  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed, rolling out r103619.
        http://trac.webkit.org/changeset/103619
        https://bugs.webkit.org/show_bug.cgi?id=66509

        Broke chromium clang build

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::createWorker):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createWorker):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-12-23  Daniel Bates  <dbates@webkit.org>

        Provide option to disable Mac OS 10.7 application resume when using
        {debug, run}-{safari, minibrowser, test-runner, test-webkit-api}, and run-webkit-app
        https://bugs.webkit.org/show_bug.cgi?id=66902

        Reviewed by David Kilzer.

        Add an optional command line argument --no-saved-state to disable
        application resume (state restoration) for the session on Mac OS 10.7.

        For instance, when debugging an issue in Safari it is useful to be able
        to temporarily disable application resume. Currently you can disable
        application resume when launching Safari from within Xcode. We should
        expose a similar option in our command line tools.

        * Scripts/debug-minibrowser: Call printHelpAndExitForRunAndDebugWebKitAppIfNeeded()
        to print a help message and exit() if the command line argument --help was given.
        * Scripts/debug-safari: Ditto.
        * Scripts/debug-test-runner: Ditto.
        * Scripts/run-minibrowser: Ditto.
        * Scripts/run-safari: Ditto.
        * Scripts/run-test-runner: Ditto.
        * Scripts/run-test-webkit-api: Ditto.
        * Scripts/run-webkit-app: Ditto.
        * Scripts/webkitdirs.pm:
        (printHelpAndExitForRunAndDebugWebKitAppIfNeeded): Added.
        (argumentsForRunAndDebugMacWebKitApp): Added.
        (runMacWebKitApp): If the --no-saved-state command line argument was given then
        disable application resume for the session.
        (execMacWebKitAppForDebugging): Ditto.

2011-12-23  Dmitry Lomov  <dslomov@google.com>

        [WebWorkers][Chromium] Remove remains of cross-process dedicated worker implementation.
        https://bugs.webkit.org/show_bug.cgi?id=66509
        Just renames, merges and removal of dead code. Here are the list of renames:
          - WebCommonWorkerClient merged with WebWorkerClient and renamed to WebSharedWorkerClient
          - NewWebCommonWorkerClient renamed to WebCommonWorkerClient
          - WebWorkerBase merged into WebSharedWorkerImpl
          - NewWebWorkerBase renamed into WebWorkerBase
 
        Reviewed by David Levin.

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::createWorker):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createWorker):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-12-23  Kentaro Hara  <haraken@chromium.org>

        Let parser_unittests.pl call different language parsers
        https://bugs.webkit.org/show_bug.cgi?id=75081

        Reviewed by David Kilzer.

        We introduced parser_unittests.pl in bug 74994 , but it is implemented
        to always call get_function_line_ranges_for_perl(). In order to enable unittests
        for other languages, this patch lets parser_unittests.pl call different language
        parsers depending on the languages.

        Test: Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests.pl

        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:

2011-12-22  Adam Roben  <aroben@apple.com>

        Snow Leopard test fix

        * Scripts/webkitpy/test/main.py:
        (Tester.run_tests): Python 2.6.1 doesn't seem to like specifying testRunner=None to
        unittest.main, even though that's the default. So now we explicitly specify a
        TextTestRunner.

2011-12-22  Chris Fleizach  <cfleizach@apple.com>

        AX: attributed strings do not include AXHeading information when a link is contained within the heading
        https://bugs.webkit.org/show_bug.cgi?id=75059

        Reviewed by Darin Adler.

        Support the ability to check if an arbitrary attribute is present within an
        attributed string that can be retrieved through an AccessibilityTextMarkerRange.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (attributedStringForTextMarkerRangeContainsAttributeCallback):
        (AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):

2011-12-22  David Kilzer  <ddkilzer@apple.com>

        run-api-tests: runAllTests() and runTest() should not use global variables

        Reviewed by Adam Roben.

        Part of: <http://webkit.org/b/75065> run-api-tests should be able to run individual suites and tests

        * Scripts/run-api-tests:
        (runTestsBySuite): Rename from runAllTests().  Add arguments for
        list of tests and $verbose.
        (runTest): Add $verbose argument.

2011-12-22  David Kilzer  <ddkilzer@apple.com>

        run-api-tests: inline runAllTestsInSuite() into runAllTests()

        Reviewed by Adam Roben.

        Part of: <http://webkit.org/b/75065> run-api-tests should be able to run individual suites and tests

        In order to make it easy to run one or more individual suites,
        or one more individual tests, it's easier to call a single
        method with different data structures than individual methods.

        * Scripts/run-api-tests:
        (runAllTests): Inline runAllTestsInSuite().

2011-12-22  Adam Roben  <aroben@apple.com>

        Add a --xml flag to test-webkitpy

        test-webkitpy --xml will, in addition to providing the standard text output on stdout, write
        JUnit-style XML files to a test-webkitpy-xml-reports subdirectory in the working directory.
        This is useful for working with tools that consume JUnit-style XML files.

        Fixes <http://webkit.org/b/75090> Would like a way to generate JUnit-style XML files when
        running test-webkitpy

        Reviewed by Darin Adler.

        * Scripts/webkitpy/test/main.py:
        (Tester.run_tests): If the --xml flag is passed, create an XMLTestRunner and pass it to
        unittest.main(). Otherwise pass no test runner so that unittest will choose its own default.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_xmlrunner):
        Added code to install unittest-xml-reporting as webkitpy.thirdparty.autoinstalled.xmlrunner.
        This change is untested because it's basically impossible to get a test to pass when --xml
        is passed to test-webkitpy (because xmlrunner will already have been imported by the time
        the test runs).

2011-12-22  David Kilzer  <ddkilzer@apple.com>

        TestWebKitAPI: initialize the main thread before running tests
        <http://webkit.org/b/75064>

        Reviewed by Adam Roben.

        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController): Call
        WTF::initializeMainThread() to prevent assertions in Debug
        builds.

2011-12-22  David Kilzer  <ddkilzer@apple.com>

        run-api-tests: dumpAllTests() should not use global variables

        Reviewed by Adam Roben.

        Part of: <http://webkit.org/b/75065> run-api-tests should be able to run individual suites and tests

        * Scripts/run-api-tests: Renamed $dump to $dumpTests.
        (dumpTestsBySuite): Rename from dumpAllTests() and pass in
        global data as an argument.  Sort suite names and test names
        alphabetically to match output when running tests.

2011-12-22  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Enable blob for the BlackBerry porting
        https://bugs.webkit.org/show_bug.cgi?id=75074

        Reviewed by George Staikos.

        * Scripts/build-webkit:

2011-12-22  Kentaro Hara  <haraken@chromium.org>

        Add unittests for the Perl parser of prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=74994

        Reviewed by David Kilzer.

        This patch adds unittests for get_function_line_ranges_for_perl() of prepare-ChangeLog.

        Test: Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests.pl

        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl: Added.
        Runs unittests specified in @testFiles.
        You can reset expected results by specifying a --reset-results option.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests.pl: Added.
        Contains simple methods.
        (func1):
        (func2):
        (func3):
        (func4):
        (func5):
        (func6):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests-expected.txt: Added.
        This test result is generated by the --reset-results option.

2011-12-21  Eric Seidel  <eric@webkit.org>

        Add webkit.review.bot@gmail.com and commit-queue@webkit.org as "contributors"
        so that they appear in the bugzilla autocomplete CC list.
        I also removed the "radar" irc nick (which I believe does not exist)
        and removed the uneeded [] around the radar bugzilla email.

        Unreviewed.

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

2011-12-21  Daniel Bates  <dbates@rim.com>

        Teach build-jsc how to build JavaScriptCore for the EFL, BlackBerry, and WinCE ports
        https://bugs.webkit.org/show_bug.cgi?id=74985

        Reviewed by Eric Seidel.

        * Scripts/build-jsc:
        * Scripts/webkitdirs.pm:
        (cmakeBasedPortName): Added.

2011-12-21  Daniel Bates  <dbates@rim.com>

        Extract BlackBerry CMake arguments from build-webkit into separate function
        https://bugs.webkit.org/show_bug.cgi?id=74981

        Reviewed by Rob Buis.

        Towards adding support for using Tools/Scripts/build-jsc for the BlackBerry port, move
        the CMake argument logic from Tools/Scripts/build-webkit to function webkitdirs::blackberryCMakeArguments()
        and have cmakeBasedPortArguments() call this function for the BlackBerry CMake argument list.
        This will allow us to get the BlackBerry CMake arguments in Tools/Scripts/build-jsc so
        that we can pass them to the CMake build system when building JavaScriptCore.

        * Scripts/build-webkit: Move construction of CMake argument list from here to
        webkitdirs::blackberryCMakeArguments(). Also, remove exported function blackberryTargetArchitecture()
        since it's only called within webkitdirs.pm now. Formerly we exported this function so that we could
        call it from build-webkit.
        * Scripts/webkitdirs.pm:
        (blackberryCMakeArguments): Added.
        (cmakeBasedPortArguments): Modified to call blackberryCMakeArguments() when building the
        BlackBerry port.

2011-12-21  Daniel Bates  <dbates@webkit.org>

        Extract WinCE CMake arguments from build-webkit into separate function
        https://bugs.webkit.org/show_bug.cgi?id=74983

        Reviewed by Rob Buis.

        Towards adding support for using Tools/Scripts/build-jsc for the WinCE port, extract the
        WinCE-specific CMake argument from Tools/Scripts/build-webkit into webkitdirs::cmakeBasedPortArguments().
        This will allow us to get the WinCE-specific CMake argument in Tools/Scripts/build-jsc so
        that we can pass it to the CMake build system when building JavaScriptCore.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (cmakeBasedPortArguments): Added.

2011-12-21  Kentaro Hara  <haraken@chromium.org>

        In prepare-ChangeLog, replace constant global variables with "use constant"
        https://bugs.webkit.org/show_bug.cgi?id=74992

        Reviewed by Ryosuke Niwa.

        This patch replaces the following constant global variables with "use constant"s.
            - $changeLogTimeZone
            - $SVN
            - $GIT
            - %supportedTestExtensions

        * Scripts/prepare-ChangeLog:
        (changeLogNameFromArgs):
        (changeLogEmailAddressFromArgs):
        (resolveConflictedChangeLogs):
        (generateNewChangeLogs):
        (diffCommand):
        (statusCommand):
        (createPatchCommand):
        (findOriginalFileFromSvn):
        (determinePropertyChanges):
        (generateFileList):
        (reviewerAndDescriptionForGitCommit):

2011-12-20  Dirk Pranke  <dpranke@chromium.org>

        nrwt: rename field references from _fs to _filesystem
        https://bugs.webkit.org/show_bug.cgi?id=74898

        Reviewed by Adam Barth.

        This is a simple cleanup; most of the code uses
        self._filesystem, but some used self._fs; this change renames
        the latter to the former to be more consistent.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__):
        (Manager.collect_tests):
        (Manager._strip_test_dir_prefix):
        (Manager._split_into_chunks_if_necessary):
        (Manager.results_directory):
        (Manager._clobber_old_results):
        (Manager._upload_json_files):
        (Manager.print_config):
        (Manager._copy_results_html_file):
        (Manager._show_results_html_file):
        (Manager._log_worker_stack):
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator._normalize_results_json):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGeneratorBase.__init__):
        (JSONResultsGeneratorBase.generate_json_output):
        (JSONResultsGeneratorBase.generate_times_ms_file):
        (JSONResultsGeneratorBase.upload_json_files):
        (JSONResultsGeneratorBase._get_svn_revision):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (Base.__init__):

2011-12-20  Kentaro Hara  <haraken@chromium.org>

        Replace webkitperl/run-leaks_unittest/RunLeaks.pm with webkitperl/LoadAsModule.pm
        https://bugs.webkit.org/show_bug.cgi?id=74836

        Reviewed by David Kilzer.

        webkitperl/run-leaks_unittest/RunLeaks.pm can be used for unit-testing of run-leaks only.
        This patch creates more generalized webkitperl/LoadAsModule.pm, which can be also used
        for unit-testing of other Perl scripts. We are planning to use it for unit-testing
        of prepare-ChangeLog.

        Using LoadAsModule.pm, you can load a Perl script as follows.
        The first argument is the arbitrary package name you want to use, and the second argument
        is the name of the Perl script you want to load.

            use LoadAsModule qw(RunLeaks run-leaks);
            RunLeaks::someFunctionDefinedInRunLeaks(...);

        Tests: Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v1.0.pl
               Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-new.pl
               Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-old.pl

        * Scripts/webkitperl/LoadAsModule.pm: Added.
        * Scripts/webkitperl/run-leaks_unittest/RunLeaks.pm: Removed.
        (import):
        (readFile):
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v1.0.pl: Used LoadAsModule instead of RunLeaks.
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-new.pl: Ditto.
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-old.pl: Ditto.

2011-12-20  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] WK2 Debugging quirks need some improvement
        https://bugs.webkit.org/show_bug.cgi?id=74859

        Reviewed by Simon Hausmann.

        Improvements added to make debugging WebKit2 more
        confortable and efficient:
        1. Unify debugging quirks. From now all of them are controlled
        by the QT_WEBKIT2_DEBUG environment variable.
        2. Disable crash handlers for WebKitTestRunner if debugging quirks
        are used to make it possible to use postmortem debugging via core dumps
        which is extremely useful for debugging bugs triggered by layout tests.
        3. Disable test timeout for WebKitTestRunner if debugging quirks
        are used because that makes debugging impossible.

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp:
        (WTR::LayoutTestController::initializeWaitToDumpWatchdogTimerIfNeeded):
        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::platformRunUntil):

2011-12-20  Rafael Brandao  <rafael.lobo@openbossa.org>

        [Qt][WK2] Implement favicon support
        https://bugs.webkit.org/show_bug.cgi?id=71082

        Reviewed by Simon Hausmann.

        A favorite icon was added on MiniBrowser's url bar as example.
        We display a default icon when the page doesn't have an icon ready.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/icons/favicon.png: Added.
        * MiniBrowser/qt/qml/BrowserWindow.qml:

2011-12-19  Sam Weinig  <sam@webkit.org>

        Add support for scrollLineDown: and scrollLineUp: NSResponder selectors
        https://bugs.webkit.org/show_bug.cgi?id=74907

        Reviewed by Dan Bernstein.

        Add ScrollByLineCommands API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/mac/EditorCommands.mm: Added.
        * TestWebKitAPI/Tests/WebKit2/simple-tall.html: Added.

2011-12-19  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: remove port.executive, port.filesystem, port.user properties
        https://bugs.webkit.org/show_bug.cgi?id=74896

        Reviewed by Eric Seidel.

        Following on the refactoring of the port and host objects, this
        removes the public executive, filesystem, and user properties
        from the Port interface (protected versions of executive and
        filesystem still exist). There is still some more clean up to
        make the code more consistent and rearrange some other files to
        talk to Hosts directly instead of getting them off of the Port
        class.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__):
        (Manager.results_directory):
        (Manager._log_worker_stack):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_fallback_path_in_config):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (_InlineManager.start_worker):
        (_InlineWorkerConnection.__init__):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.safe_init):
        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        (TestConfiguration.from_port):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        (Port.tests):
        (Port.show_results_html_file):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_layout_tests_skipping):
        (PortTest.test_test_dirs):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__):
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        (HtmlGenerator.__init__):
        (HtmlGenerator.show_html):
        (real_main):
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        (TestHtmlGenerator.make_generator):

2011-12-19  Daniel Bates  <dbates@webkit.org>

        Pass command line arguments to GDB when debugging a Mac WebKit application
        https://bugs.webkit.org/show_bug.cgi?id=72829

        Reviewed by David Kilzer.

        Pass through any command line arguments given to debug-{safari, minibrowser}
        to GDB so that they may influence the application instance launched by GDB.

        * Scripts/webkitdirs.pm:
        (execMacWebKitAppForDebugging):

2011-12-19  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: remove executive,filesystem,user parameters from Port constructor
        https://bugs.webkit.org/show_bug.cgi?id=74878

        Reviewed by Eric Seidel.

        This change concludes the refactoring that makes Host a required
        parameter for Port and ensures that all access to filesystem,
        executives, etc. is going through the Host.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):

2011-12-19  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: finish refactoring port classes to make a host mandatory
        https://bugs.webkit.org/show_bug.cgi?id=74566

        Reviewed by Eric Seidel.

        This change makes all Port objects take a required (System)Host
        parameter, and updates the TestPort object to no longer create a
        mock filesystem or add files to the existing filesystem by
        default.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory.__init__):
        (PortFactory._get_kwargs):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestInstance.__init__):
        (TestPort.__init__):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (passing_run):
        (logging_run):
        (get_tests_run):
        (MainTest.test_single_file):
        (MainTest.test_stderr_is_saved):
        (MainTest.test_test_list):
        (MainTest.test_test_list_with_prefix):
        (MainTest.test_missing_and_unexpected_results):
        (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_retries_directory):
        (MainTest.test_tolerance.get_port_for_run):
        (MainTest.test_reftest_should_not_use_naming_convention_if_not_listed_in_reftestlist):
        (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/to_be_moved/rebaseline_chromium_webkit_tests.py:
        (Rebaseliner.__init__):
        (main):
        (real_main):
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        (test_host_port_and_filesystem):
        (TestRebaseliner.make_rebaseliner):
        (TestRealMain.test_all_platforms):
        (TestHtmlGenerator.make_generator):

2011-12-19  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: update unit tests in preparation for making host a mandatory parameter to Port objects
        https://bugs.webkit.org/show_bug.cgi?id=74562

        Reviewed by Eric Seidel.

        Apart from a minor change to style/checkers/test_expectations.py
        to take a host as a parameter to a TestExpectationsChecker(),
        there are only refactoring changes to unit tests here.

        * 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_json_generation):
        (JSONGeneratorTest.test_test_timings_trie):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (Base.__init__):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.make_port):
        (PortTest.test_layout_tests_skipping):
        (PortTest.test_test_dirs):
        (PortTest.test_additional_platform_directory):
        (PortTest.test_uses_test_expectations_file):
        (PortTest.test_find_no_paths_specified):
        (PortTest.test_find_one_test):
        (PortTest.test_find_glob):
        (PortTest.test_find_with_skipped_directories):
        (PortTest.test_find_with_skipped_directories_2):
        (PortTest.test_parse_reftest_list):
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        (DryRunPort.__init__):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.setUp):
        (FactoryTest.tearDown):
        (FactoryTest.assert_port):
        (FactoryTest.assert_platform_port):
        (FactoryTest.test_unknown_specified):
        (FactoryTest.test_unknown_default):
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        (GetGoogleChromePortTest._verify_expectations_overrides):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest.make_port):
        (MockDRTTest.assertTest):
        (MockDRTTest.test_main):
        (MockChromiumDRTTest.test_pixeltest__fails):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest._assert_search_path):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (TestWebKitPort.__init__):
        (WebKitPortTest.test_skipped_directories_for_symbols):
        (test_skipped_directories_for_features):
        (test_skipped_layout_tests):
        (test_skipped_file_search_paths):
        (test_root_option):
        (test_test_expectations):
        (test_build_driver):
        (test_linux_distro_detection):
        (test_apache_config_file_name_for_platform):
        (test_path_to_apache_config_file):
        (WebKitDriverTest.test_read_block):
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.__init__):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase._expect_port_for_expectations_path):
        (TestExpectationsTestCase.assert_lines_lint):
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:
        (get_test_config.TestMacPort):

2011-12-19  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [Efl] Fix path returned by builtDylibPathForName in webkitdirs.pm
        https://bugs.webkit.org/show_bug.cgi?id=74854

        Reviewed by Csaba Osztrogonác.

        Since r101052, libewebkit.so is built in a different location, so we
        need to adjust the path returned by builtDylibPathForName.

        usesPerConfigurationBuildDirectory also needs to be fixed, as the Efl
        port also respects Release/Debug configurations.

        These changes should make run-launcher finally work correctly with
        webkit-efl.

        * Scripts/webkitdirs.pm:
        (usesPerConfigurationBuildDirectory):
        (builtDylibPathForName):

2011-12-19  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Add support for modal event loop processing for WTR
        https://bugs.webkit.org/show_bug.cgi?id=74852

        Reviewed by Kenneth Rohde Christiansen.

        Rewrote event loop processing: Instead of terminating the event loop
        in notifyDone() - something no other platform does - we now respect the
        "bool& condition" parameter passed to platformRunUntil. This ensures
        proper termination even when the condition is changed from within a
        nested event loop, because only when we _exit_ from the nested event
        loop we will check the condition and terminate the test properly.

        In addition this patch implements TestController::runModal by means of
        a nested event loop, which is passed to the platform webview that is
        supposed to be modal. It is that view's responsibility to exit the
        loop, upon destruction. I believe that's similar to how it works on the Mac,
        where it doesn't seem that NSApp's runModalForWindow is terminate via
        abort/stopModal but simply because the window is closed.

        * WebKitTestRunner/PlatformWebView.h:
        (WTR::PlatformWebView::setModalEventLoop):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::notifyDone):
        (WTR::TestController::platformRunUntil):
        (WTR::TestController::runModal):

2011-12-18  Kentaro Hara  <haraken@chromium.org>

        REGRESSION(r103149): prepare-ChangeLog outputs a warning
        https://bugs.webkit.org/show_bug.cgi?id=74808

        Reviewed by David Kilzer.

        Added the prototype declaration of main() to avoid warning messages.
        Sorted subroutine declarations in the alphabetical order.

        * Scripts/prepare-ChangeLog:

2011-12-17  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        [Qt] Fix QtTestBrowser compilation with QtWidgets module
        https://bugs.webkit.org/show_bug.cgi?id=74791

        Reviewed by Andreas Kling.

        * QtTestBrowser/QtTestBrowser.pro:

2011-12-17  Kentaro Hara  <haraken@chromium.org>

        Remove top-level code completely from prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=74698

        Reviewed by Darin Adler.

        We are planning to write unit-tests for prepare-ChangeLog in a run-leaks_unittest manner.
        This patch just moves all top-level code into main().

        * Scripts/prepare-ChangeLog:
        (main):

2011-12-16  Dean Jackson  <dino@apple.com>

        Move webkit-bug-importer to Contributor. It won't
        autocomplete as an Account.
        See https://bugs.webkit.org/show_bug.cgi?id=74739
        for some discussion.

        Unreviewed.

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

2011-12-16  Dean Jackson  <dino@apple.com>

        Add webkit-bug-importer@group.apple.com to accounts
        so that it autocompletes in bugzilla.

        Unreviewed.

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

2011-12-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, skipping 3 failing GTK API tests.

        * Scripts/run-gtk-tests:

2011-12-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK API tests build fix attempt.

        * Scripts/run-gtk-tests: Run xvfb on a display not used by NRWT.

2011-12-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, unskipping GTK testdownload. Should pass on the bot now.

        * Scripts/run-gtk-tests:

2011-12-16  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix the build for newer Qt5
        https://bugs.webkit.org/show_bug.cgi?id=74703

        Reviewed by Csaba Osztrogonác.

        * QtTestBrowser/launcherwindow.h: Add missing forward declaration.
        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::sendTouchEvent): Allocate QTouchDevice and use with QTouchEvent constructor.
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp: Ditto.
        (WTR::EventSenderProxy::sendTouchEvent):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::sendTouchEvent): Ditto.
        (MiniBrowserApplication::notify): Adapt to changed API for marking primary touch point.

2011-12-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Detect and force clean build when feature defines are added

        Reviewed by Ossy.

        https://bugs.webkit.org/show_bug.cgi?id=74689

        * Scripts/webkitdirs.pm:

2011-12-16  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Remove all global variables from prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=74681

        Reviewed by Ryosuke Niwa.

        We are planning to write unit-tests for prepare-ChangeLog in a run-leaks_unittest
        manner. This bug is one of the incremental refactorings to remove all top-level
        code and global variables from prepare-ChangeLog. In this patch,
        we make the following global variables be used only through parameter passing.
        This patch removes all global variables from prepare-ChangeLog.
            - $mergeBase
            - $gitCommit
            - $gitIndex

        * Scripts/prepare-ChangeLog:
        (generateFunctionLists):
        (changeLogNameFromArgs):
        (changeLogEmailAddressFromArgs):
        (generateNewChangeLogs):
        (printDiff):
        (diffFromToString):
        (diffCommand):
        (statusCommand):
        (createPatchCommand):
        (generateFileList):
        (isConflictStatus):

2011-12-15  Philippe Normand  <pnormand@igalia.com>

        [GTK] Rounding errors on 32-bit machines causes tests to fail
        https://bugs.webkit.org/show_bug.cgi?id=72254

        Initial patch by vanuan@gmail.com.
        Reviewed by Martin Robinson.

        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProjectIfNecessary): Pass additional
        CXXFLAGS to autogen in an attempt to harmonize floating point
        values between 32-bit and 64-bit architectures.

2011-12-16  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Make distcheck fails during the install
        https://bugs.webkit.org/show_bug.cgi?id=74274

        No review, since this is a build fix.

        * GNUmakefile.am: Remove BUILT_SOURCES from the dependency list for the gtkdoc
        step. BUILT_SOURCES includes forwarding header generation for WebKit2, which
        always runs. This means that the gtkdoc step was always running when make was
        invoked. Generating gtkdoc during 'make install' was triggering a race condition
        with the library file. Later we can fix generate-forwarding-headers and unbreak
        'make docs,' but this bandaid is sufficient to let us release.

2011-12-15  Eric Seidel  <eric@webkit.org>

        NRWT should use free + inactive memory for default_child_processes on OS X (and never return < 1 process)
        https://bugs.webkit.org/show_bug.cgi?id=74650

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._compute_bytes_from_vm_stat_output):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.default_child_processes):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_default_child_processes):

2011-12-15  Filip Pizlo  <fpizlo@apple.com>

        bencher script should support remote benchmarking on platforms that don't have ruby
        https://bugs.webkit.org/show_bug.cgi?id=74659

        Rubber-stamped by Sam Weinig.
        
        Added the ability to have bencher generate a benchmarking playload that consists of
        copies of all of the benchmarks, optionally copies of all of the frameworks and
        binaries to run all of the VMs, and a sh script that runs the benchmarks in random
        order, which then spits out a raw results file that bencher can parse.
        
        In normal operating mode, you never see this, as it just generates the payload and
        script internally, runs it, parses the results, and spits them out.
        
        The --remote mode has been changed to use this style, so any remote host that has
        sshd, passwordless login support, a ~/.bencher file that points to a "tempPath", and
        a sh-compatible shell can be used for remote benchmarking.
        
        The feature to include VMs in the benchmarking payload is by default only activated
        when using --remote, but it can also be activated when doing local benchmarking; the
        benefit is that you remove any pathname-related performance pathologies. All VMs
        become equal because they are all located in
        /path/to/bencher/directory/temp/benchdata/vmN where N is the configuration number
        (usually 0 or 1).
        
        Also fixed bugs in the DumpRenderTree support. It's now possible to run all benchmarks
        through DumpRenderTree. This is only a bit slower than running in jsc.

        * Scripts/bencher:

2011-12-15  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up TestPort to (mostly) not create a new filesystem
        https://bugs.webkit.org/show_bug.cgi?id=74556

        This change modifies the TestPort to be ready to add tests to an
        existing filesystem instead of creating a new filesystem; we
        leave unit_test_filesystem() in for now for compatibility.

        * Scripts/webkitpy/common/host_mock.py:
        (MockHost.__init__):
          - call add_unit_tests_to_mock_filesystem by default to make
            the MockHost more generally useful for layout_test unit tests.
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestInstance.__init__):
        (add_unit_tests_to_mock_filesystem):
        (add_file):
        (unit_test_filesystem):
        (TestPort.__init__):
        (TestPort._set_default_overriding_none):

2011-12-15  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: cleanup prior to systemhostifying the layout_test/port* classes
        https://bugs.webkit.org/show_bug.cgi?id=74551

        This is some minor cleanup prior to making all of the host/port
        changes described in bug 74138.

        * Scripts/webkitpy/common/host_mock.py:
        (MockHost.__init__):
          - make sure the scm object is initialized with the same mock
            executive and filesystem objects.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.clear_written_files):
          - add a routine that will be useful in testing.
        (MockFileSystem.maybe_make_directory):
        (MockFileSystem.write_binary_file):
          - fix bugs to make sure directories are created properly.
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (_Process.run):
          - add clarifying comments.
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        (MockDRTPort.__init__):
        (MockDRT.__init__):
          - add clarifying comments.

2011-12-15  Anders Carlsson  <andersca@apple.com>

        Regression (r102866): Navigating away from or closing a page with a plugin crashes
        https://bugs.webkit.org/show_bug.cgi?id=74655

        Reviewed by Sam Weinig.

        Add a bunch of tests.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:

2011-12-15  Stephanie Lewis  <slewis@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=74469
        Escape paths to svn commands so our tools can handle filenames with @ symbols.

        Reviewed by Adam Roben.

        * Scripts/VCSUtils.pm:
        (scmMoveOrRenameFile):
        (scmAddExecutableBit):
        (scmRemoveExecutableBit):
        (determineSVNRoot):
        (svnRevisionForDirectory):
        (pathRelativeToSVNRepositoryRootForPath):
        (svnStatus):
        (escapeSubversionPath):
        * Scripts/parse-malloc-history:
        (main):
        * Scripts/prepare-ChangeLog:
        (diffCommand):
        (statusCommand):
        (findOriginalFileFromSvn):
        (determinePropertyChanges):
        * Scripts/resolve-ChangeLogs:
        (conflictFiles):
        (resolveConflict):
        (showStatus):
        * Scripts/svn-apply:
        (patch):
        (scmCopy):
        (scmAdd):
        (scmRemove):
        * Scripts/svn-create-patch:
        (findBaseUrl):
        (findMimeType):
        (findSourceFileAndRevision):
        (generateDiff):
        (generateFileList):
        (manufacturePatchForAdditionWithHistory):
        * Scripts/svn-unapply:
        (patch):
        (revertDirectories):

2011-12-15  Michael Bruning  <michael.bruning@nokia.com>

        [qt][wk2] MiniBrowser: Add pressed state for viewport info button.
        https://bugs.webkit.org/show_bug.cgi?id=74617

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/qml/BrowserWindow.qml: Added state dependent coloring
        for viewport info button, adjusted height and added rounded corners.

2011-12-15  Andy Estes  <aestes@apple.com>

        TestFailures: store the name of the buildbot results directory in a property
        https://bugs.webkit.org/show_bug.cgi?id=74663

        Reviewed by Adam Barth.
        
        Store the name of the results directory as a property on Buildbot's
        prototype. This allows subclasses of Buildbot to customize the results
        directory.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Buildbot.js:
        (Buildbot.prototype.resultsDirectoryURL):

2011-12-15  Tony Chang  <tony@chromium.org>

        [chromium] pass --delete_unversioned_trees to gclient on the bots
        https://bugs.webkit.org/show_bug.cgi?id=74565

        Reviewed by Kenneth Russell.

        It was temporarily removed in r102891 to keep the bots green.  Now
        that the bots have cycled, we can add it back.

        * Scripts/update-webkit-chromium:

2011-12-15  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] In prepare-ChangeLog, make several global variables be used only through parameter passing
        https://bugs.webkit.org/show_bug.cgi?id=74497

        Reviewed by Ryosuke Niwa.

        We are planning to write unit-tests for prepare-ChangeLog in a run-leaks_unittest
        manner. This bug is one of the incremental refactorings to remove all top-level
        code and global variables from prepare-ChangeLog. In this patch,
        we make the following global variables be used only through parameter passing.
            - $bugDescription
            - $bugNumber
            - $name
            - $emailAddress
            - $gitReviewer
            - $writeChangeLogs

        * Scripts/prepare-ChangeLog:
        (fetchBugDescriptionFromURL):
        (generateNewChangeLogs):
        (reviewerAndDescriptionForGitCommit):

2011-12-15  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Add a few more web database functions to ewk_settings.
        https://bugs.webkit.org/show_bug.cgi?id=72148

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::clearAllDatabases):
        (LayoutTestController::setDatabaseQuota):

2011-12-15  Martin Kosiba  <mkosiba@google.com>

        Fix find on web pages with -webkit-user-select: none for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=72281

        Reviewed by Ryosuke Niwa.

        Provided a partial findString implementation. This doesn't support
        all of the FindOptions since they're not exposed via WebFindOptions.

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

2011-12-15  Kenneth Russell  <kbr@google.com>

        [chromium] Add DRT support for WebKitPageCacheSupportsPluginsPreferenceKey
        https://bugs.webkit.org/show_bug.cgi?id=74581

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:

2011-12-15  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Improve the look of the viewport info overlay

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/qml/ViewportInfoItem.qml:

2011-12-15  Igor Oliveira  <igor.oliveira@openbossa.org>

        [Qt] Support requestAnimationFrame API
        https://bugs.webkit.org/show_bug.cgi?id=74528

        Add build-option for requestAnimationFrame feature.

        Reviewed by Kenneth Rohde Christiansen.

        * qmake/mkspecs/features/features.prf:

2011-12-15  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't add WebCoreSupport and WebKit APIs to include WebCore's include path

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/webcore.prf:

2011-12-15  Michael Brüning  <michael.bruning@nokia.com>

        [QT][WK2]Add (experimental) viewport info view to Minibrowser/qt.
        https://bugs.webkit.org/show_bug.cgi?id=72893

        Reviewed by Kenneth Rohde Christiansen.

        This patch extends QQuickWebViewExperimental by a property named
        viewportInfo, which contains the viewport scalability and
        layout and contents size information. This property is exposed to
        QML through the experimental extension for QQuickWebView.

        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/icons/info.png: Added.
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/ViewportInfoItem.qml: Added.

2011-12-15  Shinya Kawanaka  <shinyak@google.com>

        [chromium] WebViewHost::requestCheckingOfText should return immediately if text is empty.
        https://bugs.webkit.org/show_bug.cgi?id=74586

        Reviewed by Hajime Morita.

        No new tests. Covered by existing tests.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::requestCheckingOfText):
          Returns immediately if text is empty.

2011-12-15  Alexander Færøy  <ahf@0x90.dk>

        [Qt] QtWebKit fails to build on Mac OS X after r102776
        https://bugs.webkit.org/show_bug.cgi?id=74593

        Reviewed by Simon Hausmann.

        CONFIG =+ link_pkgconfig is needed such that the correct parameters
        are passed to the compiler.

        * DumpRenderTree/qt/DumpRenderTree.pro:

2011-12-14  Tony Chang  <tony@chromium.org>

        [chromium] Remove redundant third_party entries from chromium DEPS
        https://bugs.webkit.org/show_bug.cgi?id=74472

        Reviewed by Kenneth Russell.

        * Scripts/update-webkit-chromium: Temporarily keep unversioned trees.

2011-12-14  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] In prepare-ChangeLog, replace $isGit and $isSVN with
        VCSUtils::isGit() and VCSUtils::isSVN().
        https://bugs.webkit.org/show_bug.cgi?id=74485

        Reviewed by David Kilzer.

        We are planning to write unit-tests for prepare-ChangeLog in a run-leaks_unittest
        manner. This bug is one of the incremental refactorings to remove all top-level
        code and global variables from prepare-ChangeLog. This patch replaces $isGit and $isSVN
        with VCSUtils::isGit() and VCSUtils::isSVN(). This patch also removes firstDirectoryOrCwd(),
        assuming that no user will mix Git/SVN checkouts and thus we can judge SVN or Git
        just by looking at the current working directory.

        * Scripts/prepare-ChangeLog: Removed firstDirectoryOrCwd().
        (diffFromToString):
        (diffCommand):
        (statusCommand):
        (createPatchCommand):
        (diffHeaderFormat):
        (generateFileList):
        (isAddedStatus):
        (isConflictStatus):
        (statusDescription):
        (extractLineRange):

2011-12-14  Sam Weinig  <weinig@apple.com>

        Remove whitespace from InheritedPropertySheets attributes in
        vsprops files to appease the Visual Studio project migrator.

        Reviewed by Adam Roben.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebug.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebugAll.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebugCairoCFLite.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginProduction.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginRelease.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginReleaseCairoCFLite.vsprops:
        * DumpRenderTree/win/DumpRenderTreeDebug.vsprops:
        * DumpRenderTree/win/DumpRenderTreeDebugAll.vsprops:
        * DumpRenderTree/win/DumpRenderTreeDebugCairoCFLite.vsprops:
        * DumpRenderTree/win/DumpRenderTreeProduction.vsprops:
        * DumpRenderTree/win/DumpRenderTreeRelease.vsprops:
        * DumpRenderTree/win/DumpRenderTreeReleaseCairoCFLite.vsprops:
        * DumpRenderTree/win/ImageDiffDebug.vsprops:
        * DumpRenderTree/win/ImageDiffDebugAll.vsprops:
        * DumpRenderTree/win/ImageDiffDebugCairoCFLite.vsprops:
        * DumpRenderTree/win/ImageDiffProduction.vsprops:
        * DumpRenderTree/win/ImageDiffRelease.vsprops:
        * DumpRenderTree/win/ImageDiffReleaseCairoCFLite.vsprops:
        * MiniBrowser/Configurations/MiniBrowserDebug.vsprops:
        * MiniBrowser/Configurations/MiniBrowserDebugAll.vsprops:
        * MiniBrowser/Configurations/MiniBrowserDebugCairoCFLite.vsprops:
        * MiniBrowser/Configurations/MiniBrowserProduction.vsprops:
        * MiniBrowser/Configurations/MiniBrowserRelease.vsprops:
        * MiniBrowser/Configurations/MiniBrowserReleaseCairoCFLite.vsprops:
        * TestWebKitAPI/Configurations/TestWebKitAPIRelease.vsprops:
        * TestWebKitAPI/Configurations/TestWebKitAPIReleaseCairoCFLite.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinDebug.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinDebugAll.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinDebugCairoCFLite.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinProduction.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinRelease.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinReleaseCairoCFLite.vsprops:
        * WebKitTestRunner/win/InjectedBundleDebug.vsprops:
        * WebKitTestRunner/win/InjectedBundleDebugAll.vsprops:
        * WebKitTestRunner/win/InjectedBundleDebugCairoCFLite.vsprops:
        * WebKitTestRunner/win/InjectedBundleProduction.vsprops:
        * WebKitTestRunner/win/InjectedBundleRelease.vsprops:
        * WebKitTestRunner/win/InjectedBundleReleaseCairoCFLite.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerDebug.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerDebugAll.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerDebugCairoCFLite.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerProduction.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerRelease.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerReleaseCairoCFLite.vsprops:
        * WinLauncher/WinLauncherDebug.vsprops:
        * WinLauncher/WinLauncherDebugAll.vsprops:
        * WinLauncher/WinLauncherDebugCairoCFLite.vsprops:
        * WinLauncher/WinLauncherProduction.vsprops:
        * WinLauncher/WinLauncherRelease.vsprops:
        * WinLauncher/WinLauncherReleaseCairoCFLite.vsprops:
        * record-memory-win/record-memory-winDebug.vsprops:
        * record-memory-win/record-memory-winDebugAll.vsprops:
        * record-memory-win/record-memory-winDebugCairoCFLite.vsprops:
        * record-memory-win/record-memory-winProduction.vsprops:
        * record-memory-win/record-memory-winRelease.vsprops:
        * record-memory-win/record-memory-winReleaseCairoCFLite.vsprops:

2011-12-14  Anders Carlsson  <andersca@apple.com>

        Windows build fix.

        Move CHECKs out of the destructor.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:
        (TestWebKitAPI::B::~B):
        (TestWebKitAPI::TEST):

2011-12-14  Anders Carlsson  <andersca@apple.com>

        binding a member function should ref/deref the object pointer if needed
        https://bugs.webkit.org/show_bug.cgi?id=74552

        Reviewed by Sam Weinig.

        Add new tests.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:
        (TestWebKitAPI::B::B):
        (TestWebKitAPI::B::~B):
        (TestWebKitAPI::B::ref):
        (TestWebKitAPI::B::deref):
        (TestWebKitAPI::B::f):
        (TestWebKitAPI::B::g):
        (TestWebKitAPI::TEST):

2011-12-14  Hajime Morrita  <morrita@chromium.org>

        JS_INLINE and WTF_INLINE should be visible from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=73191

        Reviewed by Kevin Ollivier.

        Removed macro definitions which is now provided by Platform.h

        * DumpRenderTree/chromium/config.h:
        * DumpRenderTree/config.h:
        * DumpRenderTree/ForwardingHeaders/runtime/JSExportMacros.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/ExportMacros.h: Added.
        * DumpRenderTree/win/DumpRenderTreePreBuild.cmd: Add new ForwardingHeaders.
        * TestWebKitAPI/config.h:
        * WebKitTestRunner/config.h:

2011-12-14  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r102761.
        http://trac.webkit.org/changeset/102761
        https://bugs.webkit.org/show_bug.cgi?id=74485

        we came up with a better fix than this (see comments in bug
        74485)

        * Scripts/prepare-ChangeLog:
        (generateFunctionLists):
        (printDiff):
        (diffCommand):
        (statusCommand):
        (createPatchCommand):
        (generateFileList):
        (isAddedStatus):
        (isConflictStatus):
        (statusDescription):
        (extractLineRange):

2011-12-14  Anders Carlsson  <andersca@apple.com>

        Work around a bug in the MSVC2005 compiler
        https://bugs.webkit.org/show_bug.cgi?id=74550

        Reviewed by Sam Weinig.

        Re-enable tests.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:

2011-12-14  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Test fonts are not used with Qt5
        https://bugs.webkit.org/show_bug.cgi?id=72513

        My last unreviewed buildfix for this crazy bug.

        * qmake/mkspecs/features/features.prf:

2011-12-14  Anders Carlsson  <andersca@apple.com>

        Another attempt at fixing the Windows build.

        Disable all the tests until I can figure out what's going on here.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:

2011-12-14  Anders Carlsson  <andersca@apple.com>

        Fix the Windows build.

        Disable some of the tests for now.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:

2011-12-14  Anders Carlsson  <andersca@apple.com>

        bind should handle member functions
        https://bugs.webkit.org/show_bug.cgi?id=74529

        Reviewed by Sam Weinig.

        Add tests.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:
        (TestWebKitAPI::A::A):
        (TestWebKitAPI::A::f):
        (TestWebKitAPI::A::addF):
        (TestWebKitAPI::TEST):

2011-12-14  Anders Carlsson  <andersca@apple.com>

        Add unary and binary bind overloads
        https://bugs.webkit.org/show_bug.cgi?id=74524

        Reviewed by Sam Weinig.

        Add tests.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::multiplyByTwo):
        (TestWebKitAPI::multiplyByOneAndAHalf):
        (TestWebKitAPI::multiply):
        (TestWebKitAPI::subtract):

2011-12-14  Holger Hans Peter Freyther  <holger@moiji-mobile.com>

        [Qt] Test fonts are not used with Qt5
        https://bugs.webkit.org/show_bug.cgi?id=72513

        MIPS and SH4 buildfix after r102776 and r102795.

        Reviewed by Csaba Osztrogonác.

        * qmake/mkspecs/features/features.prf:

2011-12-14  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed speculative MIPS and SH4 buildfix after r102776.

        * qmake/mkspecs/features/features.prf:

2011-12-14  Andreas Kling  <kling@webkit.org>

        Make my e-mail address a little more awesome.

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

2011-12-14  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Rollout r102769, because it broke Qt-4.8 builds.

        * qmake/mkspecs/features/webcore.prf:

2011-12-14  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Test fonts are not used with Qt5
        https://bugs.webkit.org/show_bug.cgi?id=72513

        Reviewed by Simon Hausmann.

        Don't depend on Q_WS_X11 anymore since it's not the Qt5
        way to detect the platform. Make the guards depend
        on our own configtest for fontconfig. For Qt4 we can still
        use the preassumption that we have it on Linux.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::initializeFonts):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/main.cpp:
        (main): Additionally remove a nonsense piece of code that was
        trying to reset the font settings - which is not necessary -
        after we have already returned from main.
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * WebKitTestRunner/Target.pri: Remove unnecessary fontconfig linkage
        from WTR. It is not needed. We set up the fonts via the injected bundle.
        * qmake/config.tests/fontconfig/fontconfig.cpp: Added.
        (main):
        * qmake/config.tests/fontconfig/fontconfig.pro: Added.
        * qmake/mkspecs/features/features.prf:
        * qmake/sync.profile:

2011-12-14  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't add WebCoreSupport and WebKit APIs to include WebCore's include path

        Followup to r102679

        https://bugs.webkit.org/show_bug.cgi?id=74413

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/webcore.prf:

2011-12-14  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Mobile theme could use a little refresh
        https://bugs.webkit.org/show_bug.cgi?id=74293

        Have MiniBrowser use the mobile theme when not
        passed --desktop.

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):

2011-12-14  João Paulo Rechi Vita  <jprvita@openbossa.org>

        [Qt] [Gardening] Remove qt-4.7 layout tests dir
        https://bugs.webkit.org/show_bug.cgi?id=74426

        Building trunk now depends on Qt >= 4.8, so no need to keep this directory
        on the tree.

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.qt_version):
        (QtPort.baseline_search_path):
        (QtPort._skipped_file_search_paths):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest._assert_search_path):

2011-12-14  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] In prepare-ChangeLog, make $isGit and $isSVN be used only
        through parameter passing
        https://bugs.webkit.org/show_bug.cgi?id=74485

        Reviewed by Ryosuke Niwa.

        We are planning to write unit-tests for prepare-ChangeLog in a run-leaks_unittest
        manner. This bug is one of the incremental refactorings to remove all top-level
        code and global variables from prepare-ChangeLog. In this patch,
        we make the following global variables be used only through parameter passing.
            - $isGit
            - $isSVN

        * Scripts/prepare-ChangeLog:
        (generateFunctionLists):
        (printDiff):
        (diffFromToString):
        (diffCommand):
        (statusCommand):
        (createPatchCommand):
        (diffHeaderFormat):
        (generateFileList):
        (isAddedStatus):
        (isConflictStatus):
        (statusDescription):
        (extractLineRange):

2011-12-14  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] DeviceOrientationClientMockQt should be removed in favor of DeviceOrientationClientMock
        https://bugs.webkit.org/show_bug.cgi?id=74417

        Reviewed by Simon Hausmann.

        Based on original patch by Kenneth Christiansen.

        Already covered by current tests.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockDeviceOrientation):

2011-12-03  Philippe Normand  <pnormand@igalia.com>

        [GTK] Bad text rendering since r101343
        https://bugs.webkit.org/show_bug.cgi?id=73744

        Reviewed by Martin Robinson.

        Turn cairo hint metrics off for better font metrics reporting in
        the tests. This is especially important for SVG.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeGtkFontSettings):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::initializeGtkSettings):

2011-12-13  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Remove several global variables from prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=74389

        Reviewed by David Kilzer.

        We are planning to write unit-tests for prepare-ChangeLog in a run-leaks_unittest
        manner. This bug is one of the incremental refactorings to remove all top-level
        code and global variables from prepare-ChangeLog. In this patch,
        we make the following global variables being used only through parameter passing.
            - %paths
            - $changedFiles
            - $conflictFiles
            - $functionLists
            - $bugURL

        * Scripts/prepare-ChangeLog:
        (findChangeLogs):
        (generateNewChangeLogs):
        (processPaths):
        (generateFileList):
        (firstDirectoryOrCwd):

2011-12-13  Anders Carlsson  <andersca@apple.com>

        Add a very bare-bones implementation of bind and Function to WTF
        https://bugs.webkit.org/show_bug.cgi?id=74462

        Reviewed by Sam Weinig.

        Add basic tests for WTF::Function and WTF::bind.

        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/Functional.cpp: Added.
        (TestWebKitAPI::returnFortyTwo):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2011-12-13  Robin Dunn  <robin@alldunn.com>

        [wx] Add a URL argument to wxWebView constructor.
        https://bugs.webkit.org/show_bug.cgi?id=74316
        
        Reviewed by Kevin Ollivier.

        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (MyApp::OnInit):
        * wx/browser/browser.cpp:
        (MyApp::OnInit):

2011-12-13  Raphael Kubo da Costa  <kubo@profusion.mobi>

        watchlist: Add watchlist for EFL, CMake and libsoup code and put myself on it.
        https://bugs.webkit.org/show_bug.cgi?id=74430

        Reviewed by David Levin.

        * Scripts/webkitpy/common/config/watchlist:

2011-12-13  Peter Beverloo  <peter@chromium.org>

        [Chromium] Pull in FreeType and decrease check-out complexity for Android
        https://bugs.webkit.org/show_bug.cgi?id=74401

        Decrease the check-out complexity by removing the need to first run
        "update-webkit-chromium --chromium" prior to running it with
        "--chromium-android", which was caused by an unversioned third_party/
        directory being created. This moves the Android NDK to Source/WebKit/
        chromium/, coming from third_party/ in that directory.

        Reviewed by Adam Barth.

        * Scripts/update-webkit-chromium:
        * Scripts/webkitdirs.pm:
        (buildChromiumMakefile):

2011-12-13  Andy Wingo  <wingo@igalia.com> and Martin Robinson <mrobinson@igalia.com>

        build-jsc passing incorrect args to buildGtkProject
        https://bugs.webkit.org/show_bug.cgi?id=74308

        Reviewed by Gustavo Noronha Silva.

        * Scripts/build-webkit: Instead of invoking buildGtkProject with
        another argument about webkit2, unshift a --disable-webkit2
        argument onto the buildArgs.
        * Scripts/webkitdirs.pm: Remove $enableWebKit2 arg. Only save autogen.sh
        arguments for WebKit to prevent unnecessary reconfiguration when build-webkit
        and build-jsc are run one after the other.

2011-12-13  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] REGRESSION(102679): It broke Qt5-WK1 build
        https://bugs.webkit.org/show_bug.cgi?id=74413

        Unreviewed buildfix.

        * qmake/mkspecs/features/webcore.prf: Temporarily revert a part of r102679 until a proper fix.

2011-12-13  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed speculativ debug buildfix after r102679.

        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/main.cpp:

2011-12-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Get rid of layering violations in includes

        WebKit/qt/API and WebKit/qt/WebCoreSupport should not be included
        in the webcore.prf, but rather in each target that specificly needs
        headers in these location. We used to include them directly in webcore
        since we had layering violations between WebCore and WebKit, but now
        that they are gone there's no reason to do that.

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * QtTestBrowser/launcherwindow.h:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * qmake/mkspecs/features/webcore.prf:
        * qmake/mkspecs/features/webkit2.prf:

2011-12-13  János Badics  <dicska@gmail.com>

        [NRWT] It crashes intermittently when there are WebProcess crashes
        https://bugs.webkit.org/show_bug.cgi?id=73451

        Use self.poll() instead of self._proc.poll() because it checks if self._proc is None or not.

        Reviewed by Kenneth Rohde Christiansen.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess._check_for_crash):

2011-12-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ API docs build.

        * gtk/generate-gtkdoc:
        (get_webkit2_options): Ignore WebKitUIClient since it's private
        API.

2011-12-13  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed, removed one of my email addresses to use the apprpriate one.

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

2011-12-12  Ádám Kallai  <Kallai.Adam@stud.u-szeged.hu>

        [Qt] Fix skip list search path and expected file search path in ORWT
        https://bugs.webkit.org/show_bug.cgi?id=74281

        Expected file search path fixed.

        Print all used skipped list and expected search path in verbose mode similar to NRWT.

        Reviewed by Csaba Osztrogonác.

        * Scripts/old-run-webkit-tests:
        (buildPlatformResultHierarchy):
        (buildPlatformTestHierarchy):
        (readSkippedFiles):

2011-12-12  Nándor Huszka  <huszka.nandor@stud.u-szeged.hu>

        [Qt] Missing layoutTestController.dumpWillCacheResponse
        https://bugs.webkit.org/show_bug.cgi?id=74287

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::dumpWillCacheResponse):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-12-12  Martin Robinson  <mrobinson@igalia.com>

        [GTK] platform/gtk/fonts/custom-font-missing-glyphs.html fails on 64-bit Debug
        https://bugs.webkit.org/show_bug.cgi?id=73771

        Reviewed by Gustavo Noronha Silva.

        When using a fallback font during testing, always use DejaVu Sans. This prevents
        falling back to DejaVu Serif on some systems.

        * DumpRenderTree/gtk/fonts/fonts.conf: Fall back to DejaVu Sans.

2011-12-08  Pierre Rossi  <pierre.rossi@gmail.com>

        Add myself as a committer

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

2011-12-12  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] [WK2] Support customizing popup menus with QML
        https://bugs.webkit.org/show_bug.cgi?id=73560

        Reviewed by Tor Arne Vestbø.

        Add an Item Selector to our WebView using the experimental API.

        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/ItemSelector.qml: Added.

2011-12-12  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] MiniBrowser should only visualize mock touch points when in non-desktop mode
        https://bugs.webkit.org/show_bug.cgi?id=74283

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::sendTouchEvent):

2011-12-12  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] In prepare-ChangeLog, move into a method the top-level code
        to show ChangeLogs diff and open ChangeLogs in an editor
        https://bugs.webkit.org/show_bug.cgi?id=74266

        Reviewed by Ryosuke Niwa.

        We are planning to write unit-tests for prepare-ChangeLog
        in a run-leaks_unittest manner. This patch is one of the incremental
        refactorings to remove all top-level code and global variables from
        prepare-ChangeLog.

        * Scripts/prepare-ChangeLog: Moved the top-level code to show ChangeLogs diff into printDiff().
        Moved the top-level code to open ChangeLogs in an editor into openChangeLogs().
        Renamed @changed_files to @changedFiles.
        Renamed %conflict_files to %conflictFiles.
        (generateFunctionLists):
        (printDiff):
        (openChangeLogs):

2011-12-11  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Move top-level code to resolve conflicted ChangeLogs into a method
        https://bugs.webkit.org/show_bug.cgi?id=74257

        Reviewed by Ryosuke Niwa.

        We are planning to write unit-tests for prepare-ChangeLog
        in a run-leaks_unittest/ manner. This patch is one of the incremental
        refactorings to remove all top-level code and global variables from
        prepare-ChangeLog.

        * Scripts/prepare-ChangeLog: Moved top-level code to get the latest ChangeLogs
        into getLatestChangeLogs(), and moved top-level code to resolve conflicted ChangeLogs
        into resolveConflictedChangeLogs().
        (getLatestChangeLogs):
        (resolveConflictedChangeLogs):

2011-12-11  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Move top-level code to generate a new ChangeLog into a method
        https://bugs.webkit.org/show_bug.cgi?id=74253

        Reviewed by David Kilzer.

        The objective is to make prepare-ChangeLog a loadable Perl module for unit testing,
        which requires to remove top-level code and global variables. This patch is one of
        the incremental refactorings for that.

        * Scripts/prepare-ChangeLog: Moved top-level code to generate a new ChangeLog into generateNewChangeLogs().
        (generateFunctionLists):
        (findChangeLogs):
        (generateNewChangeLogs):
        (generateFileList): Removed an unnecessary variable $didChangeRegressionTests.

2011-12-10  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] In prepare-ChangeLog, move top-level code to find ChangeLogs into a method
        https://bugs.webkit.org/show_bug.cgi?id=74175

        Reviewed by Ryosuke Niwa.

        The objective is to make prepare-ChangeLog a loadable Perl module for unit testing.
        This requires to remove top-level code. This patch is one of the incremental refactorings
        for that.

        * Scripts/prepare-ChangeLog: Moved top-level code to find ChangeLogs into findChangeLogs().
        (findChangeLogs):

2011-12-10  Andreas Kling  <kling@webkit.org>

        Add my Apple e-mail to committers.py.

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

2011-12-09  Dirk Pranke  <dpranke@chromium.org>

        chromium win build: revert build_webkit_exes_from_webkit_gyp change
        https://bugs.webkit.org/show_bug.cgi?id=74225

        This change sets build_webkit_exes_from_webkit_gyp back to 1;
        the "All.gyp" solution doesn't work on windows.

        * Scripts/webkitdirs.pm:
        (buildChromium):

2011-12-09  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [Qt] Click's count is limited to three continuous clicks.
        https://bugs.webkit.org/show_bug.cgi?id=45666

        Reviewed by Kenneth Rohde Christiansen.

        Update m_time at every call to leapForward, so double clicks
        event are correctly sent by EventSender.

        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::updateClickCountForButton):
        (WTR::EventSenderProxy::leapForward):

2011-12-09  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Reduce top-level code in prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=74172

        Reviewed by Ryosuke Niwa.

        The objective is to make prepare-ChangeLog a loadable Perl module for unit testing.
        This requires to remove top-level code. This patch is one of the incremental refactorings
        for that.

        * Scripts/prepare-ChangeLog: Moved some top-level code into generateFunctionLists().
        (generateFunctionLists):

2011-12-09  Sam Weinig  <sam@webkit.org>

        Expose a WKConnectionRef which represents the connection to/from the WebProcess/UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=74218

        Reviewed by Anders Carlsson.

        Add a test of the WKConnectionRef API.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKConnection.cpp: Added.
        (TestWebKitAPI::didCreateConnection):
        (TestWebKitAPI::connectionDidReceiveMessage):
        (TestWebKitAPI::connectionDidClose):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WKConnection_Bundle.cpp: Added.
        (TestWebKitAPI::connectionDidReceiveMessage):
        (TestWebKitAPI::WKConnectionTest::WKConnectionTest):
        (TestWebKitAPI::WKConnectionTest::initialize):

2011-12-09  David Levin  <levin@chromium.org>

        Hash* iterators should allow comparison between const and const versions.
        https://bugs.webkit.org/show_bug.cgi?id=73370

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.gypi: Add the new test file to the build.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Ditto.
        * TestWebKitAPI/Tests/WTF/HashMap.cpp: Added.
        (TestWebKitAPI::TEST): Add a test for the new functionality.

2011-12-09  Dirk Pranke  <dpranke@chromium.org>

        chromium: visual studio projects are busted when build_webkit_exes_from_webkit_gyp==0
        https://bugs.webkit.org/show_bug.cgi?id=74212

        Reviewed by Tony Chang.

        The change introduced in r102201 to split the executables out of
        WebKit.gyp apparently doesn't work right on Windows, since
        WebKit.gyp and Tools.gyp refer to dependent projects by
        different relative paths (it appears gyp doesn't normalize the
        paths). This change moves Tools.gyp to be in the same directory
        as WebKit.gyp (and All.gyp), which should fix this and
        conveniently will also solve the problem of how to add Tools.gyp
        to the chromium DEPS file.

        * Tools.gyp: Renamed to ../Source/WebKit/chromium/Tools.gyp

2011-12-09  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] In prepare-ChangeLog, move top-level code to fetch a bug description from URL into a method
        https://bugs.webkit.org/show_bug.cgi?id=74173

        Reviewed by Ryosuke Niwa.

        The objective is to make prepare-ChangeLog a loadable Perl module for unit testing.
        This requires to remove top-level code. This patch is one of the incremental refactorings
        for that.

        * Scripts/prepare-ChangeLog: Moved top-level code to fetch a bug description from URL into fetchBugDescriptionFromURL().
        (fetchBugDescriptionFromURL):

2011-12-09  Tony Chang  <tony@chromium.org>

        Switch the chromium mac bots to using skia test results
        https://bugs.webkit.org/show_bug.cgi?id=74201

        Reviewed by Ryosuke Niwa.

        This is reverting http://trac.webkit.org/changeset/97781 and changing
        the name in master.cfg to no longer have cg in the name.

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

2011-12-09  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Remove a wrongly placed ASSERT.

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):

2011-12-09  Cary Clark  <caryclark@google.com>

        layout_test update to accommodate new use_skia=1 default on Chromium-Mac
        https://bugs.webkit.org/show_bug.cgi?id=74118

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        (get):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_versions):
        (ChromiumMacPortTest.test_graphics_type):

2011-12-09  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use new qmake option in Qt5 to prevent dependency issues with GNUmake

        The GNUmake + gcc_MD_depends options together produce .d files using GCC, but
        this failed when moving files in the source tree, as the .d file would contain
        stale dependencies on the old source file location. By keeping the object files
        (and hence the depdendency files) in a proper tree structure inside the objects
        directory we can prevent this failure.

        A side benefit is that we can also have objects with the same name inside the
        same project.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/unix/default_pre.prf:

2011-12-09  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed. Update unit test after r102412.

        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_whois):

2011-12-09  Kentaro Hara  <haraken@chromium.org>

        REGRESSION(r102105): run-bindings-tests should output full diff results
        https://bugs.webkit.org/show_bug.cgi?id=74166

        Reviewed by Adam Barth.

        Since r102105, the output of run-bindings-tests is truncated to 500 characters.
        run-bindings-tests should output full diff results.

        * Scripts/webkitpy/bindings/main.py: Replaced e.message_with_output() with e.output.
        (BindingsTests.generate_from_idl):
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.detect_changes):

2011-12-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix compilation with newly separated Qt 5 QtQuick module
        https://bugs.webkit.org/show_bug.cgi?id=73990

        Reviewed by Kenneth Rohde Christiansen, tweaked by Csaba Osztrogonác.

        Fix QtQuick includes after move from QtDeclarative to QtQuick.

        * MiniBrowser/qt/BrowserWindow.h:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:

2011-12-08  Adam Klein  <adamk@chromium.org>

        [MutationObservers] V8LazyEventHandler breaks microtask delivery semantics
        https://bugs.webkit.org/show_bug.cgi?id=73492

        Reviewed by Adam Barth.

        Add eventSender.scheduleAsynchronousKeyDown, needed to cause a
        keypress event without any script on the stack.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::keyDown):
        (KeyDownTask::KeyDownTask):
        (KeyDownTask::runIfValid):
        (EventSender::scheduleAsynchronousKeyDown):
        * DumpRenderTree/chromium/EventSender.h:

2011-12-08  Hayato Ito  <hayato@chromium.org>

        [gdb] Pretty printer for a 8-bit version of WTF::StringImpl and LChar*.
        https://bugs.webkit.org/show_bug.cgi?id=73980

        Reviewed by Tony Chang.

        * gdb/webkit.py:
        (guess_string_length):
        (ustring_to_string):
        (lstring_to_string):
        (LCharStringPrinter):
        (LCharStringPrinter.to_string):
        (WTFStringImplPrinter.get_length):
        (WTFStringImplPrinter.to_string):
        (WTFStringImplPrinter.is_8bit):
        (WTFStringPrinter.stringimpl_ptr):
        (WTFStringPrinter.get_length):
        (WTFStringPrinter.to_string):
        (add_pretty_printers.lookup_function):

2011-12-08  Pierre Rossi  <pierre.rossi@gmail.com>

        Drop ENABLE_NO_LISTBOX_RENDERING, and make it a runtime decision.
        https://bugs.webkit.org/show_bug.cgi?id=73916

        Reviewed by Kent Tamura.

        * qmake/mkspecs/features/features.prf:

2011-12-08  Adrienne Walker  <enne@google.com>

        Unreviewed contributor additions to committers.py.

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

2011-12-08  David Reveman  <reveman@chromium.org>

        [Chromium] Add per-tile painting flag to DumpRenderTree and rename AcceleratedDrawing to AcceleratedPainting in chromium specific code.
        https://bugs.webkit.org/show_bug.cgi?id=74017

        Reviewed by James Robinson.
        
        Add support for command line flag enable-per-tile-painting in DumpRenderTree.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setAcceleratedPaintingEnabled):
        (TestShell::setPerTilePaintingEnabled):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver._wrapper_options):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2011-12-08  Dirk Pranke  <dpranke@chromium.org>

        create a "SystemHost" object for webkitpy to slim down the Host object
        https://bugs.webkit.org/show_bug.cgi?id=72680

        Reviewed by Eric Siedel.

        This creates a SystemHost object that other objects that should
        only have dependencies on functionality in webkitpy.common.system
        can use; this will allow them to not require a full Host.

        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/common/host_mock.py:
        * Scripts/webkitpy/common/system/systemhost.py: Added.
        * Scripts/webkitpy/common/system/systemhost_mock.py: Added.

2011-12-08  Chris Fleizach  <cfleizach@apple.com>

        AX: platform/mac/accessibility/search-with-frames.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=74093

        Reviewed by Darin Adler.

        Take care of the case when an incoming element is null.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (uiElementForSearchPredicateCallback):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):

2011-12-08  Alexander Færøy  <ahf@0x90.dk>

        [Qt] Visualize mock point ID's in the MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=74098

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::updateVisualMockTouchPoints):
        * MiniBrowser/qt/qml/MockTouchPoint.qml:

2011-12-08  Dominic Mazzoni  <dmazzoni@google.com>

        Accessibility: AccessibilityController should support listening to notifications on all elements.
        https://bugs.webkit.org/show_bug.cgi?id=72866

        Adds addNotificationListener and removeNotificationListener methods
        to AccessibilityController, to listen to notifications on any element
        rather than a specific element. Mac (DRT and WKTR) and Chromium (DRT)
        implementations are all contained in this change.

        On Mac, refactors AccessibilityNotificationHandler into its own
        source file that can be used by both AccessibilityController and
        AccessibilityUIElement. (Both DRT and WKTR.)

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityController.cpp:
        (addNotificationListenerCallback):
        (removeNotificationListenerCallback):
        (AccessibilityController::getJSClass):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/chromium/AccessibilityController.cpp:
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::notificationReceived):
        (AccessibilityController::addNotificationListenerCallback):
        (AccessibilityController::removeNotificationListenerCallback):
        * DumpRenderTree/chromium/AccessibilityController.h:
        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::addNotificationListener):
        (AccessibilityController::removeNotificationListener):
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::~AccessibilityController):
        (AccessibilityController::addNotificationListener):
        (AccessibilityController::removeNotificationListener):
        * DumpRenderTree/mac/AccessibilityNotificationHandler.h: Added.
        * DumpRenderTree/mac/AccessibilityNotificationHandler.mm: Added.
        (-[NSString createJSStringRef]):
        (-[AccessibilityNotificationHandler init]):
        (-[AccessibilityNotificationHandler setPlatformElement:]):
        (-[AccessibilityNotificationHandler dealloc]):
        (-[AccessibilityNotificationHandler setCallback:]):
        (-[AccessibilityNotificationHandler startObserving]):
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::addNotificationListener):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (notificationListenerProc):
        (AccessibilityController::addNotificationListener):
        (AccessibilityController::removeNotificationListener):
        (AccessibilityController::winNotificationReceived):
        (AccessibilityController::winAddNotificationListener):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::addNotificationListener):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::addNotificationListener):
        (WTR::AccessibilityController::removeNotificationListener):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        (WTR::AccessibilityController::logAccessibilityEvents):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.cpp:
        (WTR::AccessibilityTextMarker::AccessibilityTextMarker):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.cpp:
        (WTR::AccessibilityTextMarkerRange::AccessibilityTextMarkerRange):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm: Added.
        (WTR::AccessibilityController::addNotificationListener):
        (WTR::AccessibilityController::removeNotificationListener):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.h: Added.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm: Added.
        (-[NSString createJSStringRef]):
        (-[AccessibilityNotificationHandler init]):
        (-[AccessibilityNotificationHandler setPlatformElement:]):
        (-[AccessibilityNotificationHandler dealloc]):
        (-[AccessibilityNotificationHandler setCallback:]):
        (-[AccessibilityNotificationHandler startObserving]):
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::verticalScrollbar):
        (WTR::AccessibilityUIElement::addNotificationListener):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2011-12-08  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Unreviewed buildfix after r102352.

        * qmake/mkspecs/features/webkit2.prf:

2011-12-08  Adam Roben  <aroben@apple.com>

        Make finding crash logs by PID work on Snow Leopard

        Crash Reporter on Snow Leopard doesn't set the "app_description" extended attribute that we
        were using to check the PID of the crashed process. (Crash Reporter on Lion does.) Now we
        read the first line of the crash log and pull the PID out of there.

        Fixes <http://webkit.org/b/74094> "webkit-patch crash-log <process> <PID>" doesn't work on
        Snow Leopard

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs._find_newest_log_darwin): Read the first line of the crash log to get the process
        name and PID for the log, rather than checking the Lion-only app_description extended
        attribute. We now also reject the log if the process name doesn't match what we expect.

        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (make_mock_crash_report_darwin): Added. Returns a mock crash report given a process name and
        PID.
        (CrashLogsTest.assertLinesEqual): Added. This is a compatibility shim around
        unittest.TestCase.assertMultiLineEqual, which didn't exist before Python 2.7.
        (CrashLogsTest.test_find_log_darwin): Made the mock crash reports more believable by using
        the new make_mock_crash_report_darwin function. Also added tests for files that can't be
        read, files that actually contain a crash log for some other process, and files that are
        misformatted.

        * Scripts/webkitpy/common/system/filesystem.py: Removed FileSystem.getxattr, which is now
        unused.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.__init__): Removed xattr support, which is now unused.
        (MockFileSystem.open_text_file_for_reading): Changed to actually pass the file's data to
        ReadableTextFileObject. This function was completely broken before!
        (ReadableBinaryFileObject.__init__): Made the data parameter non-optional to try to prevent
        bugs like the above.
        (ReadableTextFileObject.__init__): Added. Wraps the data in a StringIO object so we can do
        things like readline() and seek().

        (ReadableTextFileObject.close):
        (ReadableTextFileObject.read):
        Added. We override the superclass implementation to account for using a StringIO object.

        (ReadableTextFileObject.readline):
        (ReadableTextFileObject.seek):
        Added. These just call through to StringIO.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_crash_log):
        (MainTest.test_web_process_crash_log):
        Changed to use make_mock_crash_report_darwin.

2011-12-06  Jon Lee  <jonlee@apple.com>

        [WK2] Add permissions support (73960)
        https://bugs.webkit.org/show_bug.cgi?id=73960
        <rdar://problem/10357008>

        Reviewed by Darin Adler.

        Add null function item to comply with added callback to WKPageUIClient.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):

2011-12-08  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Visualize mock points in the Qt MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=74074

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::updateVisualMockTouchPoints):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        (MiniBrowserApplication::sendTouchEvent):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        * MiniBrowser/qt/icons/touchpoint.png: Added.
        * MiniBrowser/qt/qml/MockTouchPoint.qml: Added.

2011-12-08  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] WebKitTestRunner crashes with debug builds
        https://bugs.webkit.org/show_bug.cgi?id=74090

        Reviewed by Tor Arne Vestbø.

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::platformInitialize): Call QQuickWebView::platformInitialize
        to ensure WTF/JSC threading is initialized.

2011-12-08  Dirk Pranke  <dpranke@chromium.org>

        fix build-webkit --chromium after breakage in r102201
        https://bugs.webkit.org/show_bug.cgi?id=74031

        Reviewed by Tony Chang.

        * Scripts/webkitdirs.pm:
        (buildChromium):

2011-12-08  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r102280.
        http://trac.webkit.org/changeset/102280
        https://bugs.webkit.org/show_bug.cgi?id=74031

        Chromium/Windows build is broken

        * Scripts/webkitdirs.pm:
        (buildChromium):

2011-12-08  Nayan Kumar K  <nayankk@motorola.com>

        Adding myself to committers list.

        Unreviewed.

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

2011-12-07  Michael Saboff  <msaboff@apple.com>

        StringBuilderTest.Append and StringBuilderTest.ToStringPreserveCapacity are failing.
        https://bugs.webkit.org/show_bug.cgi?id=73995

        Reenabled failing tests that the code part of the patch fixes.

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        (TestWebKitAPI::TEST):

2011-12-07  MORITA Hajime  <morrita@google.com>

        [filter-build-webkit] should not emit reset color when --no-color is given
        https://bugs.webkit.org/show_bug.cgi?id=73992

        Reviewed by Daniel Bates.

        Stop printing control sequences when --no-color is given.
        After this change, the filter runs nicely even on environments
        like Emacs compilation-mode which cannot understand the control sequence.

        * Scripts/filter-build-webkit:
        (printLine):

2011-12-07  Eric Seidel  <eric@webkit.org>

        Use free memory to determine if we have space for DRT instances instead of total memory
        https://bugs.webkit.org/show_bug.cgi?id=74021

        Reviewed by Adam Barth.

        This will hopefully make the Mac buildbots behave better.

        I also reduced the expected memory needed per DRT now that
        we're properly accounting for the system memory in our calculations.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.total_bytes_memory):
        (PlatformInfo._compute_free_bytes_from_vm_stat_output):
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.total_bytes_memory):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.default_child_processes):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_default_child_processes):

2011-12-07  Dirk Pranke  <dpranke@chromium.org>

        fix build-webkit --chromium after breakage in r102201
        https://bugs.webkit.org/show_bug.cgi?id=74031

        Reviewed by Tony Chang.

        r102201 introduced a change to the chromium build that splits
        the executables out of WebKit.gyp into other gyp files, and adds
        a new "All.gyp" that builds everything. However, I forgot to
        update the build script to use All.gyp.

        * Scripts/webkitdirs.pm:
        (buildChromium):

2011-12-07  Tom Zakrajsek  <tomz@codeaurora.org>

        Moved myself to the committers list.

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

2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix debug shlib build with V8.

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/qtwebkit.prf: Don't link jscore with
        v8 builds.

2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] V8 build fixes.

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/javascriptcore.prf: Don't add
        Source/Thirdparty to the include search path here.
        * qmake/mkspecs/features/webcore.prf: Instead it belongs here, because it's
        used when building WebCore as well as using it, because header files like
        GraphicsContext3D.h include stuff from ThirdParty.

2011-12-07  Peter Beverloo  <peter@chromium.org>

        [Chromium] Fix project file generation for the Android bot after r102201
        https://bugs.webkit.org/show_bug.cgi?id=73996

        The gyp refactoring in r102201 was didn't explicitly exclude
        the Android operating system in Tools/Tools.gyp, which broke
        as gcc_version is not defined for that configuration.

        Reviewed by Andreas Kling.

        * Tools.gyp:

2011-12-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed. Disabled failing tests on chromium.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        (TestWebKitAPI::TEST):

2011-12-06  Dirk Pranke  <dpranke@chromium.org>

        binaries in webkit.gyp should be split into a new file to break circular dependencies on webkit_support
        https://bugs.webkit.org/show_bug.cgi?id=73382

        Reviewed by Tony Chang.

        XCode (and hence GYP) can't handle circular dependencies between
        files (and projects). Accordingly, although the binaries in
        WebKit.gyp depend on webkit_support and webkit_support depends
        on webkit, we don't mention the latter dependency in the file.
        To fix this, this change moves the binaries like DRT into a new
        GYP file, and modifies gyp_webkit to build from that file
        instead of WebKit.gyp.

        * Tools.gyp: Added.

2011-12-06  Adam Roben  <aroben@apple.com>

        Add a pid parameter to CrashLogs.find_newest_log

        When a PID is passed, only crash logs corresponding to a crashed process with that PID are
        considered.

        Fixes <http://webkit.org/b/73942> webkitpy provides no way to specify the PID of the crashed
        process whose crash log you want to find

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs.find_newest_log): Added an optional pid parameter.
        (CrashLogs._find_newest_log_darwin): Added a pid parameter. When specified, we look at each
        candidate log's app_description extended attribute to see if that log corresponds to a
        crashed process with the specified PID.

        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (CrashLogsTest.test_find_newest_log_darwin): Added a few more mock crash logs with various
        contents and PIDs. Added tests that show that the pid parameter to find_newest_log is
        respected. Also fixed an erroneous use of assertTrue instead of assertEqual.

        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.getxattr): Added. On Darwin, calls through to the xattr module. On other
        systems, raises a KeyError, mimicking the behavior on Darwin when the given attribute isn't
        present.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.__init__): Added an optional xattrs parameter. Documented other parameters.
        (MockFileSystem.getxattr): Added. Just pulls the given attribute out of the xattrs
        dictionary.

        * Scripts/webkitpy/tool/commands/queries.py:
        (CrashLog): Added help text. Added an optional PID parameter.
        (CrashLog.execute): Pass the PID, if any, through to find_newest_log.

2011-12-06  Adam Roben  <aroben@apple.com>

        Wait for Crash Reporter to finish even when it lets the crashed process die quickly

        NRWT was only waiting for Crash Reporter in cases where it was keeping the crashed process
        alive beyond the normal timeout limit. In cases where the crashed process was able to die
        faster, NRWT would assume that Crash Reporter had finished even though it often was still
        running, which would lead to an incorrect crash log being picked up.

        Part of <http://webkit.org/b/71380> NRWT incorrectly associates crash logs with tests

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess._reset):
        (ServerProcess.write):
        (ServerProcess._check_for_crash): Changed to use new set_crashed function instead of setting
        .crashed directly. Added wait_for_crash_reporter parameter, which we pass along to
        set_crashed.

        (ServerProcess._handle_timeout): Fixed a logic error that would cause .crashed and
        .timed_out both to be set to True in cases where Crash Reporter took a long time to run. Now
        we bail out of handling the failure as a timeout if we find out that the process in fact
        crashed. We tell _check_for_crash not to wait for Crash Reporter because we've already done
        so.
        (ServerProcess.set_crashed): Added. When the process crashes, we wait for Crash Reporter to
        finish running (unless directed otherwise) so we can be sure the crash log has been saved to
        disk.

        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
        (TrivialMockPort.is_crash_reporter): Added.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver._check_for_driver_crash): Changed to use set_crashed. (This also fixed a typo
        that would have partially broken crash detection on Windows, if NRWT worked on Windows.)

2011-12-06  Adam Barth  <abarth@webkit.org>

        NRWT fails on unreleased versions of Mac OS X
        https://bugs.webkit.org/show_bug.cgi?id=72748

        Reviewed by Dirk Pranke.

        Hopefully this patch will make NRWT work on future versions on Mac OS X.
        Most of the infrastructure was already in place, but there were some
        asserts that failed.  I've tested this patch by haxoring the version
        detection logic to simulate an unknown version.  We might need to
        iterate based on feedback from folks with a real future version.

        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.__init__):
            - mac-future is an allowed port_name that's used internally by
              webkitpy to represent future versions of Mac OS X.
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_versions):
            - Test that we don't throw exceptions when dealing with future
              versions of Mac OS X.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._expectations_from_skipped_files):
            - Demote this logging message to "debug".  It's expected that
              mac-future doesn't have a Skipped file.
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.__init__):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort.__init__):
            - Re-order some code in these constructors so that
              self._operating_system is available to the ApplePort constructor.

2011-12-06  Tommy Widenflycht  <tommyw@google.com>

        Added myself as a committer.

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

2011-12-06  Peter Beverloo  <peter@chromium.org>

        Added myself as a committer.

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

2011-12-06  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] In webkitpy/bindings/main.py, replace subprocess.Popen() with Executive
        https://bugs.webkit.org/show_bug.cgi?id=73637

        Reviewed by Adam Barth.

        This patch replaces subprocess.Popen() with Executive, similar to other
        Python scripts in webkitpy/. I manually confirmed that run-bindings-tests
        works well for cases where no exception is raised, no exception is raised
        but diff is found, and ScriptError is raised.

        * Scripts/run-bindings-tests:
        (main):
        * Scripts/webkitpy/bindings/main.py: Replaces subprocess.Popen() with Executive.
        (BindingsTests.__init__):
        (BindingsTests.generate_from_idl):
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.detect_changes):

2011-12-05  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] MiniBrowser should default to touch behavior
        https://bugs.webkit.org/show_bug.cgi?id=73863

        Reviewed by Chang Shu.

        MiniBrowser currently defaults to the traditional desktop behaviour
        instead of touch behaviour which is prefered.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (printHelp):
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):
        (WindowOptions::setUseTraditionalDesktopBehavior):
        (WindowOptions::useTraditionalDesktopBehavior):

2011-12-05  Raphael Kubo da Costa  <kubo@profusion.mobi>

        webkit.py: Really fix the printing of StringImpl now that 8-bit strings are present.
        https://bugs.webkit.org/show_bug.cgi?id=73878

        Reviewed by Tony Chang.

        r98624 turned StringImpl::m_data into StringImpl::{m_data8,m_data16}.
        r98785 made webkit.py always use m_data16, which does not work when
        the string is an 8-bit string (such as KURL::string()).

        I was not able to directly call StringImpl::is8Bit() in the Python
        code, so I just reproduced the implementation there.

        * gdb/webkit.py:
        (WTFStringPrinter.is_8bit): Reproduced StringImpl::is8Bit().
        (WTFStringPrinter.to_string):
        (JSCUStringPrinter.is_8bit): Reproduced StringImpl::is8Bit().
        (JSCUStringPrinter.to_string):

2011-12-05  Eric Seidel  <eric@webkit.org>

        Up the "expected ram for each DRT instance" to 400MB instead of 300MB
        in hopes of making the Snow Leopard bot stop timing out.

        Unreviewed.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.default_child_processes):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_default_child_processes):

2011-12-05  Eric Seidel  <eric@webkit.org>

        NRWT creates too many workers on RAM-limited machines
        https://bugs.webkit.org/show_bug.cgi?id=73847

        Reviewed by Dirk Pranke.

        Make NRWT restrict its number of workers when there isn't enough
        RAM to support them.
        Also re-enable parallel testing on the Mac bots which were
        failing due to not enough ram.

        * Scripts/run-webkit-tests:
        (platformIsReadyForParallelTesting):
        * Scripts/webkitpy/common/host.py:
        (Host.__init__):
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.cpu_count):
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__):
        (PlatformInfo.display_name):
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.display_name):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.default_child_processes):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_default_child_processes):
        (PortTest.test_pretty_patch_os_error):

2011-12-05  Hugo Parente Lima  <hugo.lima@openbossa.org>

        Last mouse event could be lost if a JS call to eventSender.leapForward is made
        https://bugs.webkit.org/show_bug.cgi?id=73366

        Reviewed by Kenneth Rohde Christiansen.

        Empty the entire event queue when requested besides using
        sendEvent instead of postEvent to make sure all events were
        delivered.

        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::sendOrQueueEvent):
        (WTR::EventSenderProxy::replaySavedEvents):

2011-12-05  Adam Barth  <abarth@webkit.org>

        [Chromium] Remove no-longer-used forwarding headers in the WebKit API
        https://bugs.webkit.org/show_bug.cgi?id=73845

        Reviewed by Darin Fisher.

        Update includes to point to the new header locations.

        * DumpRenderTree/chromium/AccessibilityController.cpp:
        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        * DumpRenderTree/chromium/CppBoundClass.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/DRTDevToolsClient.h:
        * DumpRenderTree/chromium/EventSender.cpp:
        * DumpRenderTree/chromium/EventSender.h:
        * DumpRenderTree/chromium/GamepadController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        * DumpRenderTree/chromium/PlainTextController.cpp:
        * DumpRenderTree/chromium/Task.cpp:
        * DumpRenderTree/chromium/TestNavigationController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        * DumpRenderTree/chromium/TestWebPlugin.h:
        * DumpRenderTree/chromium/TextInputController.cpp:
        * DumpRenderTree/chromium/WebPermissions.cpp:
        * DumpRenderTree/chromium/WebPreferences.h:
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.h:
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm:
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp:
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:

2011-12-05  Ryosuke Niwa  <rniwa@webkit.org>

        Add Aharon Lanin to the contributors list.

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

2011-12-05  Jarred Nicholls  <jarred@sencha.com>

        Moving myself from contributors to committers.

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

2011-12-05  Raphael Kubo da Costa  <kubo@profusion.mobi>

        Add myself as a committer.

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

2011-12-05  Michael Brüning  <michael.bruning@nokia.com>

        [Qt] Rename QQuickWebView::canStop property to just loading 
        https://bugs.webkit.org/show_bug.cgi?id=73813

        Reviewed by Kenneth Rohde Christiansen.

        Replaced references to WebView.canStop with WebView.loading.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2011-12-05  Dirk Pranke  <dpranke@chromium.org>

        run-webkit-tests: limit --child-processes properly on apple mac
        https://bugs.webkit.org/show_bug.cgi?id=73856

        Reviewed by Adam Roben.

        Fix typos in r102013 so that we correctly pass --child-processes=1 on
        the apple mac bots temporarily.

        * Scripts/run-webkit-tests:
        (platformIsReadyForParallelTesting):

2011-12-05  Ryosuke Niwa  <rniwa@webkit.org>

        Temporarily set --child-process=1 on Mac because 20+ tests are timing out
        https://bugs.webkit.org/show_bug.cgi?id=73840

        Reviewed by Simon Fraser.

        Temporarily go back to single process mode on Mac.

        * Scripts/run-webkit-tests:
        (platformIsReadyForParallelTesting):

2011-12-05  Adam Roben  <aroben@apple.com>

        Redeploy apple-macpro-7 and apple-xserve-1

        These slaves have been sitting idle since we removed our Leopard builders in r97496.

        Fixes <http://webkit.org/b/73829> REGRESSION (r97496): apple-macpro-7 and apple-xserve-1 are
        sitting idle

        Reviewed by Sam Weinig.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Re-added apple-macpro-7 and
        apple-xserve-1. The former is now doing "SnowLeopard Intel Debug (WebKit2 Tests)", which
        allows apple-xserve-9 to be a build-only slave, and the latter is doing "Lion Intel Debug
        (WebKit2 Tests)".

2011-12-05  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Make the UI of the MiniBrowser slightly nicer

        Rubberstamped by Simon Hausmann.

        - Add proper padding
        - Show feedback when pressing on the toolbar icons
        - Make the text entry better looking

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2011-12-05  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        NRWT should handle duplicated expectations
        https://bugs.webkit.org/show_bug.cgi?id=69750

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__):
        (TestExpectations._report_errors):
        (TestExpectations._add_expectations):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_add_skipped_tests):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.skipped_tests):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort.test_expectations):
        (WebKitPort.skipped_tests):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (test_test_expectations):

2011-12-04  Eric Seidel  <eric@webkit.org>

        After success with Mac, Win and Gtk, turning on parallel testing
        by default for all platforms (except Qt).

        We'll add more platforms to the blacklist if we see problems.

        Unreviewed.

        * Scripts/run-webkit-tests:
        (platformIsReadyForParallelTesting):

2011-12-04  Sam Weinig  <sam@webkit.org>

        Add tests for RetainPtr::adoptNS/adoptCF
        https://bugs.webkit.org/show_bug.cgi?id=73470

        Reviewed by Adam Roben and Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/cf/RetainPtr.cpp: Added.
        (TestWebKitAPI::TEST):
        Test that adopting using adoptCF creates a RetainPtr with a
        value whose retain count is 1.

        * TestWebKitAPI/Tests/WTF/ns: Added.
        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm: Added.
        (TestWebKitAPI::TEST):
        Test that adopting using adoptNS creates a RetainPtr with a
        value whose retain count is 1.

2011-12-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Include cairo, pixman and gnome-icon-theme in the jhbuild modules
        https://bugs.webkit.org/show_bug.cgi?id=73748

        Reviewed by Gustavo Noronha Silva.

        * gtk/jhbuild.modules: Add some new modules the jhbuild moduleset.

2011-12-04  Philippe Normand  <pnormand@igalia.com>

        Another GTK build fix after r101922.

        Rubber-stamped by Martin Robinson.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pathToLocalResource): Plug possible String ref leak.

2011-12-04  Xan Lopez  <xlopez@igalia.com>

        Fix compiler warning in LayoutTestController

        Reviewed by Philippe Normand.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): fix warning.

2011-12-04  Alexandre Mazari  <scaroo@gmail.com>

        Add missing methods used by fast/notifications tests to LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=63616

        Reviewed by Martin Robinson.

        Add missing simulateDesktopNotificationClick method used by
        fast/notifications. Provide a default implementation for
        areDesktopNotificationPermissionRequestsIgnored and
        ignoreDesktopNotificationPermissionRequests.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): call into the port implementation.
        (simulateDesktopNotificationClickCallback): ditto.
        (ignoreDesktopNotificationPermissionRequestsCallback): default implementation.
        (LayoutTestController::staticFunctions): declare new methods.
        (LayoutTestController::ignoreDesktopNotificationPermissionRequests): default implementation.
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::areDesktopNotificationPermissionRequestsIgnored):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::simulateDesktopNotificationClick): dummy implementation.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::simulateDesktopNotificationClick): ditto.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::simulateDesktopNotificationClick): ditto.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::simulateDesktopNotificationClick): ditto.
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::simulateDesktopNotificationClick): ditto.

2011-12-03  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Don't log document events in DRT
        https://bugs.webkit.org/show_bug.cgi?id=73746

        Reviewed by Martin Robinson.

        Stop connecting globally to document-related events.

        * DumpRenderTree/gtk/AccessibilityCallbacks.cpp:
        (connectAccessibilityCallbacks): Removed connections.
        (disconnectAccessibilityCallbacks): Removed disconnections.

2011-12-03  Dan Bernstein  <mitz@apple.com>

        Added a test for <rdar://problem/10523721> Crash at WebCore::SubresourceLoader::releaseResources

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/SubresourceErrorCrash.mm: Added.
        (TestWebKitAPI::TEST):

2011-12-03  Philippe Normand  <pnormand@igalia.com>

        Another GTK build fix after r101922.

        Rubber-stamped by Martin James Robinson.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pathToLocalResource): return value needs to
        be a URI.

2011-12-03  Martin Robinson  <mrobinson@igalia.com>

        Small fix for my previous patch. Do not try to delete a member
        of a dictionary that does not exist.

        Reviewed by Gustavo Noronha Silva.

        * gtk/run-with-jhbuild:
        (install_and_run_jhbuild):

2011-12-03  Martin Robinson  <mrobinson@igalia.com>

        Fix jhbuild installation for people who have unusual MAKE environment
        variables such as 'make -j4' as the jhbuild build does not handle it.

        Reviewed by Gustavo Noronha Silva.

        * gtk/run-with-jhbuild:
        (install_and_run_jhbuild): Remove any MAKE environment variable before building jhbuild.

2011-12-03  Martin Robinson  <mrobinson@igalia.com>

        Fix the update-webkitgtk-libs script to properly trigger a jhbuild installation
        when run for the first time.

        Reviewed by Gustavo Noronha Silva.

        * Scripts/update-webkitgtk-libs: Fix first run.

2011-12-03  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after r101922.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pathToLocalResource): Added sentinel in
        g_build_filename call.

2011-12-03  Philippe Normand  <pnormand@igalia.com>

        GTK API tests build fix. Run the tests inside jhbuild.

        Rubber-stamped by Gustavo Noronha Silva.

        * Scripts/run-gtk-tests:
        (TestRunner.__init__):
        (TestRunner.run._error_handler):
        (TestRunner):
        (TestRunner.run):

2011-12-03  Martin Robinson  <mrobinson@igalia.com>

        Small build fix. Properly specify the path to the locally installed jhbuild.

        * Scripts/update-webkitgtk-libs: Fix jhbuild path.

2011-12-03  Martin Robinson  <mrobinson@igalia.com>

        [GTK][DRT] Normalize file:///tmp/LayoutTests in LayoutTestController::pathToLocalResource()
        https://bugs.webkit.org/show_bug.cgi?id=67256

        Reviewed by Philippe Normand.

        Implement LayoutTestController::pathToLocalResource for GTK+. Instead of passing 
        WEBKIT_TEST_FONTS to the GTK+ test harnesses, pass a more generic WEBKIT_TOP_LEVEL,
        which points to the more generic top-level path of the WebKit checkout. This code is
        duplicated between WK1 and WK2 harnesses because we do not currently have a way to
        share code here.

        If WEBKIT_TOP_LEVEL is not provided, we search for the top level based on the binary
        location. This will cause the fallback to fail if you build into a non-typical location
        or even fake it with a symlink. In this case it's important to use the environment variable.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (getTopLevelPath): Added.
        (initializeFonts): Use the new helper to get the font path.
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h: Expose the new helper.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pathToLocalResource):Use the new helper to normalize
        test paths.
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.setup_environ_for_server):Pass the top-level path of the
        checkout instead of passing the font path.
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::getTopLevelPath): Added this helper.
        (WTR::inititializeFontConfigSetting): Use the helper to find the font path.

2011-12-02  David Levin  <levin@chromium.org>

        Rename WTF class from TemporarilyChange to TemporaryChange.
        https://bugs.webkit.org/show_bug.cgi?id=73479

        Reviewed by Eric Seidel.

        * DumpRenderTree/ForwardingHeaders/wtf/TemporarilyChange.h: Removed.
        * DumpRenderTree/ForwardingHeaders/wtf/TemporaryChange.h: Added.
        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/TemporaryChange.cpp: Renamed from Tools/TestWebKitAPI/Tests/WTF/TemporarilyChange.cpp.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2011-12-02  Tony Chang  <tony@chromium.org>

        [NRWT] reftest asserts intermittently on the Qt-WK2 bot
        https://bugs.webkit.org/show_bug.cgi?id=73453

        Reviewed by Ryosuke Niwa.

        We used to assert if a ref test didn't generate pixel results. Instead, just claim it is a failing test.
        The verbose output will include the failure reason.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py: Don't assert, return FailureReftestNoImagesGenerated instead.
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer_unittest.py: Remove stray letter t.
        * Scripts/webkitpy/layout_tests/models/test_failures.py: Add a new failure type: FailureReftestNoImagesGenerated
        (determine_result_type):
        (FailureReftestNoImagesGenerated.__init__):
        (FailureReftestNoImagesGenerated):
        (FailureReftestNoImagesGenerated.message):
        * Scripts/webkitpy/layout_tests/port/test.py: Add a test case for integration tests.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py: Update test counts.
        (MainTest.test_run_singly_actually_runs_tests):
        (MainTest.test_unexpected_failures):
        (EndToEndTest.test_end_to_end):

2011-12-02  Ryosuke Niwa  <rniwa@webkit.org>

        ChangeLog should be able to parse annotated changelogs
        https://bugs.webkit.org/show_bug.cgi?id=72703

        Reviewed by Eric Seidel.

        Make parse_entries_from_file aware of svn blame annotation such as "100000 ossy@webkit.org ",
        and extract the revision number for each entry.

        Also add a support to extract "svn blame" result from svn/git checkout to scm classes.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:

2011-12-02  Eric Seidel  <eric@webkit.org>

        Enable parallel testing for Win and Gtk bots
        after confirming with Lucas and Martin the bots should be OK.

        Unreviewed. (I ran the idea by Lucas and Martin.)

        * Scripts/run-webkit-tests:
        (platformIsReadyForParallelTesting):

2011-12-02  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the GTK+ build.

        * gtk/jhbuild.modules: Properly specify the glib-networking
        dependency for soup.

2011-12-02  Martin Robinson  <mrobinson@igalia.com>

        Fix a syntax error in the committers.py file.

        * Scripts/webkitpy/common/config/committers.py: Add a missing comma.

2011-12-02  Ryosuke Niwa  <rniwa@webkit.org>

        Add Alan Stearns and Peter Linss to the contributors list.

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

2011-12-02  Kent Tamura  <tkent@chromium.org>

        [Chromium] Fix compilation warnings for ASSERT()
        https://bugs.webkit.org/show_bug.cgi?id=73623

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/ImageDiff.cpp:
         - Fix fprintf format: %s -> %d for __LINE__
         - Do nothing for ASSERT() if NDEBUG.

2011-12-02  Eric Seidel  <eric@webkit.org>

        Enable parallel testing for all Mac bots.

        Unreviewed.

        * Scripts/run-webkit-tests:
        (platformIsReadyForParallelTesting):

2011-12-02  Eric Seidel  <eric@webkit.org>

        Enable parallel testing for run-webkit-tests on Mac Lion.
        I plan to move all the machines to parallel testing shortly
        but we're starting with Lion.

        Unreviewed.

        * Scripts/run-webkit-tests:
        (platformIsReadyForParallelTesting):

2011-12-02  Kausalya Madhusudhanan  <kmadhusu@chromium.org>

        Added helper method to identify whether the page has custom page size style.
        https://bugs.webkit.org/show_bug.cgi?id=73585

        Reviewed by Darin Fisher.

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

2011-12-01  Ryosuke Niwa  <rniwa@webkit.org>

        [NRWT] reftest should support having multiple references per test
        https://bugs.webkit.org/show_bug.cgi?id=73613

        Reviewed by Dirk Pranke.

        Add a support for having multiple reference files for a single test.

        Because a reftest succeeds when it matches at least one of expected matches and fails when it matches
        at least one of expected mismatches, we compare expected mismatches first in order to minimize
        the number of reference files to open on DRT.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (interpret_test_failures): Remove checks no longer applicable.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ResultSummaryTest.test_interpret_test_failures): Ditto.
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__): Remove a bunch of code and just call port.reference_files.
        (SingleTestRunner._driver_input):
        (SingleTestRunner.run):
        (SingleTestRunner._run_reftest): Compare the output of the test to each reference file.
        * Scripts/webkitpy/layout_tests/models/test_input.py:
        (TestInput.__init__): Remove ref_file and is_mismatch_reftest because they are no longer used.
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.reference_files): Renamed from _reference_file_for. Returns a list of expectation, filename pairs.
        (_parse_reftest_list): Now supports parsing multiple entries for a single test.
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_parse_reftest_list):
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_unexpected_failures):
        (MainTest.test_reftest_skipped_if_unlisted): Renamed from test_missing_and_unexpected_results.
        (EndToEndTest.test_end_to_end):
        (EndToEndTest.test_reftest_with_two_notrefs): Added.

2011-12-02  Gustavo Noronha Silva  <gns@gnome.org>

        Build libsoup without gnome dependencies (like keyring).

        * gtk/jhbuild.modules:

2011-12-02  Gustavo Noronha Silva  <gns@gnome.org>

        Also build gcrypt and p11-kit, and make them dependencies of
        gnutls.

        * gtk/jhbuild.modules:

2011-12-02  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fixes for Windows build.

        * waf/build/wxpresets.py:

2011-12-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch post, post-commits, upload should warn when posting to a closed bug, and offer to reopen it
        https://bugs.webkit.org/show_bug.cgi?id=32006

        I decided not to make it warn, and just have it re-open the bug.
        That's not that different from today's behavior which will
        just silently attach the patch.

        This patch makes behavior between upload and land-safely consistent
        (previously one would assign patches and the other would not)
        as well as adds the ability for both to ensure that the bug is open.

        To test this I had to add a few more methods to MockBugzilla which
        (positively) affected a few other test results.

        I also made AbstractStep keep a cached copy of the Bug object
        and used the cached copy where appropriate (including for 'bug_title').
        This should reduce the number of bug fetches we perform.

        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/closebug.py:
        * Scripts/webkitpy/tool/steps/ensurebugisopenandassigned.py: Added.
        * Scripts/webkitpy/tool/steps/postdiff.py:
        * Scripts/webkitpy/tool/steps/postdiffforcommit.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:

2011-12-02  Gustavo Noronha Silva  <gns@gnome.org>

        Also pass --no-interact to jhbuild when updating dependencies.

        * Scripts/update-webkitgtk-libs:

2011-12-02  Alice Boxhall  <aboxhall@chromium.org>

        Make _build_path check more thoroughly that build paths exist.
        https://bugs.webkit.org/show_bug.cgi?id=73601

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort._build_path):

2011-12-02  Gustavo Noronha Silva  <gns@gnome.org>

        Add libffi to the jhbuild modules list as a glib dependency.

        Rubber-stamped by Martin Robinson.

        * gtk/jhbuild.modules:

2011-12-02  Gustavo Noronha Silva  <gns@gnome.org>

        Build fix. Use internal pcre on glib, make gnutls a dependency of
        glib-networking, unset AR_FLAGS for jhbuild builds, and run jhbuild
        in non-interactive mode.

        * Scripts/update-webkitgtk-libs:
        * gtk/jhbuild.modules:
        * gtk/run-with-jhbuild:

2011-12-02  Adam Roben  <aroben@apple.com>

        Fix for Python 2.6

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunUnitTests.countFailures): Removed the flags parameter to re.split, which was only added
        in Python 2.7, and used whitespace instead of start-of-string/end-of-string markers when
        searching for "Tests that timed out:" etc. This makes our check less strict, but it
        shouldn't matter given the kinds of content we parse.

2011-12-02  Adam Roben  <aroben@apple.com>

        Fix names of failed/timed out tests in run-api-tests output

        Fixes <http://webkit.org/b/73663> run-api-tests prints suite names twice for failed or timed
        out tests

        We were ending up with the suite name doubled (e.g., "WebKit2.WebKit2.MouseMoveAfterCrash").

        Reviewed by Simon Fraser.

        * Scripts/run-api-tests:
        (runTest): Don't prepend the suite name to $test. It's already been prepended at the start
        of this function.

2011-11-29  Martin Robinson  <mrobinson@igalia.com>

        [GTK] generate-gtkdoc should respect build type
        https://bugs.webkit.org/show_bug.cgi?id=73296

        Reviewed by Philippe Normand.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject): Pass the --debug to the generate-gtkdoc script.
        * gtk/common.py: If --build is passed give preference to the Debug build directory.

2011-12-02  Tony Chang  <tony@chromium.org>

        [nrwt] fix wdiff output
        https://bugs.webkit.org/show_bug.cgi?id=73604

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.wdiff_text):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_wdiff_text):

2011-12-02  Adam Roben  <aroben@apple.com>

        Teach build.webkit.org to display how many unit tests failed or timed out

        Fixes <http://webkit.org/b/73659> It's hard to tell how many unit tests are failing on
        build.webkit.org

        We now display something like "5 unit tests failed or timed out". Eventually we might want
        to split out how many failure vs. timeouts there were.

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (TestWithFailureCount): Moved this class up to the top of the file so it is before any other
        classes that may want to subclass it.
        (RunUnitTests): Changed to inherit from TestWithFailureCount.
        (RunUnitTests.countFailures): Added. Counts the number of tests following the "Tests that
        timed out:" and "Tests that failed:" lines, if present.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (StubStdio):
        (StubRemoteCommand):
        Added these two stub classes to mimic buildbot's RemoteCommand and log classes.

        (RunUnitTestsTest.assertFailures): Helper method to check that we interpreted the results of
        the test run correctly.

        (RunUnitTestsTest.test_no_failures_or_timeouts):
        (RunUnitTestsTest.test_one_failure):
        (RunUnitTestsTest.test_multiple_failures):
        (RunUnitTestsTest.test_one_timeout):
        (RunUnitTestsTest.test_multiple_timeouts):
        (RunUnitTestsTest.test_multiple_failures_and_timeouts):
        Test various cases.

2011-12-02  Adam Roben  <aroben@apple.com>

        Teach prepare-ChangeLog to treat master.cfg as a Python file

        Fixes <http://webkit.org/b/73658> prepare-ChangeLog doesn't show modified classes/functions
        in buildbot's master.cfg

        Reviewed by Darin Adler.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges): Use get_function_line_ranges_for_python if the filename is
        master.cfg.

2011-12-02  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Create a wrapper script that knows how to install jhbuild and run commands with it
        https://bugs.webkit.org/show_bug.cgi?id=73669

        Reviewed by Gustavo Noronha Silva.

        Add a wrapper script that knows how to install jhbuild and also to wrap commands
        in the jhbuild shell.

        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProject): Use the new wrapper script.
        (mustReRunAutogen): Ditto.
        (buildAutotoolsProject): Ditto.
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkDriver.cmd_line): Ditto.
        * gtk/run-with-jhbuild: Added.

2011-12-01  Adam Roben  <aroben@apple.com>

        Teach check-webkit-style how to check the syntax of JSON files

        Fixes <http://webkit.org/b/73590> check-webkit-style doesn't flag JSON syntax errors

        I previously landed this patch as r101711, but the new tests failed on Snow Leopard. This
        patch is identical to that one except for two change: assertIn(a, b) (which is new to Python
        2.7) has been replaced with assertTrue(a in b), and the test_missing_closing_brace test has
        been removed, since its output differs by platform.

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checker.py:
        (_all_categories): Added JSONChecker's categories to the set of all categories.
        (FileType): Added a JSON type. Incremented other types.
        (CheckerDispatcher._file_type): Use the JSON file type for .json files.
        (CheckerDispatcher._create_checker): Use a JSONChecker for JSON files.

        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherDispatchTest.assert_checker_json): Added this helper method.
        (CheckerDispatcherDispatchTest.test_json_paths): Added. Based on test_python_paths.

        * Scripts/webkitpy/style/checkers/jsonchecker.py: Added. (I didn't name this just "json",
        which would have matched our other checkers, because I couldn't figure out how to call
        "json.loads" without hitting namespace conflicts.)
        (JSONChecker.__init__): Turn of line filtering so that we always check the whole file, not
        just the modified lines from a patch.
        (JSONChecker.check): Try to parse the lines as JSON. Mark an error if there was an
        exception.
        (JSONChecker.line_number_from_json_exception): Parse the json modules exception message to
        try to extract a line number.

        * Scripts/webkitpy/style/checkers/jsonchecker_unittest.py: Added.
        (MockErrorHandler.__init__):
        (MockErrorHandler.turn_off_line_filtering):
        (MockErrorHandler.__call__):
        Helper class. Copied from xml_unittest.py.

        (JSONCheckerTest.test_line_number_from_json_exception): Test the
        line_number_from_json_exception helper method.

        (JSONCheckerTest.assert_no_error):
        (JSONCheckerTest.assert_error):
        Helper methods to assert that we did or didn't get an error.

        (JSONCheckerTest.mock_handle_style_error): Helper method.

        (JSONCheckerTest.test_conflict_marker):
        (JSONCheckerTest.test_single_quote):
        (JSONCheckerTest.test_init):
        (JSONCheckerTest.test_no_error):
        Test various cases.

2011-12-02  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Add glib, glib-networking, gnutls and libsoup to jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=73664

        Reviewed by Martin Robinson.

        This patch adds our HTTP library and its main dependencies; this
        should not affect layout or rendering.

        * gtk/jhbuild.modules:

2011-12-02  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Also run DumpRenderTree under jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=73646

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkDriver.cmd_line):

2011-12-02  Hajime Morrita  <morrita@chromium.org>

        Unreviewed, rolling out r101751 and r101775.
        http://trac.webkit.org/changeset/101751
        http://trac.webkit.org/changeset/101775
        https://bugs.webkit.org/show_bug.cgi?id=73191

        breaks Windows build

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

2011-12-02  Kentaro Hara  <haraken@chromium.org>

        Move run-bindings-tests implementation to webkitpy/bindings/main.py
        https://bugs.webkit.org/show_bug.cgi?id=73619

        Reviewed by Adam Barth.

        As run-bindings-tests has been growing, this patch just moves its implementation
        to webkitpy/bindings/main.py to integrate with the rest of webkitpy.

        No change in behavior.

        * Scripts/run-bindings-tests:
        (main):
        * Scripts/webkitpy/bindings/__init__.py: Added.
        * Scripts/webkitpy/bindings/main.py: Added.
        (BindingsTests.__init__):
        (BindingsTests.generate_from_idl):
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.detect_changes):
        (BindingsTests.run_tests):

2011-12-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Tools/Scripts: eliminate find_test_files from Port class.
        https://bugs.webkit.org/show_bug.cgi?id=73553

        rebaseline.py and chromium_gpu.py use Port.find_test_files() the same way as it is used in Port.tests()
        I'd like to replace all calls to find_test_files with tests and eliminate find_tests_files.
        Also I'll move _is_test_file() and related functions close to Port.tests().

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.tests):
        (Port.is_reference_html_file):
        (Port._has_supported_extension):
        (Port._is_test_file):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_find_no_paths_specified):
        (PortTest.test_find_one_test):
        (PortTest.test_find_glob):
        (PortTest.test_find_with_skipped_directories):
        (PortTest.test_find_with_skipped_directories_2):
        (PortTest.test_is_test_file):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        (_default_tests_paths):
        (ChromiumGpuLinuxPort.tests):
        (ChromiumGpuCgMacPort.tests):
        (ChromiumGpuMacPort.tests):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        (ChromiumGpuTest.test_default_tests_paths.test_paths):
        (ChromiumGpuTest.test_default_tests_paths):
        (ChromiumGpuTest.test_test_files.test_paths):
        (ChromiumGpuTest):
        (ChromiumGpuTest.test_test_files):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (get_tests_run.RecordingTestDriver.run_test):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (OptimizeBaselines._optimize_baseline):
        (OptimizeBaselines.execute):
        (AnalyzeBaselines._analyze_baseline):
        (AnalyzeBaselines.execute):

2011-12-01  Hajime Morrita  <morrita@chromium.org>

        JS_INLINE and WTF_INLINE should be visible from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=73191

        Reviewed by Kevin Ollivier.

        Removed macro definitions which is now provided by Platform.h

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

2011-12-01  Hayato Ito  <hayato@chromium.org>

        Explicitly pass tolerance=0 to port.diff_image in case of RefTestMismatch failure.
        https://bugs.webkit.org/show_bug.cgi?id=73406

        Reviewed by Ryosuke Niwa.

        WebKitPort's image_diff uses tolerance='0.1' in default.
        When reftests fail, we should use tolerace=0 when diff-ing images.

        Since ImageDiff on chromium port doesn't use tolerance value as of now,
        this change doesn't affect chromium port's behavior.

        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.diff_image):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.diff_image):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.diff_image):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort.diff_image):
        (WebKitPort._start_image_diff_process):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_tolerance.ImageDiffTestPort.diff_image):

2011-12-01  Adam Klein  <adamk@chromium.org>

        Add Chromium ToT GTest build bots (and group selection support) to flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=73599

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/dashboard_base.js:
        ():
        (htmlForTestTypeSwitcher):
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (testHtmlForTestTypeSwitcherGroup):

2011-12-01  Ryosuke Niwa  <rniwa@webkit.org>

        Parse reftest.list and extract types of ref tests
        https://bugs.webkit.org/show_bug.cgi?id=66837

        Reviewed by Dirk Pranke.

        Add support for reftest.list to base port.

        * Scripts/webkitpy/common/find_files.py:
        (find):
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__): Initialize self._reftest_list. It's a dictionary mapping from a test directory
        to a dictionary of {test path: ("==" or "!=", reference file path)}
        (Port._get_reftest_list): Added; calls test_file.parse_reftest_list to fill self._reftest_list.
        (Port._reference_file_for): Added; obtains the reference file name given a test name.
        (Port.is_reftest): Added; Calls _reference_file_for.
        (Port.reftest_expected_filename): Calls _reference_file_for.
        (Port.reftest_expected_mismatch_filename): Ditto.
        (Port.find_test_files):
        (is_reference_html_file): Treat any file that starts with ref- or notref- or ends with
        -expected, -expected-mismach, -ref, or -notref as a reference file.
        (_is_test_file):
        (_parse_reftest_list): Added.
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_is_test_file):
        (PortTest.test_parse_reftest_list):
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        (DryrunDriver.run_test):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (unit_test_filesystem.add_test_file):
        (unit_test_filesystem.add_file):
        (unit_test_filesystem):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (get_tests_run.RecordingTestDriver.run_test):
        (MainTest.test_unexpected_failures):
        (MainTest.test_missing_and_unexpected_results):
        (EndToEndTest.test_end_to_end):
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        (Rebaseliner._compile_rebaselining_tests):

2011-12-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r101711.
        http://trac.webkit.org/changeset/101711
        https://bugs.webkit.org/show_bug.cgi?id=73605

        Broke 3 webkitpy tests (Requested by rniwa on #webkit).

        * Scripts/webkitpy/style/checker.py:
        (_all_categories):
        (FileType):
        (CheckerDispatcher._file_type):
        (CheckerDispatcher._create_checker):
        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherDispatchTest.assert_checker_cpp):
        (CheckerDispatcherDispatchTest.test_cpp_paths):
        * Scripts/webkitpy/style/checkers/jsonchecker.py: Removed.
        * Scripts/webkitpy/style/checkers/jsonchecker_unittest.py: Removed.

2011-12-01  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed. Add myself to GStreamer and WebKit2GTK+ watchlists.

        * Scripts/webkitpy/common/config/watchlist:

2011-12-01  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Read fonts from the jhbuild root
        https://bugs.webkit.org/show_bug.cgi?id=73487

        Reviewed by Gustavo Noronha Silva.

        Read fonts from the jhbuild root instead of from the system. This will ensure
        that all testers use the same fonts instead of leaving this up to luck.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Load fonts from jhbuild root.
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.setup_environ_for_server): Pass an environment variable containing
        the path to the jhbuild root.
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::inititializeFontConfigSetting): Load fonts from the jhbuild root.

2011-12-01  Adam Roben  <aroben@apple.com>

        Teach check-webkit-style how to check the syntax of JSON files

        Fixes <http://webkit.org/b/73590> check-webkit-style doesn't flag JSON syntax errors

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checker.py:
        (_all_categories): Added JSONChecker's categories to the set of all categories.
        (FileType): Added a JSON type. Incremented other types.
        (CheckerDispatcher._file_type): Use the JSON file type for .json files.
        (CheckerDispatcher._create_checker): Use a JSONChecker for JSON files.

        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherDispatchTest.assert_checker_json): Added this helper method.
        (CheckerDispatcherDispatchTest.test_json_paths): Added. Based on test_python_paths.

        * Scripts/webkitpy/style/checkers/jsonchecker.py: Added. (I didn't name this just "json",
        which would have matched our other checkers, because I couldn't figure out how to call
        "json.loads" without hitting namespace conflicts.)
        (JSONChecker.__init__): Turn of line filtering so that we always check the whole file, not
        just the modified lines from a patch.
        (JSONChecker.check): Try to parse the lines as JSON. Mark an error if there was an
        exception.
        (JSONChecker.line_number_from_json_exception): Parse the json modules exception message to
        try to extract a line number.

        * Scripts/webkitpy/style/checkers/jsonchecker_unittest.py: Added.
        (MockErrorHandler.__init__):
        (MockErrorHandler.turn_off_line_filtering):
        (MockErrorHandler.__call__):
        Helper class. Copied from xml_unittest.py.

        (JSONCheckerTest.test_line_number_from_json_exception): Test the
        line_number_from_json_exception helper method.

        (JSONCheckerTest.assert_no_error):
        (JSONCheckerTest.assert_error):
        Helper methods to assert that we did or didn't get an error.

        (JSONCheckerTest.mock_handle_style_error): Helper method.

        (JSONCheckerTest.test_conflict_marker):
        (JSONCheckerTest.test_single_quote):
        (JSONCheckerTest.test_init):
        (JSONCheckerTest.test_missing_closing_brace):
        (JSONCheckerTest.test_no_error):
        Test various cases.

2011-12-01  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add a helper function to find the current executable's path
        https://bugs.webkit.org/show_bug.cgi?id=73473

        Reviewed by Gustavo Noronha Silva.

        Update MiniBrowser to not pass the binary directory as an environment variable.
        This means that you can move the binaries around without it breaking.

        * MiniBrowser/gtk/main.c:
        (main): No longer set the environment variable.
        * WebKitTestRunner/GNUmakefile.am: No longer add the directory path define.
        * WebKitTestRunner/gtk/main.cpp:  Ditto.

2011-12-01  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed. Fix bad file =(.

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

2011-12-01  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Add freetype to our jhbuild setup
        https://bugs.webkit.org/show_bug.cgi?id=73488

        Reviewed by Martin Robinson.

        This adds the first library to our jhbuild setup, and makes sure
        build-webkit calls autogen.sh and make with jhbuild, so that the
        environment is properly set.

        * Scripts/webkitdirs.pm:
        (saveSum):
        (hashFile):
        (runAutogenForAutotoolsProject): save md5sum of jhbuild-related files, and
        call autogen under jhbuild run;
        (mustRunAutogen): generalized the arguments change checking to also force
        running autogen when jhbuild files change;
        (buildAutotoolsProject): run make under jhbuild;
        * gtk/jhbuild.modules: add freetype.

2011-12-01  Dominic Mazzoni  <dmazzoni@google.com>

        Fix WebKitTestRunner compile warnings with XCode 3.2
        https://bugs.webkit.org/show_bug.cgi?id=73378

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.cpp:
        (WTR::AccessibilityTextMarker::AccessibilityTextMarker):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.cpp:
        (WTR::AccessibilityTextMarkerRange::AccessibilityTextMarkerRange):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::verticalScrollbar):

2011-12-01  Adam Roben  <aroben@apple.com>

        Allow committers to use their Trac credentials to force builds on the buildbots

        Fixes <http://webkit.org/b/73353>

        A new class, CommitterAuth, handles authentication of WebKit committers. CommitterAuth uses
        three files to do its job: a config file that contains a list of WebKit committer usernames,
        an htdigest file that contains Trac credentials, and JSON file that gives the paths for
        those two files.

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/committer_auth.py: Added.
        (Error): Basic wrapper around Exception that we use for cases where we couldn't even check
        whether credentials were valid or not.
        (CommitterAuth.__init__): Just store the path to auth.json.
        (CommitterAuth.auth_json): Load, parse, and return auth.json.
        (CommitterAuth.auth_json_filename): Return the path to auth.json.
        (CommitterAuth.authenticate): Return true if the user is a WebKit committer and their
        credentials are valid Trac credentials. Return false otherwise or if an error occurred while
        checking those conditions.
        (CommitterAuth.is_webkit_committer): Return true if the user is a WebKit committer. Return
        false otherwise or if an exception was thrown.
        (CommitterAuth.is_webkit_trac_user): Return true if the username/password are present in the
        Trac credentials htdigest file. Return false otherwise or if an exception was thrown.

        (CommitterAuth.open_auth_json_file):
        (CommitterAuth.open_trac_credentials_file):
        (CommitterAuth.open_webkit_committers_file):
        Open the specified file. These are mostly useful for testing purposes.

        (CommitterAuth.trac_credentials_filename):
        (CommitterAuth.webkit_committers_filename):
        Return the path to the specified file by retrieving it from auth.json.

        (CommitterAuth.webkit_committers): Load and parse the committers file and extract the list
        of WebKit committers from it.

        * BuildSlaveSupport/build.webkit.org-config/committer_auth_unittest.py: Added.
        (CMStringIO.__enter__):
        (CMStringIO.__exit__):
        Helper class that makes it possible to use StringIO with the "with" statement.

        (open_override): Helper context manager for overriding the global "open" function
        temporarily.

        (CommitterAuthTest.setUp): Set up a somewhat-mocked CommitterAuth that is used by most
        tests.
        (CommitterAuthTest.fake_open_function): Returns a function that can be used in place of
        "open" to test that the expected path was opened.
        (CommitterAuthTest.test_authentication_success): Test that committers can authenticate
        successfully.
        (CommitterAuthTest.test_committer_without_trac_credentials_fails): Test that committers who
        somehow have no Trac account can't authenticate.

        (CommitterAuthTest.test_fail_to_open_auth_json_file):
        (CommitterAuthTest.test_fail_to_open_trac_credentials_file):
        (CommitterAuthTest.test_fail_to_open_webkit_committers_file):
        Test what happens when we can't open the three files we depend upon.

        (CommitterAuthTest.test_implements_IAuth): Test that we fulfill buildbot's expectations for
        an authentication class.

        (CommitterAuthTest.test_invalid_auth_json_file):
        (CommitterAuthTest.test_invalid_committers_file):
        (CommitterAuthTest.test_invalid_trac_credentials_file):
        (CommitterAuthTest.test_missing_auth_json_keys):
        Test what happens when the three files we depend upon are invalid in some way.

        (CommitterAuthTest.test_open_auth_json_file):
        (CommitterAuthTest.test_open_trac_credentials_file):
        (CommitterAuthTest.test_open_webkit_committers_file):
        Test that we open the expected paths.

        (CommitterAuthTest.test_trac_credentials_filename):
        (CommitterAuthTest.test_webkit_committers_filename):
        Test that we extract filenames out of auth.json correctly.

        (CommitterAuthTest.test_non_committer_fails):
        (CommitterAuthTest.test_unknown_user_fails):
        (CommitterAuthTest.test_username_is_prefix_of_valid_user):
        (CommitterAuthTest.test_wrong_password_fails):
        Test various failed authentication attempts.

        (CommitterAuthTest.test_webkit_committers): Test that we can parse the list of WebKit
        committers out of the committers file correctly.

        (CommitterAuthTest.fake_auth_json_file):
        (CommitterAuthTest.invalid_auth_json_file):
        (CommitterAuthTest.fake_committers_file):
        (CommitterAuthTest.invalid_committers_file):
        (CommitterAuthTest.fake_htdigest_file):
        (CommitterAuthTest.invalid_htdigest_file):
        Return various fake files for testing.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Specify an instance of CommitterAuth
        to be used for authentication in the web interface, and specify that only authenticated
        users may force builds.

2011-12-01  Adam Roben  <aroben@apple.com>

        Add an HTDigestParser class to webkitpy

        Fixes <http://webkit.org/b/73575> webkitpy doesn't provide a way to parse htdigest files

        This class can be used to parse Apache's htdigest files and check whether a given
        username/realm/password tuple is present in the file. Eventually this will be used for
        authenticating users on build.webkit.org (<http://webkit.org/b/73353>).

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/net/htdigestparser.py: Added.
        (HTDigestParser.__init__): Stores the parsed representation of the file.
        (HTDigestParser.authenticate): Hashes the username/realm/password tuple to generate a hashed
        password and returns whether the resulting tuple is present in the file.
        (HTDigestParser.entries): Just returns the parsed representation of the file.
        (HTDigestParser.parse_file): Splits each line on colons and checks that each line has the
        expected syntax ('username:realm:hashed_password'). If any line is invalid, we treat the
        whole file as invalid and all authentication attempts will fail.

        * Scripts/webkitpy/common/net/htdigestparser_unittest.py: Added.
        (HTDigestParserTest.assertEntriesEqual): Helper method to assert that fake_htdigest_file,
        optionally appended with some extra data, generates the expected entries.
        (HTDigestParserTest.test_authenticate): Tests that tuples present in the file can
        authenticate, and tuples not present cannot.
        (HTDigestParserTest.test_entries): Tests that we get the expected entries from
        fake_htdigest_file.

        (HTDigestParserTest.test_empty_file):
        (HTDigestParserTest.test_too_few_colons):
        (HTDigestParserTest.test_too_many_colons):
        (HTDigestParserTest.test_invalid_hash):
        Test various forms of invalid files.

        (HTDigestParserTest.fake_htdigest_file): Returns a fake valid htdigest file for testing.

2011-12-01  Philippe Normand  <pnormand@igalia.com>

        [GTK] Make the new 64-bit Release bot part of the core set
        https://bugs.webkit.org/show_bug.cgi?id=73570

        Reviewed by Adam Roben.

        The 64-bit Release bot re-introduced in r101676 replaces the 64-bit
        Debug bot which was already part of the core set. The GTK
        gardeners are willing to actively maintain it.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot.__init__):
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (test_builder_name_regexps):

2011-12-01  Philippe Normand  <pnormand@igalia.com>

        [GTK] Buildslave switch from 32-bit Debug to 64-bit Release
        https://bugs.webkit.org/show_bug.cgi?id=73547

        Reviewed by Adam Roben.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Rename
        the 32-bit Debug configuration to 64-bit Release. The new slave is
        a 64-bit machine already. The 32-bit slave will be shut down.

2011-12-01  Martin Robinson  <mrobinson@igalia.com>

        [GTK] build-jsc should not trigger gtkdoc generation
        https://bugs.webkit.org/show_bug.cgi?id=73552

        Reviewed by Philippe Normand.

        Do not generate gtkdoc when building projects other than WebKit. In particular, this ensures
        that build-jsc does not try to generate gtkdoc.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject): Only generate gtkdoc if the project is "WebKit".

2011-12-01  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        tests_run0.txt gets clobbered when re-running failing tests
        https://bugs.webkit.org/show_bug.cgi?id=63844

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.results_directory):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (AbstractWorker.__init__):
        (_ManagerConnection.start_worker):
        (_InlineManager.start_worker):
        (_MultiProcessManager.start_worker):
        (_WorkerConnection.__init__):
        (_InlineWorkerConnection.__init__):
        (_MultiProcessWorkerConnection.__init__):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (_TestWorker.__init__):
        (_TestsMixin.test_cancel):
        (_TestsMixin.test_done):
        (_TestsMixin.test_unknown_message):
        (InterfaceTest.test_managerconnection_is_abstract):
        (InterfaceTest.test_workerconnection_is_abstract):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.__init__):
        (Worker.safe_init):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_retries_directory):

2011-12-01  Adam Roben  <aroben@apple.com>

        Buildbot fix

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Moved all of the initialization of
        BuildmasterConfig not performed by loadBuilderConfig up to the top of the file. This makes
        it possible for build steps to reference things like the buildbotURL property of the config.

2011-11-30  Adam Roben  <aroben@apple.com>

        Use curl for downloading builds to test slaves

        Buildbot's built-in file transfer capabilities are transferring files much more slowly than
        curl does. This seems to be due to a combination of buildbot being single-threaded (and thus
        often busy servicing web requests, etc.) and using an IPC mechanism with fairly high
        overhead (courtesy of the Twisted framework).

        Eventually we'd like to make Buildbot's built-in transferring more efficient. In the
        meantime we'll try using curl for downloads and keep thinking about a solution for uploads.
        This should make the test slaves quite a bit faster, and should ease the CPU load on
        build.webkit.org a bit.

        Part of <http://webkit.org/b/73484> Mac slaves take 7+ minutes to upload or download a build

        Reviewed by Mark Rowe.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Added the CreateWebKitBuildDirectory
        to Test slaves. It's run just before DownloadBuiltProduct.
        (DownloadBuiltProduct): Changed to be a normal ShellCommand that invokes curl to perform the
        download.
        (CreateWebKitBuildDirectory): Added. Creates the WebKitBuild directory on a slave.
        FileDownload used to do this for us automatically.

2011-11-21  Philippe Normand  <pnormand@igalia.com>

        [GTK] enable-webaudio websetting
        https://bugs.webkit.org/show_bug.cgi?id=69836

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::overridePreference): Update WebKitGTK
        enable-webaudio setting when a layout test requests it.

2011-11-30  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: chromium: I'd like to add a script for running perf tests for WebInspector.
        https://bugs.webkit.org/show_bug.cgi?id=73079

        The idea is to have performance tests for WebInspector.
        I was suggested to put these tests into PerformanceTests/inspector.
        They produce output in a format that is suitable for chromium perf bot drawing scripts.

        I'd like to reuse code for scanning folders for test files.
        Because of the fact that original test_files.py has common and layout specific parts
        I decided to extract the generic part and put it into webkitpy/common
        I think the two packages with name test_files look strange but I have no idea about a better name.

        Reviewed by Dirk Pranke.

        * Scripts/run-inspector-perf-tests.py: Added.
        * Scripts/webkitpy/common/find_files.py: Renamed from Tools/Scripts/webkitpy/layout_tests/port/test_files.py.
        (find):
        (_normalize):
        * Scripts/webkitpy/common/find_files_unittest.py: Added.
        (MockWinFileSystem.join):
        (MockWinFileSystem):
        (MockWinFileSystem.normpath):
        (TestWinNormalize.assert_filesystem_normalizes):
        (TestWinNormalize.test_mocked_win):
        (TestWinNormalize):
        (TestWinNormalize.test_win):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.tests):
        (Port.find_test_files):
        (Port._driver_class):
        (is_reference_html_file):
        (_has_supported_extension):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_find_no_paths_specified):
        (PortTest.test_find_one_test):
        (PortTest.test_find_glob):
        (PortTest.test_find_with_skipped_directories):
        (PortTest.test_find_with_skipped_directories_2):
        (PortTest):
        (PortTest.test_is_test_file):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        (_tests):
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/test_files_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/performance_tests/__init__.py: Added.
        * Scripts/webkitpy/performance_tests/perftestsrunner.py: Added.
        (PerfTestsRunner.__init__):
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner._collect_tests._is_test_file):
        (PerfTestsRunner._collect_tests):
        (PerfTestsRunner.run):
        (PerfTestsRunner._run_tests_set):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py: Added.
        (MainTest.TestPort):
        (MainTest.TestPort.create_driver):
        (MainTest.TestDriver.run_test):
        (MainTest.TestDriver):
        (MainTest.TestDriver.stop):
        (MainTest.create_runner):
        (MainTest.run_test):
        (MainTest.test_run_passing_test):
        (MainTest.test_run_silent_test):
        (MainTest.test_run_failed_test):
        (MainTest.test_run_tonguey_test):
        (MainTest.test_run_timeout_test):
        (MainTest.test_run_crash_test):
        (MainTest.test_run_test_set):
        (MainTest.test_collect_tests):
        (MainTest):
        (MainTest.test_parse_args):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (OptimizeBaselines.execute):
        (AnalyzeBaselines.execute):

2011-11-30  nduca@chromium.org  <nduca@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>

        [chromium] Enable threaded compositing via CCThreadProxy::hasThread only
        https://bugs.webkit.org/show_bug.cgi?id=70838

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::threadedCompositingEnabled):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::WebViewHost):
        (WebViewHost::~WebViewHost):

2011-11-30  Chris Fleizach  <cfleizach@apple.com>

        AX: Nodes are reporting that focus can be set when they really can't
        https://bugs.webkit.org/show_bug.cgi?id=72791

        Reviewed by Beth Dakin.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isFocusable):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::isFocusable):

2011-11-30  Alejandro G. Castro  <alex@igalia.com>

        Moved myself to the reviewers list.

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

2011-11-30  David Levin  <levin@chromium.org>

        [chromium] Move didUpdateLayout from WebFrameClient to WebViewClient.
        https://bugs.webkit.org/show_bug.cgi?id=73415

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didUpdateLayout): Move didUpdateLayout to account for
        it being moved to a new interface and having the parameter removed.
        * DumpRenderTree/chromium/WebViewHost.h: Ditto.

2011-11-30  Adam Roben  <aroben@apple.com>

        Make NRWT show DRT/WTR build logs when the build fails or --verbose is passed

        This will make it a lot easier to investigate build failures on the bots.

        Fixes <http://webkit.org/b/71160> NRWT doesn't show build output when building DRT

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.run_command): Include the mock output in the ScriptError we raise since it
        makes the expected output in WebKitPortTest.test_build_driver more closely mimic the output
        seen in practice.

        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_http_locking): Pass False for the configure_logging parameter to Printer.
        The Printer was modifying the root logger in way that would cause my new tests in
        WebKitPort.test_build_driver to fail. The value of the configure_logging parameter doesn't
        seem important to the functioning of this test, and passing False makes Printer not modify
        the root logger.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._run_script): Log the output of the command at the DEBUG level so it will show
        up when --verbose is passed but not otherwise.
        (WebKitPort._build_driver): When an error occurs, log the error message and the script's
        output at the ERROR level so it will always show up.

        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitPortTest.test_build_driver): Test that nothing is logged in the normal, successful
        cases. Test that the build scripts' output is logged when --verbose is passed or the build
        fails.

2011-11-30  Adam Roben  <aroben@apple.com>

        Add a way to set OutputCapture's log level

        This will be used by some unit tests I'm planning to add.

        Fixes <http://webkit.org/b/73469> OutputCapture can't be used to capture DEBUG messages

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/system/outputcapture.py:
        (OutputCapture.__init__): Initialize our internal logging level to INFO, which was the only
        level we ever used before this patch.
        (OutputCapture.set_log_level): Added. This is useful for testing what log level code that is
        being tested uses. Sets the log level for any current or future logging handlers.
        (OutputCapture.capture_output): Use our internal logging level instead of always using INFO.

        * Scripts/webkitpy/common/system/outputcapture_unittest.py: Added.
        (OutputCaptureTest.setUp): Create an OutputCapture to test.
        (OutputCaptureTest.log_all_levels): Helper method to log a message at each log level.
        (OutputCaptureTest.assertLogged): Helper method to assert that a particular set of strings
        was logged.
        (OutputCaptureTest.test_initial_log_level): Test that we start out at the INFO level.
        (OutputCaptureTest.test_set_log_level): Test that set_log_level correctly modifies the log
        level.

2011-11-29  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=72751
        WebKit2.MouseMoveAfterCrash API test is failing 

        Reviewed by Sam Weinig.

        Like DumpRenderTree, the NSWindow should act as an active window.
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (-[ActiveOffscreenWindow isKeyWindow]):
        (TestWebKitAPI::PlatformWebView::PlatformWebView):

2011-11-30  Gustavo Noronha Silva  <gns@gnome.org>

        Add step to update gtk dependencies to the buildbot
        https://bugs.webkit.org/show_bug.cgi?id=73455

        Reviewed by Martin Robinson.

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

2011-11-30  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Add a fullscreen option to MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=73445

        Reviewed by Noam Rosenthal.

        This bypasses the compositor on the N9 to increase performances
        and remove the huge useless gray bar part of the window frame
        at the bottom.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (printHelp):
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::setStartFullScreen):
        (WindowOptions::startFullScreen):

2011-11-30  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add an initial jhbuild setup which installs fonts into the WebKitBuild
        https://bugs.webkit.org/show_bug.cgi?id=73425

        Reviewed by Gustavo Noronha Silva.

        Add initial jhbuild support to the GTK+ port. update-webkitgtk-libs will
        ensure that the jhbuild root is up-to-date. Currently the only module is
        the font module.

        * Scripts/update-webkitgtk-libs: Added.
        * gtk/common.py: Added a helper to get the number of CPUs.
        * gtk/jhbuild.modules: Added.
        * gtk/jhbuildrc: Added.

2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Remove dependency of Qt DRT on JavaScriptCore.

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/WorkQueue.cpp: Include the correct header file we're using anyway,
        instead of one that pulls in JavaScriptCore headers.
        * DumpRenderTree/qt/DumpRenderTree.pro: There's no need to pull in the JSC headers
        with load(javascriptcore).

2011-11-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r101440 and r101442.
        http://trac.webkit.org/changeset/101440
        http://trac.webkit.org/changeset/101442
        https://bugs.webkit.org/show_bug.cgi?id=73429

        multiple crashes on layout tests (Requested by hayato on
        #webkit).

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::WebViewHost):
        (WebViewHost::~WebViewHost):

2011-11-30  Fady Samuel  <fsamuel@chromium.org>

        [Chromium] Fix broken DRT build for Aura Linux
        https://bugs.webkit.org/show_bug.cgi?id=72667

        Reviewed by Tony Chang.

        DRT now builds for Aura Linux. This, more or less, shares the same code as Android.

        The following changes have been made:

          1. Renamed TestShellAndroid to TestShellLinux.
          2. Stub code moved added in TestShellStub that will only compile on non-GTK Linux builds.
          3. Code common to Gtk, Aura, and Android moved to TestShellLinux.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::keyDown):
        * DumpRenderTree/chromium/TestShellAndroid.cpp: Removed.
        * DumpRenderTree/chromium/TestShellGtk.cpp:
        * DumpRenderTree/chromium/TestShellLinux.cpp: Copied from Tools/DumpRenderTree/chromium/TestShellGtk.cpp.
        (AlarmHandler):
        (TestShell::waitTestFinished):
        (setupFontconfig):
        (platformInit):
        * DumpRenderTree/chromium/TestShellStub.cpp: Added.
        (checkLayoutTestSystemDependencies):
        (openStartupDialog):

2011-11-30  Fady Samuel  <fsamuel@chromium.org>

        [Chromium] Set Result Before Early Exit for Fixed Layout Methods in LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=73328

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::enableFixedLayoutMode):
        (LayoutTestController::setFixedLayoutSize):

2011-11-29  Hayato Ito  <hayato@chromium.org>

        Skip writing the result of diff_image since non-chromium ports don't implement diff_image.
        https://bugs.webkit.org/show_bug.cgi?id=73381

        Reviewed by Ryosuke Niwa.

        This is a quick fix for the breakage of tests on non-chromium port.
        We should implement diff_image later on non-chromium ports.

        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):

2011-11-29  Balazs Ankes  <Ankes.Balazs@stud.u-szeged.hu>

        [NRWT] Fix --platform=qt-5.0 --new-baseline combo
        https://bugs.webkit.org/show_bug.cgi?id=72489

        Reviewed by Eric Seidel.

        Before the this fix always added "qt" option for the option list
        * Scripts/run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/qt.py:

2011-11-29  David Levin  <levin@chromium.org>

        Add a way to revert a variable to its previous value after leaving a scope.
        https://bugs.webkit.org/show_bug.cgi?id=73371

        Reviewed by Adam Barth.

        * DumpRenderTree/ForwardingHeaders/wtf/TemporarilyChange.h: Added.
        * TestWebKitAPI/TestWebKitAPI.gypi: Added test file to the build.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Ditto.
        * TestWebKitAPI/Tests/WTF/TemporarilyChange.cpp: Added.
        (TestWebKitAPI::TEST): Added a test for TemporarilyChange.

2011-11-28  Kentaro Hara  <haraken@chromium.org>

        Implement [Supplemental] IDL and support it in run-bindings-tests
        https://bugs.webkit.org/show_bug.cgi?id=73162

        Reviewed by Adam Barth.

        run-bindings-tests supports the [Supplemental] IDL in the following way.
            (1) It creates a file |x| listing all IDL files.
            (2) It generates a supplemental dependency file |y| using resolve-supplemental.pl and |x|.
            (3) For each IDL file |z|, it runs generate-bindings.pl with |y|.
                Then, generate-bindings.pl generates .h and .cpp files for the IDL file |z|,
                including all attributes in IDL files that are supplementing the IDL file |z|.

        * Scripts/run-bindings-tests:
        (generate_from_idl):
        (generate_supplemental_dependency):
        (detect_changes):
        (run_tests):
        (main):

2011-11-18  Nat Duca  <nduca@chromium.org>

        [chromium] Enable threaded compositing via CCThreadProxy::hasThread only
        https://bugs.webkit.org/show_bug.cgi?id=70838

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::threadedCompositingEnabled):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::WebViewHost):
        (WebViewHost::~WebViewHost):

2011-11-29  Ojan Vafai  <ojan@chromium.org>

        List of builders in the flakiness dashboard is out of date
        https://bugs.webkit.org/show_bug.cgi?id=73347

        Reviewed by Adam Barth.

        The chromium gpu bots no longer run layout tests, so kill that
        group entirely.

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

2011-11-29  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't hard-code the list of WebKit2 generated sources

        The generated sources are... wait for it... generated. So
        use the generator itself to figure out which sources we need
        to compile.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:

2011-11-29  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add a method to detect 'make dist' errors without running 'make dist'
        https://bugs.webkit.org/show_bug.cgi?id=73216

        Reviewed by Philippe Normand.

        Add a script that tries to sniff out 'make dist' problems without running
        'make dist.' 'make distcheck' takes a very long time to run and this should
        reduce the amount of times it needs to be run consecutively.

        * gtk/common.py:
        (get_build_path.is_valid_build_directory): Guess the source directory
        by the existence of the GNUmakefile instead of the .libs directory. This
        allows one to run the script after running autogen.sh but before fully
        building.
        * gtk/find-make-dist-errors: Added.

2011-11-29  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove use of internal headers in the MiniBrowser

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowser.pro:

2011-11-29  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix debug-shlib build without webkit2

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/qtwebkit.prf: Respect no_webkit2.

2011-11-28  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Unreviewed buildfix after r101307.

        * qmake/mkspecs/features/webkit2.prf: Add missing includepath.

2011-11-29  Roland Steiner  <rolandsteiner@chromium.org>

        <style scoped>: add ENABLE(STYLE_SCOPED) flag to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=72848

        Add option to build-webkit.

        Reviewed by Dimitri Glazkov.

        * Scripts/build-webkit:

2011-11-28  Ojan Vafai  <ojan@chromium.org>

        gtest normalization in the test results server is sometimes wrong
        https://bugs.webkit.org/show_bug.cgi?id=73262

        Reviewed by Tony Chang.

        If a gtest has it's modified changed (e.g. add FLAKY_) then it will have two
        entries in the incremental JSON, one of the entries will have the correct data
        from the run and the other will have dummy no-data values. Make sure to
        always pick the one with real data.

        * TestResultServer/model/jsonresults.py:
        (JsonResults._remove_gtest_modifiers):
        * TestResultServer/model/jsonresults_unittest.py:
        (JsonResultsTest.test_remove_gtest_modifiers):

2011-11-28  Ojan Vafai  <ojan@chromium.org>

        Some of the results.json files have results/times entries at the directory level
        https://bugs.webkit.org/show_bug.cgi?id=73261

        Reviewed by Tony Chang.

        This is just a bug that got introduced in a temporary push of the results server.
        This patch repairs the broken files. After all the bots have cycled, we can simplify
        this code to just assert that results/times are not at the directory level.

        Also, when catching exceptions, log the full stacktrace.

        * TestResultServer/model/jsonresults.py:
        (_is_directory):
        (JsonResults._load_json):
        (JsonResults._merge_tests):
        (JsonResults.merge):
        * TestResultServer/model/jsonresults_unittest.py:
        (JsonResultsTest.test_merge_directory_hierarchy_extra_results_and_times):

2011-11-28  Tony Chang  <tony@chromium.org>

        ews bots should pass --force to update-webkit-chromium
        https://bugs.webkit.org/show_bug.cgi?id=73230

        Reviewed by Adam Barth.

        This makes it less likely for gclient changes to break the bots (e.g.,
        if a DEPS repository moves or is switched to a branch).

        Also pass --force when using |build-webkit --update-chromium| since this
        appears to only be used by the bots.

        Take 2: Add Options.non_interactive to update.py's options() method.

        * Scripts/update-webkit:
        * Scripts/webkitdirs.pm:
        (determineIsChromium): Add --force-update to update-webkit --chromium.
        (forceChromiumUpdate):
        (buildChromium): Pass --force to update-webkit-chromium.
        * Scripts/webkitpy/tool/steps/update.py:
        (Update.run): Add --force-update if non-interactive (i.e., bots).
        * Scripts/webkitpy/tool/steps/update_unittest.py:

2011-11-28  Tony Chang  <tony@chromium.org>

        Revert r101279, broke the ews and cq bots.

        * Scripts/update-webkit:
        * Scripts/webkitdirs.pm:
        (determineIsChromium):
        (buildChromium):
        * Scripts/webkitpy/common/config/ports.py:
        (WebKitPort.update_webkit_command):
        (ChromiumPort.update_webkit_command):
        * Scripts/webkitpy/common/config/ports_mock.py:
        (MockPort.update_webkit_command):
        * Scripts/webkitpy/tool/steps/update.py:
        * Scripts/webkitpy/tool/steps/update_unittest.py: Removed.

2011-11-28  Ojan Vafai  <ojan@chromium.org>

        testlistjson on the test results server doesn't understand hierarchical results format
        https://bugs.webkit.org/show_bug.cgi?id=73246

        Reviewed by Tony Chang.

        * TestResultServer/model/jsonresults.py:
        (JsonResults._delete_results_and_times):
        Instead of just getting the top-level keys, we now walk the tests tree and
        delete the results and times values.

        * TestResultServer/model/jsonresults_unittest.py:
        Simplify the test harness to take in the same JSON format for the tests
        that the actual results.json uses instead of something very similar but
        needlessly different. This also allows for testing the broken case of
        results and times values being at non-leaf level.

2011-11-28  Tony Chang  <tony@chromium.org>

        ews bots should pass --force to update-webkit-chromium
        https://bugs.webkit.org/show_bug.cgi?id=73230

        Reviewed by Adam Barth.

        This makes it less likely for gclient changes to break the bots (e.g.,
        if a DEPS repository moves or is switched to a branch).

        Also pass --force when using |build-webkit --update-chromium| since this
        appears to only be used by the bots.

        * Scripts/update-webkit:
        * Scripts/webkitdirs.pm:
        (determineIsChromium): Add --force-update to update-webkit --chromium.
        (forceChromiumUpdate):
        (buildChromium): Pass --force to update-webkit-chromium.
        * Scripts/webkitpy/tool/steps/update.py:
        (Update.run): Add --force-update if non-interactive (i.e., bots).
        * Scripts/webkitpy/tool/steps/update_unittest.py:

2011-11-28  Michael Saboff  <msaboff@apple.com>

        Fixed help message for --exclude-kraken to say that
        it excludes Kraken and not SunSpider.

        Rubber-stamped by Filip Pizlo.

        * Scripts/bencher:

2011-11-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r101273.
        http://trac.webkit.org/changeset/101273
        https://bugs.webkit.org/show_bug.cgi?id=73244

        multiple test failures and timeouts (Requested by tony^work on
        #webkit).

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::keyDown):
        * DumpRenderTree/chromium/TestShellAndroid.cpp: Copied from Tools/DumpRenderTree/chromium/TestShellGtk.cpp.
        (AlarmHandler):
        (TestShell::waitTestFinished):
        (platformInit):
        (openStartupDialog):
        (checkLayoutTestSystemDependencies):
        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (AlarmHandler):
        (setupFontconfig):
        (TestShell::waitTestFinished):
        (platformInit):
        * DumpRenderTree/chromium/TestShellLinux.cpp: Removed.
        * DumpRenderTree/chromium/TestShellStub.cpp: Removed.

2011-11-28  John Yani  <vanuan@gmail.com>

        new-run-webkit-tests is locale dependent
        https://bugs.webkit.org/show_bug.cgi?id=68691

        Reviewed and modified by Eric Seidel.

        This is a simpler version of John's patch which I'm landing.
        This just engages the hacks from the Host constructor on a global
        basis.

        * Scripts/webkitpy/common/host.py:
        (Host.__init__):
        (Host._engage_awesome_locale_hacks):

2011-11-28  Fady Samuel  <fsamuel@chromium.org>

        [Chromium] Fix broken DRT build for Aura Linux
        https://bugs.webkit.org/show_bug.cgi?id=72667

        Reviewed by Tony Chang.

        DRT now builds for Aura Linux. This, more or less, shares the same code as Android.

        The following changes have been made:

          1. Renamed TestShellAndroid to TestShellLinux.
          2. Stub code moved added in TestShellStub that will only compile on non-GTK Linux builds.
          3. Code common to Gtk, Aura, and Android moved to TestShellLinux.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::keyDown):
        * DumpRenderTree/chromium/TestShellAndroid.cpp: Removed.
        * DumpRenderTree/chromium/TestShellGtk.cpp:
        * DumpRenderTree/chromium/TestShellLinux.cpp: Copied from Tools/DumpRenderTree/chromium/TestShellGtk.cpp.
        (AlarmHandler):
        (TestShell::waitTestFinished):
        (setupFontconfig):
        (platformInit):
        * DumpRenderTree/chromium/TestShellStub.cpp: Added.
        (checkLayoutTestSystemDependencies):
        (openStartupDialog):

2011-11-28  Eric Seidel  <eric@webkit.org>

        Add Environment object to Host and fix the GCC smartquotes trouble seen on the commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=71983

        Reviewed by Adam Barth.

        We'll add more code to Environment overtime,
        allowing us to mock out more of our direct interactions with os.environ.

        This patch also makes run_command print the passed in environment.

        * Scripts/webkitpy/common/host_mock.py:
        * Scripts/webkitpy/common/system/environment.py: Copied from Tools/Scripts/webkitpy/tool/steps/build.py.
        * Scripts/webkitpy/common/system/environment_mock.py: Copied from Tools/Scripts/webkitpy/tool/steps/build.py.
        * Scripts/webkitpy/common/system/environment_unittest.py: Copied from Tools/Scripts/webkitpy/tool/steps/build.py.
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_mock.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/steps/build.py:

2011-11-28  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Build system fixes against V8.

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/webcore.prf: Get rid of old v8 cruft.
        * qmake/mkspecs/features/wtf.prf: If requested, pull in v8 from Qt and configure
        WTF accordingly to use v8. (WTF in the implementation needs it as well as users of WTF)

2011-11-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Make sure the useFixedLayout feature is consistently handled
        https://bugs.webkit.org/show_bug.cgi?id=73212

        Reviewed by Simon Hausmann.

        The web page parameters are set to our Qt defaults and are now altered
        in the WebKitTestRunner.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::WrapperWindow):

2011-11-28  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] WTF should be built as separate static library
        https://bugs.webkit.org/show_bug.cgi?id=73201

        Reviewed by Tor Arne Vestbø.

        * DumpRenderTree/qt/DumpRenderTree.pro: Require wtf.
        * MiniBrowser/qt/BrowserWindow.cpp: Remove unnecessary config.h inclusion and
        thus wtf dependency.
        * WebKitTestRunner/InjectedBundle/Target.pri: Require wtf.
        * WebKitTestRunner/Target.pri: Ditto.
        * qmake/mkspecs/features/default_post.prf: When re-ordering the static libs
        consider wtf, too.
        * qmake/mkspecs/features/javascriptcore.prf: Remove WTF specific build stuff,
        moved into wtf.prf.
        * qmake/mkspecs/features/qtwebkit.prf: For debug builds with shared libs, also
        link in libwtf.
        * qmake/mkspecs/features/wtf.prf: Added. Stuff needed for building and using WTF.

2011-11-28  Kentaro Hara  <haraken@chromium.org>

        run-bindings-tests shows diff error for a newly added binding test
        https://bugs.webkit.org/show_bug.cgi?id=73179

        Reviewed by Adam Barth.

        Currently, when we add a new binding test, say bindings/scripts/test/TestSupplemental.idl,
        run-bindings-tests just shows diff error because reference files
        (i.e. {V8,JS,...}TestSupplemental.h and {V8,JS,...}TestSupplemental.cpp) do not yet exist:

            FAIL: (V8) V8TestSupplemental.h
            diff: WebCore/bindings/scripts/test/V8/V8TestSupplemental.h: No such file or directory

        Instead, this patch treats a non-existent reference file as an empty file and
        shows the result of the newly added binding test, like this:

            FAIL: (V8) V8TestSupplemental.h
            --- WebCore/bindings/scripts/test/V8/V8TestSupplemental.h       1970-01-01 09:00:00.000000000 +0900
            +++ /tmp/tmpmX2i2F/V8TestSupplemental.h 2011-11-28 11:08:34.150707677 +0900
            @@ -0,0 +1,84 @@
            +/*
            +    This file is part of the WebKit open source project.
            +    This file has been generated by generate-bindings.pl. DO NOT MODIFY!
            +
            (omitted)

        * Scripts/run-bindings-tests:
        (detect_changes): Just added an -N option to the diff command.

2011-11-28  Martin Robinson  <mrobinson@igalia.com>

        [Gtk][gtkdoc] Syntax error in Tools/gtk/generate-gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=73165

        Reviewed by Philippe Normand.

        Fix some syntax errors in this script and remove an unused variable.

        * gtk/generate-gtkdoc:
        (get_webkit2_options.src_path): 
        (get_webkit2_options):
        (get_webkit1_options.src_path):

2011-11-26  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Enable the inspector.
        
        * waf/build/settings.py:

2011-11-26  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the build after r101174.

        * gtk/generate-gtkdoc: Properly handle empty PKG_CONFIG_PATHs.

2011-11-17  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Integrate build-gtkdoc into build-webkit and make
        https://bugs.webkit.org/show_bug.cgi?id=72626

        Reviewed by Philippe Normand.

        * GNUmakefile.am: Added support for new scripts and "make docs".
        * Scripts/webkitdirs.pm: Call generate-gtkdoc when building.
        (buildAutotoolsProject):
        * gtk/generate-gtkdoc: Added.
        * gtk/gtkdoc.py: Renamed from Source/WebKit2/UIProcess/API/gtk/docs/gtkdoc.py.

2011-11-25  Ádám Kallai  <Kallai.Adam@stud.u-szeged.hu>

        [Qt] Add support for using OWRT with Qt5
        https://bugs.webkit.org/show_bug.cgi?id=72947

        Add qt-5.0 platform and don't pass -graphicssystem to QtTestBrowser if using Qt5.

        Reviewed by Csaba Osztrogonác.

        * Scripts/old-run-webkit-tests:

2011-11-25  Yury Semikhatsky  <yurys@chromium.org>

        [Chromium] Web Inspector: get rid of WebDevToolsFrontendClient::sendFrontendLoaded method
        https://bugs.webkit.org/show_bug.cgi?id=73126

        No need to have a separate client call for this. The front-end can store messages
        which arrive before front-end loaded and dispatch them later. This happens in layout
        tests only by the way as all other messages should be initiated by the front-end code.

        Reviewed by Pavel Feldman.

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        * DumpRenderTree/chromium/DRTDevToolsClient.h:

2011-11-24  Kentaro Hara  <haraken@chromium.org>

        Replace subprocess.call() with subprocess.Popen()
        https://bugs.webkit.org/show_bug.cgi?id=73105

        Reviewed by Adam Barth.

        Currently, the stdout and stderr of the child processes of run-bindings-tests
        are mixed (or even gone away) with the stdout and stderr of run-bindings-tests itself.
        This is the problem of subprocess.call(), which does not synchronize the stdout and stderr
        between a parent process and a child process. This patch replaces subprocess.call() with
        subprocess.Popen() and synchronizes the stdout and stderr between them.
        This patch also makes output messages of run-bindings-tests more readable.

        With this patch, the output messages of run-bindings-tests look like as follows:

            PASS: (CPP) WebDOMTestObj.h
            PASS: (CPP) WebDOMTestObj.cpp
            FAIL: (CPP) WebDOMTestInterface.h
            --- Source/WebCore/bindings/scripts/test/CPP/WebDOMTestInterface.h      2011-11-25 13:34:09.313516268 +0900
            +++ /tmp/tmpDAV87G/WebDOMTestInterface.h        2011-11-25 13:44:42.712946812 +0900
            @@ -23,7 +23,7 @@
             #ifndef WebDOMTestInterface_h
             #define WebDOMTestInterface_h

            -#if ENABLE(Condition1) || ENABLE(Condition2)
            +#if ENABLE(Condition1) || ENABLE(Condition3)

             #include <WebDOMObject.h>
             #include <WebDOMString.h>
             @@ -53,5 +53,5 @@
             WebDOMTestInterface toWebKit(WebCore::TestInterface*);

             #endif
            -#endif // ENABLE(Condition1) || ENABLE(Condition2)
            +#endif // ENABLE(Condition1) || ENABLE(Condition3)
            PASS: (CPP) WebDOMFloat64Array.cpp
            PASS: (CPP) WebDOMFloat64Array.h

            Some tests FAIL! (To update the reference files, execute "run-bindings-tests --reset-results")

        * Scripts/run-bindings-tests:
        (generate_from_idl):
        (detect_changes):
        (run_tests):
        (main):

2011-11-24  Kentaro Hara  <haraken@chromium.org>

        Fix the current working directory of run-bindings-tests
        https://bugs.webkit.org/show_bug.cgi?id=73106

        Reviewed by Adam Barth.

        Currently, run-bindings-tests outputs the following error
        (although it outputs "all tests passed!" in the end):

            Testing the ObjC generator on TestObj.idl
            gcc: WebCore/bindings/objc/PublicDOMInterfaces.h: No such file or directory
            gcc: warning: '-x objective-c' after last input file has no effect
            gcc: no input files

        This is because CodeGeneratorObjC.pm assumes that the current working directory
        is WebKit/Source/, but run-bindings-tests sets the current working directory to WebKit/.
        Thus, this patch changes it to WebKit/Source/.

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

2011-11-24  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Get rid of the buildDirForSource() function in the build system

        At some point the plan was to allow for running qmake on sub-trees
        of the sources, into the top level build directory, but this is no
        longer possible, so no reason to keep the convenience function around.

        Reviewed by Simon Hausmann.

        * WebKitTestRunner/DerivedSources.pri:
        * WebKitTestRunner/InjectedBundle/DerivedSources.pri:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/functions.prf:
        * qmake/mkspecs/features/javascriptcore.prf:
        * qmake/mkspecs/features/webcore.prf:
        * qmake/mkspecs/features/webkit2.prf:

2011-11-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r101107.
        http://trac.webkit.org/changeset/101107
        https://bugs.webkit.org/show_bug.cgi?id=73062

        Breaks the commit-queue (Requested by abarth on #webkit).

        * Scripts/webkitpy/common/host.py:
        (Host._engage_awesome_windows_hacks):
        * Scripts/webkitpy/common/host_mock.py:
        (MockHost.__init__):
        * Scripts/webkitpy/common/system/environment.py: Removed.
        * Scripts/webkitpy/common/system/environment_unittest.py: Removed.
        * Scripts/webkitpy/common/system/executive.py:
        (Executive._run_command_with_teed_output):
        (Executive.run_and_throw_if_fail):
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.run_and_throw_if_fail):
        (MockExecutive.run_command):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._driver_build_script_name):
        (WebKitPort._run_script):
        (WebKitPort._build_driver):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (test_build_driver):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/steps/build.py:
        (Build.build):

2011-11-23  Ojan Vafai  <ojan@chromium.org>

        Unreviewed, rolling out r101110.
        http://trac.webkit.org/changeset/101110
        https://bugs.webkit.org/show_bug.cgi?id=73057

        The bots have now cycled and this patch is no longer needed.

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

2011-11-23  Ojan Vafai  <ojan@chromium.org>

        Temporarily save the incremental results json in order to identify bug
        https://bugs.webkit.org/show_bug.cgi?id=73057

        Reviewed by Dean Jackson.

        The test results server needed to be rolled back from tip of tree
        due to a JSON merging bug. It's hard to identify what the bug is without
        the raw data.

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

2011-11-23  Ojan Vafai  <ojan@chromium.org>

        Merging two version 4 results hits an error in the test results server
        https://bugs.webkit.org/show_bug.cgi?id=73042

        Reviewed by Adam Barth.

        The old code assumed that if the aggregate results value was not a leaf
        value that the incremental results would exist, which is just totally
        wrong. Added a test for that case as well.

        * TestResultServer/model/jsonresults.py:
        (JsonResults._merge_tests):
        * TestResultServer/model/jsonresults_unittest.py:
        (JsonResultsTest.test_merge_build_directory_hierarchy_old_version):
        (JsonResultsTest.test_merge_build_directory_hierarchy):

2011-11-23  Eric Seidel  <eric@webkit.org>

        Add Environment object to Host and fix the GCC smartquotes trouble seen on the commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=71983

        Reviewed by Adam Barth.

        We'll add more code to Environment overtime,
        allowing us to mock out more of our direct interactions with os.environ.

        This patch also makes run_command print the passed in environment.

        * Scripts/webkitpy/common/host_mock.py:
        * Scripts/webkitpy/common/system/environment.py: Copied from Tools/Scripts/webkitpy/tool/steps/build.py.
        * Scripts/webkitpy/common/system/environment_mock.py: Copied from Tools/Scripts/webkitpy/tool/steps/build.py.
        * Scripts/webkitpy/common/system/environment_unittest.py: Copied from Tools/Scripts/webkitpy/tool/steps/build.py.
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_mock.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/steps/build.py:

2011-11-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Re-generate QtWebKit API forwarding headers when API changes

        The forwarding headers are generated by syncqt, and syncqt is run by qmake,
        so we need sync.profile to live in the same directory as the project file
        that will be touched when adding/removing API (api.pri in our case).

        Since the WebKit2 APIs live in a separate static library, we have to
        add the project file for WebKit2 as a dependency of the api.pri file
        as well, so that any changes to the WebKit2 API will still trigger a
        run of qmake (and then syncqt).

        Lastly, we use the new QMAKE_SYNCQT_OUTDIR variable in Qt 5 to ensure
        that the forwarding headers are still generated in the root build dir,
        not in the Source dir along with the internal forwarding headers.

        Reviewed by Andreas Kling.

        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/functions.prf:

2011-11-23  Johnny Ding  <jnd@chromium.org>

        Set right default value to baseURL in LayoutTestController::queueLoadHTMLString.
        https://bugs.webkit.org/show_bug.cgi?id=72950

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::queueLoadHTMLString):

2011-11-23  Adam Barth  <abarth@webkit.org>

        garden-o-matic should display a message if it can't find results to display
        https://bugs.webkit.org/show_bug.cgi?id=72991

        Reviewed by Dimitri Glazkov.

        Not all failures (e.g., TIMEOUT) have results that we can display.
        This patch adds a short message so that the user can see that we're
        done trying to load the results.

        * 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:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:

2011-11-23  Adam Barth  <abarth@webkit.org>

        garden-o-matic should explain more clearly what the builder lists at the top of the page mean
        https://bugs.webkit.org/show_bug.cgi?id=72992

        Reviewed by Dimitri Glazkov.

        This patch also prepares us to list other sorts of failures, like
        performance and unit test.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:

2011-11-23  Ryan Sleevi  <rsleevi@chromium.org>

        Add new Chromium tests to the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=72997

        Reviewed by Ojan Vafai.

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

2011-11-23  Adam Barth  <abarth@webkit.org>

        garden-o-matic should support AUDIO failures
        https://bugs.webkit.org/show_bug.cgi?id=69477

        Reviewed by Dimitri Glazkov.

        This is a first iteration at supporting AUDIO failures in
        garden-o-matic.  We'll probably need to iterate a bit when we have a
        real audio failure in the tree to play with.  For example, we'll
        probably want to add and <audio> element to the "Examine" view to hear
        the differences, but that all can be done in a subsequent patch.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:

2011-11-23  Scott Graham  <scottmg@chromium.org>

        Adding gamepad support
        https://bugs.webkit.org/show_bug.cgi?id=69451

        Reviewed by Darin Fisher.

        Add a 'gamepadController' to Chromium DRT. Allows for setting of mock
        gamepad data that will be retrieved when JS code pulls via API access.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/GamepadController.cpp: Added.
        (GamepadController::GamepadController):
        (GamepadController::bindToJavascript):
        (GamepadController::reset):
        (GamepadController::connect):
        (GamepadController::disconnect):
        (GamepadController::setId):
        (GamepadController::setButtonCount):
        (GamepadController::setButtonData):
        (GamepadController::setAxisCount):
        (GamepadController::setAxisData):
        (GamepadController::fallbackCallback):
        * DumpRenderTree/chromium/GamepadController.h: Added.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetTestController):
        (TestShell::bindJSObjectsToWindow):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::gamepadController):

2011-11-23  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [CMake] Move the top-level logic to the top-level directory.
        https://bugs.webkit.org/show_bug.cgi?id=72685

        Reviewed by Brent Fulgham.

        * CMakeLists.txt: Added.
        * DumpRenderTree/efl/CMakeLists.txt: Keep building into Programs/.
        * EWebLauncher/CMakeLists.txt: Renamed from Tools/CMakeListsEfl.txt.
        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):
        * WinCELauncher/CMakeLists.txt: Renamed from Tools/CMakeListsWinCE.txt.

2011-11-17  Vincent Scheib  <scheib@chromium.org>

        Pointer Lock: Initial Tests for navigator.webkitPonter
        https://bugs.webkit.org/show_bug.cgi?id=72659

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
            Enabling PointerLock in TestShell

2011-11-22  Ryan Sleevi  <rsleevi@chromium.org>

        Update flakiness dashboard for new Chromium builders and tests
        https://bugs.webkit.org/show_bug.cgi?id=72931

        Reviewed by Ojan Vafai.

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

2011-11-22  Adam Roben  <aroben@apple.com>

        Remove some debugging code I accidentally left in r101005

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_python):

2011-11-22  Adam Roben  <aroben@apple.com>

        Teach prepare-ChangeLog how to find changed classes/methods/functions in Python files

        Fixes <http://webkit.org/b/57008> prepare-ChangeLog doesn't find names of modified
        classes/methods in Python source files

        Reviewed by Dan Bates.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges): Call get_function_line_ranges_for_python for files ending in .py
        or that use python as their interpreter. Modified the code that extracts the interpreter to
        ignore a leading "/usr/bin/env " in the interpreter line, as is common for our Python
        scripts.
        (get_function_line_ranges_for_python): Added. Does simple parsing of Python files to look
        for class/def lines and generate ranges based on them.

2011-11-21  Yuta Kitamura  <yutak@chromium.org>

        [GTK] Enable WebSocket hybi tests
        https://bugs.webkit.org/show_bug.cgi?id=72870

        Reviewed by Xan Lopez.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        Reset the setting value to the default value (true).
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::overridePreference):
        Change the setting value through a function in DumpRenderTreeSupportGtk.

2011-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        ChangeLogEntry should be able to parse entries with multiple authors
        https://bugs.webkit.org/show_bug.cgi?id=72690

        Reviewed by Eric Seidel.

        Support multi-author change log entries in ChangeLogEntry. Split author names using
        the same logic as splitting reviewer names. _authors now stores list of dictionaries
        with "name" and "email" as keys. Unlike reviewers, we can't always resolve authors to
        accounts because some contributors are never listed in committers.py. 

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/config/committers.py: Fixed a bug that *_by_{name|email}
        throws an exception when the argument is None.

2011-11-21  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Speed up debug builds.
        https://bugs.webkit.org/show_bug.cgi?id=72882

        Reviewed by Tor Arne Vestbø.

        Introduce a special type of build that replaces the static jsc/wc/wk2
        static libraries with shared libraries, that individually are much faster
        to link and don't require relinking into the big library when changing just
        one file in one module. It can be enabled with
        --qmakearg="CONFIG+=force_static_libs_as_shared"

        * qmake/mkspecs/features/force_static_libs_as_shared.prf: Added. With this configuration,
        disable symbol visibility, static linkage and enable rpath.
        * qmake/mkspecs/features/functions.prf: Add a helper function to determine if
        we need to link the convenience libraries together or not and renamed linkStaticLibrary
        to just linkLibrary (because linkage is not necessarily static).
        * qmake/mkspecs/features/qtwebkit.prf: When using the trick, make sure to also
        link against jsc/wc/wk2 when linking app code against QtWebKit.
        * qmake/mkspecs/features/javascriptcore.prf: Use new +needToLinkLibrary helper
        function.
        * qmake/mkspecs/features/webcore.prf: Ditto.
        * qmake/mkspecs/features/webkit2.prf: Ditto.

2011-11-21  Adam Klein  <adamk@chromium.org>

        Update flakiness dashboard linkification regexps for crbug.com/100000 and above
        https://bugs.webkit.org/show_bug.cgi?id=72898

        Reviewed by Ojan Vafai.

        Also removed a comment that was going to be more trouble to keep up to
        date than seemed worthwhile (the code is now the documentation).

        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-11-21  Dominic Mazzoni  <dmazzoni@google.com>

        [Chromium] WebAccessibilityNotification should use AssertMatchingEnums.
        https://bugs.webkit.org/show_bug.cgi?id=72895

        Reviewed by Chris Fleizach.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::postAccessibilityNotification):

2011-11-21  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, run-gtk-tests temporary workaround after r98500.

        * Scripts/run-gtk-tests: Try to find the build directory like in
        build-gtkdoc, until webkit-build-directory --configuration gets fixed.

2011-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add a way to skip unit tests in the bots
        https://bugs.webkit.org/show_bug.cgi?id=72879

        Reviewed by Philippe Normand.

        Rewrite the script in python to make it easier for everybody to
        change it and add support for skipping tests.

        * Scripts/run-gtk-tests:

2011-11-21  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Add more appcache functions to ewk_settings.
        https://bugs.webkit.org/show_bug.cgi?id=72143

        Reviewed by Kenneth Rohde Christiansen.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::setAppCacheMaximumSize): Use the right
        function, this is not related to the memory cache, but rather to the
        appcache.

2011-11-18  Adam Roben  <aroben@apple.com>

        Make NRWT consider all lines of output from parse-malloc-history, not just the first

        Fixes <http://webkit.org/b/72652> REGRESSION (NRWT): NRWT always reports "1 unique leaks
        found" even when there are more than 1 unique leaks

        Reviewed by Darin Adler.

        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        (LeakDetector.count_total_bytes_and_unique_leaks): Pass re.MULTILINE to re.findall so that
        "^" will be considered to match the beginning of any line, not only the beginning of the
        string.

        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py:
        (LeakDetectorTest.test_count_total_bytes_and_unique_leaks): Added a second callstack to the
        fake output and updated expectations to match.

2011-11-21  Andras Becsi  <andras.becsi@nokia.com>

        [Qt] Clean up MiniBrowser project file after recent changes
        https://bugs.webkit.org/show_bug.cgi?id=72869

        Reviewed by Simon Hausmann.

        Remove nonexistent files from OTHER_FILES after our touch and desktop webviews were merged.

        * MiniBrowser/qt/MiniBrowser.pro:

2011-11-21  Dominic Mazzoni  <dmazzoni@google.com>

        Accessibility: Multiselect list boxes need to report the active option in addition to which items are selected.
        https://bugs.webkit.org/show_bug.cgi?id=72479

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getIsSelectedOptionActiveCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::isSelectedOptionActiveGetterCallback):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isSelectedOptionActive):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isSelectedOptionActive):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::isSelectedOptionActive):

2011-11-21  Takashi Toyoshima  <toyoshim@chromium.org>

        Use Host().port_factory instead of webkitpy.layout_tests.port.factory.
        https://bugs.webkit.org/show_bug.cgi?id=72859

        Reviewed by Eric Seidel.
        
        * Scripts/new-run-webkit-websocketserver:

2011-11-20  Shinya Kawanaka  <shinyak@google.com>

        [Chromium] Layout test does not return correct misspelling positions if there are multiple misspelled words.
        https://bugs.webkit.org/show_bug.cgi?id=72655

        Reviewed by Hajime Morita.

        Fixed the calculation of offset.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::finishLastTextCheck):

2011-11-20  Ojan Vafai  <ojan@chromium.org>

        Change the final place where we use version 3 of the results json output
        https://bugs.webkit.org/show_bug.cgi?id=72838

        Reviewed by Adam Barth.

        This converts the json from being a flat map of test name --> results
        to being hierarchical by directory. This will make the json files 
        considerably smaller.

        Also cleaned up some functions that were returning/checking boolean values
        that were always True.

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2011-11-20  Ojan Vafai  <ojan@chromium.org>

        Include the master name when querying the test results server.
        This will soon be required since leaving the master name out mean
        that multiple files could match the query.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2011-11-19  Ojan Vafai  <ojan@chromium.org>

        Fix jsonp callback code to add the callback if json content
        is not jsonp.
        * TestResultServer/handlers/testfilehandler.py:

2011-11-19  Alice Boxhall  <aboxhall@chromium.org>

        Modify dashboard_base.js to optionally accept version 4 results json.

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (ADD_RESULTS):
        (flattenTrie):
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (testFlattenTrie):

2011-11-19  Ojan Vafai  <ojan@chromium.org>

        Stop storing results files as jsonp in the test results server
        https://bugs.webkit.org/show_bug.cgi?id=72814

        Reviewed by Adam Barth.

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2011-11-19  Ojan Vafai  <ojan@chromium.org>

        Remove the dependence on jsonp from more of new-run-webkit-tests and the test results server
        https://bugs.webkit.org/show_bug.cgi?id=72813

        Reviewed by Adam Barth.

        Once this lands, we can start storing pure json in the test results server and then
        we can delete the code with all the FIXMEs added here.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        Only add jsonp for full_results.json.
        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:
        Accept pure json uploads.
        * TestResultServer/static-dashboards/dashboard_base.js:
        (appendJSONScriptElementFor):
        Use the callback parameter so that the server can start returning pure json if it's left out.

2011-11-19  Ojan Vafai  <ojan@chromium.org>

        Allow json NRWT downloads to be pure json and not jsonp
        https://bugs.webkit.org/show_bug.cgi?id=72809

        Reviewed by Adam Barth.

        I'm moving the server to storing and serving up raw json instead of jsonp.
        You can still get the jsonp by passing a "callback" parameter, but there's no
        need for run-webkit-tests to get jsonp when all it wants is the raw json.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        Make the wrapper stripping only happen if the json is actually wrapped.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-11-18  Daniel Bates  <dbates@rim.com>

        Add CMake build infrastructure for the BlackBerry port
        https://bugs.webkit.org/show_bug.cgi?id=72768

        Reviewed by Antonio Gomes.

        Add optional --blackberry command line argument to build-webkit to build the
        BlackBerry port.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        (argumentsForConfiguration):
        (builtDylibPathForName):
        (determineIsQt):
        (isBlackBerry): Added.
        (determineIsBlackBerry): Added.
        (blackberryTargetArchitecture): Added.
        (isAppleWebKit):

2011-11-18  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r100835.
        http://trac.webkit.org/changeset/100835
        https://bugs.webkit.org/show_bug.cgi?id=72778

        Broke some page scale tests

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::scalePageBy):

2011-11-18  Adam Barth  <abarth@webkit.org>

        Prepare to move manual-tests out of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=72782

        Reviewed by Eric Seidel.

        Update this file to refer to the new location of ManualTests.

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

2011-11-18  James Robinson  <jamesr@chromium.org>

        [chromium] Set min/max page scale factors when calling eventSender.scalePageBy to avoid clamping
        https://bugs.webkit.org/show_bug.cgi?id=72778

        Reviewed by Kenneth Russell.

        Set the min/max page scale clamps when a test calls eventSender.scalePageBy() so that the scale isn't clamped.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::scalePageBy):

2011-11-18  Scott Graham  <scottmg@chromium.org>

        IDL changes for gamepad support
        https://bugs.webkit.org/show_bug.cgi?id=71753

        Reviewed by Adam Barth.

        Runtime enable gamepad in chromium test shell.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2011-10-27  Darin Fisher  <darin@chromium.org>

        [chromium] Improve fullscreen API
        https://bugs.webkit.org/show_bug.cgi?id=70477

        Reviewed by Adam Barth.

        Implement enter/exitFullScreen.  The implementation is asynchronous,
        via postDelayedTask, to simulate how the browser actually behaves.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::enterFullScreen):
        (WebViewHost::exitFullScreen):
        (WebViewHost::setAddressBarURL):
        (WebViewHost::enterFullScreenNow):
        (WebViewHost::exitFullScreenNow):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-11-18  Adam Roben  <aroben@apple.com>

        Ignore an ANGLE leak that is not WebKit's fault

        * Scripts/old-run-webkit-tests:
        (countAndPrintLeaks):
        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        (LeakDetector._callstacks_to_exclude_from_leaks):
        Added ScanFromString to the call stacks to exclude on all OS versions.

2011-11-18  Adam Roben  <aroben@apple.com>

        Ignore another Lion-specific leak that is not WebKit's fault

        * Scripts/old-run-webkit-tests:
        (countAndPrintLeaks):
        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        (LeakDetector._callstacks_to_exclude_from_leaks):
        Added SecTransformExecute to the call stacks to exclude.

2011-11-18  Yuta Kitamura  <yutak@chromium.org>

        [Qt] Enable WebSocket hybi tests
        https://bugs.webkit.org/show_bug.cgi?id=72687

        Reviewed by Simon Hausmann.

        Let LayoutTestControllerQt be able to switch WebSocket protocols via overridePreference().

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference):

2011-11-18  Sergio Villar Senin  <svillar@igalia.com>

        [GTK][WK2] Invalid TestNetscapePlugin path when using new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=72707

        Reviewed by Philippe Normand.

        Make new-run-webkit-tests use the right path to locate the test
        plugin used by WebKitTestRunner.

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2011-11-18  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] WTR and InjectedBundle should not link statically against JSC/WTF
        https://bugs.webkit.org/show_bug.cgi?id=72697

        Reviewed by Kenneth Rohde Christiansen.

        * Tools.pro: Make WTR linux only for the moment.
        * WebKitTestRunner/InjectedBundle/Target.pri: Remove static jsc/wtf linkage.
        * WebKitTestRunner/Target.pri: Ditto.
        * qmake/mkspecs/features/default_post.prf: Don't build the main webkit sources
        with ELF visibility on Linux. Instead we're temporarily using an LD version script.

2011-11-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Change default size of the MiniBrowser

        Reviewed by Simon Hausmann.

        As we lay out desktop pages using the width of 980, change our default
        size to 980x735 so that we are not scaling down by default.

        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):

2011-11-17  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Clean up the use of DATA_DIR in the buildsystem
        https://bugs.webkit.org/show_bug.cgi?id=72681

        Reviewed by Daniel Bates.

        Instead of adding -DDATA_DIR in all scopes, only define it in
        WebCore/PlatformEFL.cmake, as WebCore is the only place that uses
        it.

        We can then define DATA_DIR to the generated theme directory for
        EWebLauncher, since it's what we want here.

        * CMakeListsEfl.txt:

2011-11-17  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Move platform includes last in DRT's include directories.
        https://bugs.webkit.org/show_bug.cgi?id=72684

        Reviewed by Daniel Bates.

        This is the first step in fixing the build when a platform include (in
        this case, Valgrind 3.7.0 ships its config.h) and the wrong config.h
        is included instead of WebKit's.

        * DumpRenderTree/efl/CMakeLists.txt:

2011-11-17  Ryosuke Niwa  <rniwa@webkit.org>

        fuzzy_match doesn't recognize "Dan B" or "hyatt"
        https://bugs.webkit.org/show_bug.cgi?id=72636

        Reviewed by Eric Seidel.

        Make contributors_by_fuzz_match search string in shorthand names of contributors such as "Ryosuke N"
        and user names of email addreses such as rniwa in rniwa@webkit.org.

        Also import legacy contributor names and mispell lists from Eric's script on the bug 26533 as a test.

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

2011-11-17  Eric Seidel  <eric@webkit.org>

        Remove support for running check-webkit-style w/o a webkit checkout
        https://bugs.webkit.org/show_bug.cgi?id=72678

        Reviewed by Adam Barth.

        After talking to Dave Levin we've decided to remove this
        code.  I know of no users of check-webkit-style w/o a webkit checkout
        and this needlessly adds complexity.

        * Scripts/webkitpy/style/main.py:

2011-11-17  Eric Seidel  <eric@webkit.org>

        Remove more direct uses of os.path
        https://bugs.webkit.org/show_bug.cgi?id=72677

        Reviewed by Adam Barth.

        Remove more uses of os.path, including refactoring
        CommitterValidator to use a Host object instead of
        manual hacks to emulate what SCM and FileSystem provide.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/config/committervalidator.py:
        * Scripts/webkitpy/common/config/committervalidator_unittest.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
         - Turns out none of our unittests actually looked at this path.
           now I've made it be a valid path.
        * Scripts/webkitpy/tool/bot/feeders.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2011-11-17  Eric Seidel  <eric@webkit.org>

        Teach TextFileReader about FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=72673

        Reviewed by Adam Barth.

        Unfortunately TextFileReader doesn't use FileSystem
        everywhere yet, so we can't move the unittests to
        using MockFileSystem, but we're close.

        * Scripts/webkitpy/style/filereader.py:
        * Scripts/webkitpy/style/filereader_unittest.py:
        * Scripts/webkitpy/style/main.py:

2011-11-17  Eric Seidel  <eric@webkit.org>

        Give check-webkit-style a Host
        https://bugs.webkit.org/show_bug.cgi?id=72670

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/scm/detection.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
         - We don't run these unittests, but this one was looking for the wrong exception.
        * Scripts/webkitpy/style/main.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
         - This was create a new scm object even though it already had one?

2011-11-17  Eric Seidel  <eric@webkit.org>

        Move check-webkit-style change_directory code to more modern mocks
        https://bugs.webkit.org/show_bug.cgi?id=72664

        Reviewed by Adam Barth.

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/style/main.py:
        * Scripts/webkitpy/style/main_unittest.py:

2011-11-17  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] enable ref tests
        https://bugs.webkit.org/show_bug.cgi?id=72601

        Re-enable ref tests. Run the driver under evenly numbered display if performing
        pixel tests or under oddly numbered display otherwise. This prevents the ref tests
        being run in an already used Xvfb instance if pixel tests are disabled.

        Reviewed by Tony Chang.

        * Scripts/webkitpy/layout_tests/port/gtk.py: Also set Xvfb variable to None
        after the process is killed

2011-11-17  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Make check-webkit-style accept xxx_p.h as a primary header for xxx.cpp for Qt's sake
        https://bugs.webkit.org/show_bug.cgi?id=72620

        Reviewed by David Levin.

        Qt's convention of keeping private (but exposed) API suffixed by "_p.h" but not
        adding the suffix the cpp file. One example of false positive
        https://bugs.webkit.org/show_bug.cgi?id=72319#c12.

        * Scripts/webkitpy/style/checkers/cpp.py: accept headers ending with _p as primary if its
        basename contains the cpp's basename.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-11-17  Eric Seidel  <eric@webkit.org>

        Move check-webkit-style's guts into webkitpy/style/main.py
        https://bugs.webkit.org/show_bug.cgi?id=72657

        Reviewed by Adam Barth.

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/style/main.py:

2011-11-17  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests is locale dependent
        https://bugs.webkit.org/show_bug.cgi?id=68691

        Reviewed by Adam Barth.

        Make NRWT use a clean environment, just like ORWT did.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/efl.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2011-11-17  Dirk Pranke  <dpranke@chromium.org>

        Chromium Mac 10.5 CG dbg bots are failing to run webkit_gpu_tests
        https://bugs.webkit.org/show_bug.cgi?id=72615

        Reviewed by James Robinson.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-11-17  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Layer violation: qt_runtime.cpp accesses QWebElement and QTDRTNode
        https://bugs.webkit.org/show_bug.cgi?id=72595

        Reviewed by Noam Rosenthal.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree): Use new initialize() function to
        ensure the registration of the DRTNode JS bindings.
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::LayoutTestController): Remove unnecessary explicit qt meta type
        registration of QWebElement (now done implicitly through QWebPage ->
        QtWebElementRunTime::initialize code path)

2011-11-17  Adam Roben  <aroben@apple.com>

        Fix a crash-inducing typo I introduced in r100648

        Fixes <http://webkit.org/b/72642> REGRESSION (r100648): NRWT crashes on Chromium when
        handling a crashing test

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.run_test): Get the driver name from the port.

        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.test_crashed_process_name): Simulate a crash and check that we got the
        right crashed process name.

2011-11-17  Adam Roben  <aroben@apple.com>

        Fix NRWT's parsing of the number of excluded leaks

        Fixes <http://webkit.org/b/72635> NRWT crashes when parsing leaks files from which certain
        leaks were excluded

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        (LeakDetector._parse_leaks_output): Extract just the number of excluded leaks from the
        regular expression match, not the entire matched string.

        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py:
        (LeakDetectorTest): Added some example output that shows how things look when leaks are
        excluded.
        (LeakDetectorTest.test_parse_leaks_output): Test that we parse the number of exclusions
        correctly.

2011-11-17  Adam Roben  <aroben@apple.com>

        Make NRWT find crash logs for the crashed process, which may not necessarily be the driver process

        Fixes <http://webkit.org/b/72526> REGRESSION (NRWT): WebKitTestRunner crash log gets saved
        when web process crashes, but WebProcess crash log should get saved instead

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result): Simplified a little to share more code between the case where we
        crashed when running the test and where we crashed when checking the expected rendering for
        a reftest. Changed to pass the crashed process name down to write_crash_report.
        (TestResultWriter.write_crash_report): Added crashed_process_name parameter, which we pass
        along to CrashLogs.find_newest_log rather than always using the driver name.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.run_test): Pass the driver name as the name of the crashed process if we
        crashed.

        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestInstance.__init__): Initialize new web_process_crash attribute.
        (unit_test_list): Added new web-process-crash-with-stderr test, which is used by the new
        test this patch adds.
        (TestDriver.run_test): Pass a crashed process name to DriverOutput based on whether the test
        specifies that the driver crashed or the web process crashed.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_web_process_crash_log): Added. Similar to test_crash_log, but uses a test for
        which we pretend the web process crashed rather than the driver process.

        (MainTest.test_run_singly_actually_runs_tests):
        (MainTest.test_unexpected_failures):
        (EndToEndTest.test_end_to_end):
        Updated magic numbers to account for new unexpected failing test added to unit_test_list.

2011-11-17  Tony Chang  <tony@chromium.org>

        [chromium] stop spamming features warning on every build
        https://bugs.webkit.org/show_bug.cgi?id=72629

        Reviewed by Ojan Vafai.

        We toggle $blobSupport on if $mediaStreamSupport is on.  Since
        $mediaStreamSupport is on by default for chromium, make the default
        for $blobSupport also on.

        * Scripts/build-webkit:

2011-11-17  Adam Roben  <aroben@apple.com>

        Remove extra quoting of call stacks and types passed to run-leaks by NRWT

        Fixes <http://webkit.org/b/72623> REGRESSION (NRWT): run-webkit-tests --leaks reports leaks
        that are supposed to be ignored

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        (LeakDetector._leaks_args): Removed extra quoting of call stacks and types. Quoting is only
        required when passing arguments via the shell (which we aren't doing here). It is not
        required by Perl's option-parsing code (as the comment I removed mistakenly claimed).

        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py:
        (LeakDetectorTest.test_leaks_args): Updated expectations.

2011-11-17  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, run-bindings-tests fix after r91028.

        * Scripts/run-bindings-tests: Use scm.detection module.

2011-11-17  Jochen Eisinger  <jochen@chromium.org>

        Silence a warning about control reaching the end of a non-void function
        https://bugs.webkit.org/show_bug.cgi?id=72616

        Reviewed by Tony Gentilcore.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::verticalScrollbar):

2011-11-17  Adam Roben  <aroben@apple.com>

        Ignore some leaks in frameworks we link against on Lion

        Fixes <http://webkit.org/b/72609> Lion Leaks bot complains about a bunch of leaks that
        aren't WebKit's fault

        Reviewed by Antti Koivisto.

        * Scripts/old-run-webkit-tests:
        (countAndPrintLeaks):
        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        (LeakDetector._callstacks_to_exclude_from_leaks):
        Added some call stacks to exclude on Lion that represent leaks in lower-level frameworks.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.is_lion): Added.

        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacPortTest.test_is_version_methods): Added tests for the is_leopard/is_snowleopard/is_lion
        methods.

2011-11-17  Philippe Normand  <pnormand@igalia.com>

        [GTK] Disable ref tests
        https://bugs.webkit.org/show_bug.cgi?id=72599

        Reviewed by Xan Lopez.

        * Scripts/webkitpy/layout_tests/port/gtk.py: Enforce disabled ref
        tests to avoid massive flakiness.

2011-11-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Move WebKit2 C++ APIs to private API and build QML extension plugin on top of that

        A new extension object has been added to QQuickWebView (the same approach should be used
        for other API classes that need experimental APIs). The QML extension mechanism is then
        built on top of the experimental object.

        https://bugs.webkit.org/show_bug.cgi?id=72522

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::webView):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/UrlLoader.cpp:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/qtwebkit-private.prf: Added.
        * qmake/mkspecs/features/qtwebkit.prf:

2011-11-17  Adam Barth  <abarth@webkit.org>

        Move test_results_uploader.py out of layout_package
        https://bugs.webkit.org/show_bug.cgi?id=72590

        Reviewed by Eric Seidel.

        Most of the lines of code in this file are wrong, but I've restrained
        myself and only changed a few of them to generalized this class to the
        common package.

        This is part of a series of patches to remove layout_package.

        * Scripts/webkitpy/common/net/file_uploader.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_results_uploader.py.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results_uploader.py: Removed.

2011-11-17  Adam Barth  <abarth@webkit.org>

        Unreviewed. Fix style nits in printing.py.

        * Scripts/webkitpy/layout_tests/views/printing.py:

2011-11-17  Adam Barth  <abarth@webkit.org>

        Minor style nits in run_webkit_tests.py
        https://bugs.webkit.org/show_bug.cgi?id=72583

        Reviewed by Eric Seidel.

        This patch just fixes some minor style issues as I work my way back
        into this code.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-11-17  Adam Barth  <abarth@webkit.org>

        Move test_result_writer out of layout_package
        https://bugs.webkit.org/show_bug.cgi?id=72586

        Rubber-stamped by Eric Seidel.

        This is part of a series of patches to remove layout_package.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py.
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py: Removed.
        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-11-17  Adam Barth  <abarth@webkit.org>

        svn-apply shouldn't magically move files into Source anymore
        https://bugs.webkit.org/show_bug.cgi?id=72579

        Reviewed by Eric Seidel.

        The Source directory has existed for long enough that we don't need
        svn-apply to magically re-write old-style patches anymore.

        * Scripts/VCSUtils.pm:
        (parseGitDiffHeader):
        (parseSvnDiffHeader):

2011-11-16  Ryosuke Niwa  <rniwa@webkit.org>

        Add a list of contribution areas
        https://bugs.webkit.org/show_bug.cgi?id=72566

        Reviewed by Eric Seidel.

        Added ContributionAreas class.

        * Scripts/webkitpy/common/config/contributionareas.py: Added.
        * Scripts/webkitpy/common/config/contributionareas_unittest.py: Added.

2011-11-16  Ryosuke Niwa  <rniwa@webkit.org>

        Refactor ChangeLogTest.test_parse_reviewer_text
        https://bugs.webkit.org/show_bug.cgi?id=72572

        Reviewed by Eric Seidel.

        Refactored the test code by introduing two helper functions.

        * Scripts/webkitpy/common/checkout/changelog_unittest.py:

2011-11-16  Eric Seidel  <eric@webkit.org>

        Add SCMDetector object to make scm detection mockable
        https://bugs.webkit.org/show_bug.cgi?id=72247

        Reviewed by Adam Barth.

        I think SCM detection may eventually be rolled into Checkout,
        but this patch at least makes it possible to mock code-paths
        which rely on scm detection.
        In the process of replacing callers of these free-functions
        I found that one of the functions was no longer used,
        and that one of the callers could instead just use the SCM
        object it already had access to through port.host.scm().
        I also discovered that I was not calling Host._initialize_scm()
        and thus host.scm() was always returning None!

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/checkout/deps.py:
        * Scripts/webkitpy/common/checkout/scm/__init__.py:
        * Scripts/webkitpy/common/checkout/scm/detection.py:
        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/common/host_mock.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:

2011-11-16  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        The C++ standard library interferes with Objective-C exceptions when built with -fno-exceptions.
        Apply the workaround that we use in other projects to WebKitTestRunner.

        * WebKitTestRunner/Configurations/Base.xcconfig: Use the prefix header for all targets.
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig: Ditto.
        * WebKitTestRunner/WebKitTestRunnerPrefix.h: Work around the C++ standard library obnoxiousness.

2011-11-16  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Fix build after WTR AX support
        https://bugs.webkit.org/show_bug.cgi?id=72560

        Reviewed by Geoffrey Garen.

        * WebKitTestRunner/InjectedBundle/DerivedSources.pri:
        * WebKitTestRunner/InjectedBundle/Target.pri:

2011-11-16  Tony Chang  <tony@chromium.org>

        repurpose the flexbox bot for grid layout
        https://bugs.webkit.org/show_bug.cgi?id=72557

        Reviewed by Ryosuke Niwa.

        Since new flexbox is enabled everywhere, we don't need this bot
        anymore.  However, work on grid layout has begun, so we can use this
        bot to compile with ENABLE_CSS_GRID_LAYOUT.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Just rename
        the bot on the waterfall, I will change the slave config to enable
        the compile flag and tests.

2011-11-11  Adrienne Walker  <enne@google.com>

        [chromium] Expose mock scrollbars to window.internals
        https://bugs.webkit.org/show_bug.cgi?id=72195

        Reviewed by James Robinson.

        Because mock scrollbars are a global setting, reset between runs.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):

2011-11-16  James Robinson  <jamesr@chromium.org>

        [chromium] Enable video and canvas 2d compositing triggers by default for layout tests in the compositing directory
        https://bugs.webkit.org/show_bug.cgi?id=72562

        Reviewed by Dirk Pranke.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):

2011-11-16  Tony Chang  <tony@chromium.org>

        [NRWT] speculative fix for multiple subprocess test on cygwin
        https://bugs.webkit.org/show_bug.cgi?id=72518

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium.py: cygwin probably
            tries to emulate posix fd behavior.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2011-11-16  Dirk Pranke  <dpranke@chromium.org>

        Revert r100509; change was committed twice (first time as r100491).
        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-11-16  Dirk Pranke  <dpranke@chromium.org>

        Run a dummy test in the gpu configurations if there's nothing to do.
        https://bugs.webkit.org/show_bug.cgi?id=72498

        Reviewed by James Robinson.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-11-16  Ryosuke Niwa  <rniwa@webkit.org>

        contributors_by_fuzzy_match is super slow
        https://bugs.webkit.org/show_bug.cgi?id=72540

        Reviewed by Eric Seidel.

        Make contributors_by_name do case insensitive search using a dictionary.

        Also call contributors_by_name first in contributors_by_fuzzy_match now that it's fast
        because that's the most common case.

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

2011-11-16  David Levin  <levin@chromium.org>

        check-webkit-style should recognize functions even if they have OVERRIDE after them.
        https://bugs.webkit.org/show_bug.cgi?id=72515

        Reviewed by Adam Barth.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-11-16  Tony Chang  <tony@chromium.org>

        [NRWT] refactor drivers to require pixel_tests param
        https://bugs.webkit.org/show_bug.cgi?id=72517

        Reviewed by Ojan Vafai.

        No tests, just a refactoring.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-11-16  Dirk Pranke  <dpranke@chromium.org>

        Run a dummy test in the gpu configurations if there's nothing to do.
        https://bugs.webkit.org/show_bug.cgi?id=72498

        Reviewed by James Robinson.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-11-16  Chris Fleizach  <cfleizach@apple.com>

        WebKitTestRunner needs to support accessibility-related DRT APIs
        https://bugs.webkit.org/show_bug.cgi?id=42131

        Reviewed by Beth Dakin.

        Port the AX code in DRT to WKTestRunner by using IDL.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (horizontalScrollbarCallback):
        (verticalScrollbarCallback):
        (AccessibilityUIElement::horizontalScrollbar):
        (AccessibilityUIElement::verticalScrollbar):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::horizontalScrollbar):
        (AccessibilityUIElement::verticalScrollbar):
        * WebKitTestRunner/DerivedSources.make:
        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp: Added.
        (WTR::AccessibilityController::create):
        (WTR::AccessibilityController::AccessibilityController):
        (WTR::AccessibilityController::~AccessibilityController):
        (WTR::AccessibilityController::makeWindowObject):
        (WTR::AccessibilityController::wrapperClass):
        (WTR::AccessibilityController::rootElement):
        (WTR::AccessibilityController::focusedElement):
        (WTR::AccessibilityController::elementAtPoint):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h: Added.
        (WTR::AccessibilityController::logFocusEvents):
        (WTR::AccessibilityController::logValueChangeEvents):
        (WTR::AccessibilityController::logScrollingStartEvents):
        (WTR::AccessibilityController::logAccessibilityEvents):
        (WTR::AccessibilityController::addNotificationListener):
        (WTR::AccessibilityController::notificationReceived):
        (WTR::AccessibilityController::resetToConsistentState):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.cpp: Added.
        (WTR::AccessibilityTextMarker::create):
        (WTR::AccessibilityTextMarker::AccessibilityTextMarker):
        (WTR::AccessibilityTextMarker::~AccessibilityTextMarker):
        (WTR::AccessibilityTextMarker::platformTextMarker):
        (WTR::AccessibilityTextMarker::wrapperClass):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.h: Added.
        (WTR::AccessibilityTextMarker::isEqual):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.cpp: Added.
        (WTR::AccessibilityTextMarkerRange::create):
        (WTR::AccessibilityTextMarkerRange::AccessibilityTextMarkerRange):
        (WTR::AccessibilityTextMarkerRange::~AccessibilityTextMarkerRange):
        (WTR::AccessibilityTextMarkerRange::platformTextMarkerRange):
        (WTR::AccessibilityTextMarkerRange::wrapperClass):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.h: Added.
        (WTR::AccessibilityTextMarkerRange::isEqual):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp: Added.
        (WTR::AccessibilityUIElement::create):
        (WTR::AccessibilityUIElement::wrapperClass):
        (WTR::AccessibilityUIElement::isValid):
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::~AccessibilityUIElement):
        (WTR::AccessibilityUIElement::isEqual):
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::childAtIndex):
        (WTR::AccessibilityUIElement::indexOfChild):
        (WTR::AccessibilityUIElement::childrenCount):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::takeFocus):
        (WTR::AccessibilityUIElement::takeSelection):
        (WTR::AccessibilityUIElement::addSelection):
        (WTR::AccessibilityUIElement::removeSelection):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::attributesOfLinkedUIElements):
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
        (WTR::AccessibilityUIElement::attributesOfDocumentLinks):
        (WTR::AccessibilityUIElement::attributesOfChildren):
        (WTR::AccessibilityUIElement::parameterizedAttributeNames):
        (WTR::AccessibilityUIElement::increment):
        (WTR::AccessibilityUIElement::decrement):
        (WTR::AccessibilityUIElement::showMenu):
        (WTR::AccessibilityUIElement::press):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::uiElementAttributeValue):
        (WTR::AccessibilityUIElement::numberAttributeValue):
        (WTR::AccessibilityUIElement::boolAttributeValue):
        (WTR::AccessibilityUIElement::isAttributeSupported):
        (WTR::AccessibilityUIElement::isAttributeSettable):
        (WTR::AccessibilityUIElement::isActionSupported):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::subrole):
        (WTR::AccessibilityUIElement::roleDescription):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::accessibilityValue):
        (WTR::AccessibilityUIElement::helpText):
        (WTR::AccessibilityUIElement::orientation):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::intValue):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::valueDescription):
        (WTR::AccessibilityUIElement::insertionPointLineNumber):
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::isEnabled):
        (WTR::AccessibilityUIElement::isRequired):
        (WTR::AccessibilityUIElement::isFocused):
        (WTR::AccessibilityUIElement::isFocusable):
        (WTR::AccessibilityUIElement::isSelected):
        (WTR::AccessibilityUIElement::isSelectable):
        (WTR::AccessibilityUIElement::isMultiSelectable):
        (WTR::AccessibilityUIElement::setSelectedChild):
        (WTR::AccessibilityUIElement::selectedChildrenCount):
        (WTR::AccessibilityUIElement::selectedChildAtIndex):
        (WTR::AccessibilityUIElement::isExpanded):
        (WTR::AccessibilityUIElement::isChecked):
        (WTR::AccessibilityUIElement::isVisible):
        (WTR::AccessibilityUIElement::isOffScreen):
        (WTR::AccessibilityUIElement::isCollapsed):
        (WTR::AccessibilityUIElement::isIgnored):
        (WTR::AccessibilityUIElement::hasPopup):
        (WTR::AccessibilityUIElement::hierarchicalLevel):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::url):
        (WTR::AccessibilityUIElement::speak):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfColumns):
        (WTR::AccessibilityUIElement::attributesOfRows):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
        (WTR::AccessibilityUIElement::attributesOfHeader):
        (WTR::AccessibilityUIElement::indexInTable):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::rowCount):
        (WTR::AccessibilityUIElement::columnCount):
        (WTR::AccessibilityUIElement::selectedRowAtIndex):
        (WTR::AccessibilityUIElement::disclosedByRow):
        (WTR::AccessibilityUIElement::disclosedRowAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::ariaIsGrabbed):
        (WTR::AccessibilityUIElement::ariaDropEffects):
        (WTR::AccessibilityUIElement::lineForIndex):
        (WTR::AccessibilityUIElement::rangeForLine):
        (WTR::AccessibilityUIElement::boundsForRange):
        (WTR::AccessibilityUIElement::setSelectedTextRange):
        (WTR::AccessibilityUIElement::stringForRange):
        (WTR::AccessibilityUIElement::attributedStringForRange):
        (WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::horizontalScrollbar):
        (WTR::AccessibilityUIElement::verticalScrollbar):
        (WTR::AccessibilityUIElement::addNotificationListener):
        (WTR::AccessibilityUIElement::removeNotificationListener):
        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
        (WTR::AccessibilityUIElement::textMarkerRangeLength):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::textMarkerForPoint):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h: Added.
        (WTR::AccessibilityUIElement::platformUIElement):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityTextMarker.idl: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityTextMarkerRange.idl: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::accessibilityController):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/InjectedBundle/gtk/LayoutTestControllerGtk.cpp:
        (WTR::LayoutTestController::platformName):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityTextMarkerMac.mm: Added.
        (WTR::AccessibilityTextMarker::isEqual):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityTextMarkerRangeMac.mm: Added.
        (WTR::AccessibilityTextMarkerRange::isEqual):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: Added.
        (+[NSString stringWithJSStringRef:]):
        (-[NSString createJSStringRef]):
        (-[AccessibilityNotificationHandler initWithPlatformElement:]):
        (-[AccessibilityNotificationHandler dealloc]):
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        (-[AccessibilityNotificationHandler setCallback:]):
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::~AccessibilityUIElement):
        (WTR::AccessibilityUIElement::isEqual):
        (WTR::descriptionOfValue):
        (WTR::attributesOfElement):
        (WTR::concatenateAttributeAndValue):
        (WTR::convertNSArrayToVector):
        (WTR::descriptionOfElements):
        (WTR::AccessibilityUIElement::getLinkedUIElements):
        (WTR::AccessibilityUIElement::getDocumentLinks):
        (WTR::AccessibilityUIElement::getChildren):
        (WTR::AccessibilityUIElement::getChildrenWithRange):
        (WTR::AccessibilityUIElement::childrenCount):
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::indexOfChild):
        (WTR::AccessibilityUIElement::childAtIndex):
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::disclosedRowAtIndex):
        (WTR::AccessibilityUIElement::selectedChildAtIndex):
        (WTR::AccessibilityUIElement::selectedChildrenCount):
        (WTR::AccessibilityUIElement::selectedRowAtIndex):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::disclosedByRow):
        (WTR::AccessibilityUIElement::attributesOfLinkedUIElements):
        (WTR::AccessibilityUIElement::attributesOfDocumentLinks):
        (WTR::AccessibilityUIElement::attributesOfChildren):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::numberAttributeValue):
        (WTR::AccessibilityUIElement::uiElementAttributeValue):
        (WTR::AccessibilityUIElement::boolAttributeValue):
        (WTR::AccessibilityUIElement::isAttributeSettable):
        (WTR::AccessibilityUIElement::isAttributeSupported):
        (WTR::AccessibilityUIElement::parameterizedAttributeNames):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::subrole):
        (WTR::AccessibilityUIElement::roleDescription):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::orientation):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::helpText):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):
        (WTR::AccessibilityUIElement::intValue):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::valueDescription):
        (WTR::AccessibilityUIElement::insertionPointLineNumber):
        (WTR::AccessibilityUIElement::isActionSupported):
        (WTR::AccessibilityUIElement::isEnabled):
        (WTR::AccessibilityUIElement::isRequired):
        (WTR::AccessibilityUIElement::isFocused):
        (WTR::AccessibilityUIElement::isSelected):
        (WTR::AccessibilityUIElement::isExpanded):
        (WTR::AccessibilityUIElement::isChecked):
        (WTR::AccessibilityUIElement::hierarchicalLevel):
        (WTR::AccessibilityUIElement::speak):
        (WTR::AccessibilityUIElement::ariaIsGrabbed):
        (WTR::AccessibilityUIElement::ariaDropEffects):
        (WTR::AccessibilityUIElement::lineForIndex):
        (WTR::AccessibilityUIElement::rangeForLine):
        (WTR::AccessibilityUIElement::boundsForRange):
        (WTR::AccessibilityUIElement::stringForRange):
        (WTR::AccessibilityUIElement::attributedStringForRange):
        (WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfColumns):
        (WTR::AccessibilityUIElement::attributesOfRows):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
        (WTR::AccessibilityUIElement::attributesOfHeader):
        (WTR::AccessibilityUIElement::rowCount):
        (WTR::AccessibilityUIElement::columnCount):
        (WTR::AccessibilityUIElement::indexInTable):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::horizontalScrollbar):
        (WTR::AccessibilityUIElement::verticalScrollbar):
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::setSelectedTextRange):
        (WTR::AccessibilityUIElement::increment):
        (WTR::AccessibilityUIElement::decrement):
        (WTR::AccessibilityUIElement::showMenu):
        (WTR::AccessibilityUIElement::press):
        (WTR::AccessibilityUIElement::setSelectedChild):
        (WTR::AccessibilityUIElement::accessibilityValue):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::url):
        (WTR::AccessibilityUIElement::addNotificationListener):
        (WTR::AccessibilityUIElement::removeNotificationListener):
        (WTR::AccessibilityUIElement::isFocusable):
        (WTR::AccessibilityUIElement::isSelectable):
        (WTR::AccessibilityUIElement::isMultiSelectable):
        (WTR::AccessibilityUIElement::isVisible):
        (WTR::AccessibilityUIElement::isOffScreen):
        (WTR::AccessibilityUIElement::isCollapsed):
        (WTR::AccessibilityUIElement::isIgnored):
        (WTR::AccessibilityUIElement::hasPopup):
        (WTR::AccessibilityUIElement::takeFocus):
        (WTR::AccessibilityUIElement::takeSelection):
        (WTR::AccessibilityUIElement::addSelection):
        (WTR::AccessibilityUIElement::removeSelection):
        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
        (WTR::AccessibilityUIElement::textMarkerRangeLength):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::textMarkerForPoint):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        * WebKitTestRunner/InjectedBundle/mac/LayoutTestControllerMac.mm:
        (WTR::LayoutTestController::platformName):
        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp:
        (WTR::LayoutTestController::platformName):
        * WebKitTestRunner/InjectedBundle/win/LayoutTestControllerWin.cpp:
        (WTR::LayoutTestController::platformName):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:

2011-11-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix use of config.tests

        We were checking @buildArgs to determine if the optional argument was
        passed or not, but this is not the right way to do that in Perl. The
        right way is to not use a prototype for the function, and to pass
        the list as a reference (to avoid list expansion). That way we can
        check the number of arguments, and choose the right code path based
        on that.

        We were also missing a default-value of 0 for any feature that's not
        set in features.prf.

        Reviewed by Kenneth Rohde Christiansen.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (qtFeatureDefaults):
        (buildQMakeProject):

2011-11-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Prospective fix for broken plugin tests

        Don't hide symbols for the NPAPI test plugin

        Rubber-stamped by Andreas Kling.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2011-11-16  Adam Roben  <aroben@apple.com>

        Move filenames/line numbers off to the right edge in Leaks Viewer

        Fixes <http://webkit.org/b/72510> Callstacks in Leaks Viewer are a little hard to read
        because filenames/line numbers are right next to function names

        Reviewed by Andreas Kling.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParserImpl.js:
        (LeaksParserImpl.prototype._createNode): Separate the filename and line number out from the
        function name. Use the filename as the profile node's URL (we don't have enough info to
        compute a real URL currently) and the line number as the profile node's line number so the
        Inspector code will put them on the right side of the callstack graph.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/WebInspectorShims.js:
        (WebInspector.displayNameForURL): Stubbed this out. For now we don't ever get any URLs
        passed here, just filenames.

        (WebInspector.linkifyURLAsNode):
        (WebInspector.linkifyResourceAsNode):
        Copied and slightly modified from inspector.js.

2011-11-16  Adam Roben  <aroben@apple.com>

        Make Leaks Viewer load builds from the new Lion Leaks bot

        Fixes <http://webkit.org/b/72507> REGRESSION: Leaks Viewer no longer shows recent leaky builds

        Reviewed by Andreas Kling.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.js:
        (LeaksViewer._displayURLPrompt): Use the Lion Leaks bot instead of the nonexistent
        SnowLeopard one.

2011-11-16  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Clean up the offline apps-related functions in ewk_settings.
        https://bugs.webkit.org/show_bug.cgi?id=72132

        Reviewed by Kenneth Rohde Christiansen.

        `ewk_settings_cache' and `ewk_view_setting_cache' are too common
        prefixes for code that is related only to the HTML5 app cache
        features.

        Use `ewk_settings_application_cache' and
        `ewk_view_setting_application_cache' instead.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):

2011-11-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Centralize hide_symbols and ensure all libs are built with symbol visibility & bsymbolic_functions

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/default_post.prf: Place the common hide_symbols and -Bsymbolic-functions
        magic here where we handle all TEMPLATE = lib .pro files (except plugins).
        * WebKitTestRunner/InjectedBundle/Target.pri: Mark the injected bundle as plugin, which also
        removes the .so.0.0.0 and just produces .so.

2011-11-16  Peter Beverloo  <peter@chromium.org>

        Explicitly include unistd.h in TestNetscapePlugIn
        https://bugs.webkit.org/show_bug.cgi?id=72385

        This is needed for the sleep() call in the indicateTestFailure method,
        which seems to be implicitly available for other platforms. This is not
        the case on Android.

        Reviewed by Steve Block.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:

2011-11-16  Peter Beverloo  <peter@chromium.org>

        [Chromium] Update the Android NDK version being pulled in by update-webkit-chromium
        https://bugs.webkit.org/show_bug.cgi?id=72384

        Update to Android NDK r7, which was released last Friday. This adds
        support for RTTI and the -mimplicit-it gcc flag, which are required to
        respectively build ICU and Skia.

        Reviewed by Steve Block.

        * Scripts/update-webkit-chromium:
        * Scripts/webkitdirs.pm:
        (buildChromiumMakefile):

2011-11-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed, rolling out r100266.
        http://trac.webkit.org/changeset/100266

        Broke WTR.

        * qmake/mkspecs/features/default_post.prf:

2011-11-16  Eric Seidel  <eric@webkit.org>

        check-webkit-style broken by r99773: "Could not determine the port"
        https://bugs.webkit.org/show_bug.cgi?id=72275

        Reviewed by Adam Barth.

        I will continue engaging hacks, until windows improves.

        * Scripts/webkitpy/common/host.py:
         - Host uses self.executive instead of self._executive like Port does.
         - I wanted to test this, but it mutates global state -- thus impossible to unittest at this time.

2011-11-16  Eric Seidel  <eric@webkit.org>

        check-webkit-style broken by r99773: "Could not determine the port"
        https://bugs.webkit.org/show_bug.cgi?id=72275

        Reviewed by Adam Barth.

        Engage windows hacks harder.

        This is a speculative fix for ChromiumWin.  We're now
        creating an SCM object much earlier, so we need to
        engage our "awesome" windows hacks earlier.

        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

2011-11-15  Darin Adler  <darin@apple.com>

        DRT's uiElementAttributeValueCallback function is leaky
        https://bugs.webkit.org/show_bug.cgi?id=72453

        Reviewed by Dan Bernstein.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (uiElementAttributeValueCallback): Use JSRetainPtr and don't leak.

2011-11-14  Ryosuke Niwa  <rniwa@webkit.org>

        Implement edit-distance based reviewer recognition algorithm
        https://bugs.webkit.org/show_bug.cgi?id=72351

        Reviewed by Eric Seidel.

        Implement an algorithm to recognize reviewer's name based on its edit distance (or more precisely
        its Levenshtein distance) to each reviewer's full name, first, last and middle names, and IRC nicknames.
        Furthermore, we cap the maximum edit distance at len(name) - 1 to avoid matching a bogus string like
        "build fix" to a reviewer's name (e.g. with with edit distance 9).

        This algorithm is implemented in CommitterList.contributors_by_fuzzy_match. The function to compute
        the edit distance is implemented in edit_distance.py.

        Also moved _has_valid_reviewer from ValidateReviewer to ChangeLogEntry because we can no longer rely
        on the presence of ChangeLogEntry.reviewer() to verify that reviewer string is nicely formatted.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/committers_unittest.py:
        * Scripts/webkitpy/common/editdistance.py: Added.
        * Scripts/webkitpy/common/editdistance_unittest.py: Added.
        * Scripts/webkitpy/tool/steps/validatereviewer.py:
        * Scripts/webkitpy/tool/steps/validatereviewer_unittest.py: Removed.

2011-11-15  Tony Chang  <tony@chromium.org>

        Skip a failing webkitpy test on cygwin.

        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2011-11-15  Sam Weinig  <sam@webkit.org>

        TestWebKitAPI should not put its resources in the root products directory
        https://bugs.webkit.org/show_bug.cgi?id=72446

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Change the copy resources phase to place the resources in a TestWebKitAPI.resources
        directory.

        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextLoadDelegateTest.mm:
        (TEST_F):
        * TestWebKitAPI/Tests/mac/DOMRangeOfString.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorOnBack.mm:
        (TestWebKitAPI::DeviceScaleFactorOnBack::url):
        * TestWebKitAPI/Tests/mac/DynamicDeviceScaleFactor.mm:
        (TestWebKitAPI::DynamicDeviceScaleFactor::url):
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::createURLForResource):
        Update calls to retrieve files from the bundle to look in the newly
        created subdirectory.

2011-11-15  Tony Chang  <tony@chromium.org>

        Fix a webkitpy test caused by renaming the accelerate-video flag in r100355.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-11-15  Tony Chang  <tony@chromium.org>

        Unreviewed, fix test-webkitpy tests.  Move the check for image results
        earlier.

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-11-15  James Robinson  <jamesr@chromium.org>

        [chromium] Fix flag name in chromium DumpRenderTree for accelerated video trigger
        https://bugs.webkit.org/show_bug.cgi?id=72444

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:

2011-11-15  Tony Chang  <tony@chromium.org>

        Unreviewed, better fix for ref tests failures on SL Intel bot.
        Revert the previous change and return None if pixel results from
        either the test page or the expected page is missing.

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-11-15  James Robinson  <jamesr@chromium.org>

        [chromium] Merge chromium-gpu layout test configurations into non-gpu versions
        https://bugs.webkit.org/show_bug.cgi?id=72402

        Reviewed by Dirk Pranke.

        Allows the compositing layout tests to run in the normal layout test run. This sets the default compositing
        triggers in DumpRenderTree to more closely match what we use in Chromium. There are two exceptions, canvas 2d
        and video (media) are still controlled by an explicit trigger so that they are true when platform=chromium-gpu
        and false otherwise, so that we can run the same set of tests in both configurations. This isn't necessary for
        the normal compositing triggers since we currently run the compositing tests in only one configuration - with
        compositing enabled.

        Since the compositing tests are currently marked WONTFIX SKIP on non-GPU platforms in test_expectations.txt this
        patch should not impact any tests.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setAcceleratedCompositingForVideoEnabled):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:

2011-11-15  Tony Chang  <tony@chromium.org>

        Unreviewed, try to fix ref tests failures on SL Intel bot.
        It looks like ImageDiff isn't returning an image diff.

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:

2011-11-15  Tony Chang  <tony@chromium.org>

        Unreviewed fix of ref-tests on GTK+.
        If a driver is never started, _xvfb_process is never set.

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2011-11-14  Tony Chang  <tony@chromium.org>

        [NRWT] Reftests should run even when pixel tests are disabled.
        https://bugs.webkit.org/show_bug.cgi?id=60605

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py: Only skip ref tests if --no-ref-tests is passed.
            Also add an assert to make sure we get image hashes back when running ref tests.
        * Scripts/webkitpy/layout_tests/controllers/worker.py: Use Driver.has_crashed() instead of poll().
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py: Use DriverProxy.
        * Scripts/webkitpy/layout_tests/port/driver.py: Add DriverProxy which does the work
            of starting a pixel driver if needed.  It handles the logic of sending the test
            to the correct driver.  Also renamed Driver.poll() to Driver.has_crashed().
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/test.py: Switch to using DriverProxy so we get test coverage.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: Add --no-ref-tests.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py: Test --no-ref-tests.

2011-11-15  David Kilzer  <ddkilzer@apple.com>

        Don't use File::Slurp for run-leaks unit tests
        <http://webkit.org/b/72356>

        Reviewed by Daniel Bates.

        * Scripts/webkitperl/run-leaks_unittest/RunLeaks.pm: Added.
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v1.0.pl:
        Extracted common package logic into RunLeaks.pm.  Fixed call to
        RunLeaks::parseLeaksOutput().
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-new.pl: Ditto.
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-old.pl: Ditto.

2011-11-15  Peter Kasting  <pkasting@google.com>

        Handle svn 1.7 when detecting whether a directory is in an svn checkout.
        https://bugs.webkit.org/show_bug.cgi?id=72349

        Reviewed by Adam Roben.

        * Scripts/VCSUtils.pm:
        (isSVNDirectory):

2011-11-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Centralize hide_symbols and ensure all libs are built with symbol visibility & bsymbolic_functions

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/default_post.prf: Place the common hide_symbols and -Bsymbolic-functions
        magic here where we handle all TEMPLATE = lib .pro files.

2011-11-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Unreviewed prospective --minimal build fix.

        * DumpRenderTree/qt/DumpRenderTree.pro: Avoid USE_SYSTEM_MALLOC=0
        and USE_SYSTEM_MALLOC=1 appearing in DEFINES at the same time.

2011-11-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Unreviewed --minimal build fix.

        * Scripts/build-webkit: Add to DEFINES+= from @options only if there is
        a define. The "coverage" option doesn't have one, causing "DEFINES+= =0"
        to make moc's preprocessor abort.

2011-11-14  Raphael Kubo da Costa  <kubo@profusion.mobi>

        build-webkit: Accept --cmakearg to pass additional arguments to CMake.
        https://bugs.webkit.org/show_bug.cgi?id=72156

        Reviewed by Daniel Bates.

        Similar to --makearg and --qmakearg, --cmakearg lets one pass
        additional arguments to CMake (eg. --cmakearg="-DFOO=bar").

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2011-11-14  Ryosuke Niwa  <rniwa@webkit.org>

        Improve ChangeLogEntry's reviewer parsing algorithm part 2
        https://bugs.webkit.org/show_bug.cgi?id=72340

        Reviewed by Eric Seidel.

        This patch improves the recognition of NOBODY, wrestler names, and parenthesized clauses,
        and prepares ChangeLogEntry to support edit-distance-based reviewer-name recognition.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:

2011-11-14  Eric Seidel  <eric@webkit.org>

        check-webkit-style broken by r99773: "Could not determine the port"
        https://bugs.webkit.org/show_bug.cgi?id=72275

        Reviewed by Adam Barth.

        The TestExpectationsChecker was using a generic try/except block
        which caught all exceptions, so we didn't notice that failing
        to pass a Host to PortFactory was causing an exception in port instantiation.
        I've factored out the "lookup the port" logic into a separate function
        which I've now unittested.  This should fix the bug and prevent
        others like it from occuring the the future.

        * Scripts/webkitpy/style/checkers/test_expectations.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:

2011-11-14  Julien Chaffraix  <jchaffraix@webkit.org>

        Add --css-grid-layout to build-webkit and the build systems
        https://bugs.webkit.org/show_bug.cgi?id=72320

        Reviewed by Ojan Vafai.

        * Scripts/build-webkit:
        Added the option.

2011-11-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100192.
        http://trac.webkit.org/changeset/100192
        https://bugs.webkit.org/show_bug.cgi?id=72328

        Caused infinite tests to fail (Requested by abarth on
        #webkit).

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:

2011-11-14  Tony Chang  <tony@chromium.org>

        Remove the CSS3_FLEXBOX compile time flag and enable on all ports
        https://bugs.webkit.org/show_bug.cgi?id=72196

        Reviewed by Ojan Vafai.

        * Scripts/build-webkit:

2011-11-14  John Yani  <vanuan@gmail.com>

        new-run-webkit-tests should not be locale dependent https://bugs.webkit.org/show_bug.cgi?id=68691
        Override LOCALE to en_US.

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/port/base.py:

2011-11-14  Julien Chaffraix  <jchaffraix@webkit.org>

        [Chromium] build-webkit silently drops the features flags
        https://bugs.webkit.org/show_bug.cgi?id=72293

        Reviewed by Tony Chang.

        Chromium still ignores @features but now we give a warning!

        * Scripts/build-webkit: Check if one of the features is different
        from the default and print a warning in this case.

2011-11-14  David Kilzer  <ddkilzer@apple.com>

        run-leaks does not work on Lion?
        <http://webkit.org/b/71059>
        <rdar://problem/10428527>

        Reviewed by Adam Roben.

        The output of leaks(1) changed again in Lion to move the
        "leaks Report Version: 2.0" line from the first line of the
        output to just above the "Process " lines that run-leaks is
        interested in parsing.  This required using a more generic
        algorithm to find the start of the "Process " lines.

        * Scripts/run-leaks:
        (parseLeaksOutput): Make the code to skip headers more generic.
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v1.0.pl: Added.
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-new.pl: Added.
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-old.pl: Added.

2011-11-14  Lei Zhang  <thestig@chromium.org>

        Missing include in Tools/DumpRenderTree/chromium/AccessibilityUIElement.h:
        https://bugs.webkit.org/show_bug.cgi?id=72088

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/AccessibilityUIElement.h:

2011-11-14  Andrew Scherkus  <scherkus@chromium.org>

        [Chromium] Skip media layout tests on chromium-gpu-cg-mac-leopard platform
        https://bugs.webkit.org/show_bug.cgi?id=72147

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-11-14  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Move the QtWebKit module file to match the layout of Qt's mkspecs

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/modules/qt_webkit.pri: Renamed from Tools/qmake/qt_webkit.pri.

2011-11-14  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Disable plugins on X11 for WK2

        Reviewed by Kenneth Rohde Christiansen.

        Currently plugins are in-process and they crash in the likely case of
        a plugin installation that uses Qt 4, which beautifully clashes with the
        Qt 5 based QtWebProcess.

        * qmake/mkspecs/features/features.prf:

2011-11-14  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Add support for config tests for Qt 5

        This allows us to build and run configure-tests at build
        time to determine if a given platform feature is available.

        Reviewed by Simon Hausmann.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (qtFeatureDefaults):
        * qmake/configure.pro: Added.
        * qmake/mkspecs/features/features.prf:
        * qmake/sync.profile: Added.

2011-11-11  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Remove the QStyle dependency in Qt's mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=67773

        This refactoring splits up RenderThemeQt with two
        subclasses, a QStyle-backed one, and a Mobile version
        that uses the old mobile theme for now.

        QStyle availability is detected at compile time, and
        its use is determined by the QT_WEBKIT_USE_MOBILE_THEME
        environment variable.

        Reviewed by Simon Hausmann.

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * qmake/mkspecs/features/features.prf: HAVE_QSTYLE detection,
        based on availability of QtWidgets.
        * qmake/mkspecs/features/webcore.prf: cleanup.

2011-11-14  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed, rolling out r100116.
        http://trac.webkit.org/changeset/100116

        r100104 was rolled out, so no longer needed

        * Scripts/run-bindings-tests:

2011-11-14  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed, rolling out r100104.
        http://trac.webkit.org/changeset/100104
        https://bugs.webkit.org/show_bug.cgi?id=72247

        broke windows builds

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/checkout/deps.py:
        * Scripts/webkitpy/common/checkout/scm/__init__.py:
        * Scripts/webkitpy/common/checkout/scm/detection.py:
        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/common/host_mock.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:

2011-11-14  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, build fix after r100104. run-binding-tests broke.

        * Scripts/run-bindings-tests: Explicitely use scm.detection.

2011-11-13  Eric Seidel  <eric@webkit.org>

        Add SCMDetector object to make scm detection mockable
        https://bugs.webkit.org/show_bug.cgi?id=72247

        Reviewed by Adam Barth.

        I think SCM detection may eventually be rolled into Checkout,
        but this patch at least makes it possible to mock code-paths
        which rely on scm detection.
        In the process of replacing callers of these free-functions
        I found that one of the functions was no longer used,
        and that one of the callers could instead just use the SCM
        object it already had access to through port.host.scm().
        I also discovered that I was not calling Host._initialize_scm()
        and thus host.scm() was always returning None!

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/checkout/deps.py:
        * Scripts/webkitpy/common/checkout/scm/__init__.py:
        * Scripts/webkitpy/common/checkout/scm/detection.py:
        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/common/host_mock.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:

2011-11-13  Gavin Peters  <gavinp@chromium.org>

        command line control of webcore log channels in chromium DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=72126
        
        The option --webcore-log-channels=<foo>,<bar>,<quux> is the same as
        what chromium takes.

        Reviewed by Kent Tamura.

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

2011-11-12  Ariya Hidayat  <ariya@sencha.com>

        [Qt] Fix minor config typo in the build tool documentation
        https://bugs.webkit.org/show_bug.cgi?id=72194

        Reviewed by Andreas Kling.

        * qmake/README:

2011-11-11  Stephen Chenney  <schenney@chromium.org>

        [Chromium] DRT does not have LayoutTestController.pageSizeAndMarginsInPixels
        https://bugs.webkit.org/show_bug.cgi?id=49257

        Adds the remaining missing layout test functionality for printing.

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): Add bindings for new JS methods
        (parsePageNumber): Method to parse JS arguments for a page number
        (parsePageNumberSizeMargins): Method to parse JS arguments for page size and margins
        (LayoutTestController::pageSizeAndMarginsInPixels): Get the page size and margins for a given page.
        (LayoutTestController::isPageBoxVisible): get the visibility status for printing
        (LayoutTestController::pageProperty): get a specific CSS property when in printing mode
        * DumpRenderTree/chromium/LayoutTestController.h: Add declarations for new methods

2011-11-11  Darin Adler  <darin@apple.com>

        Remove all releaseRef implementations except for RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=71423

        Reviewed by Julien Chaffraix.

        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp:
        (createXMLStringFromWebArchiveData): Use leakRef instead of releaseRef.

2011-11-11  Ryosuke Niwa  <rniwa@webkit.org>

        Make ChangeLogEntry's reviewer parsing algorithm support last 4 WebCore change logs
        https://bugs.webkit.org/show_bug.cgi?id=72090

        Reviewed by Eric Seidel.

        Significantly improve ChangeLogEntry's reviewer parsing algorithm. This version can successfully parse
        ChangeLog, ChangeLog-2011-10-19, ChangeLog-2011-06-04, ChangeLog-2011-02-16, and ChangeLog-2010-12-06.

        yay! r100002.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:

2011-11-11  Tony Chang  <tony@chromium.org>

        Remove --force from gclient sync.  The bots seem to have made it past
        the update step.

        * Scripts/update-webkit:

2011-11-11  Tony Chang  <tony@chromium.org>

        Add --force to gclient sync. Once the cq bots cycle, we can remove
        this since it slows down the normal sync.

        * Scripts/update-webkit:

2011-11-11  Marc-Antoine Ruel  <maruel@chromium.org>

        When --force is used, also use --reset
        https://bugs.webkit.org/show_bug.cgi?id=72129

        Reviewed by Dimitri Glazkov.

        * Scripts/update-webkit-chromium:

2011-11-11  Tony Chang  <tony@chromium.org>

        allow two chromium drivers to run at the same time in NRWT
        https://bugs.webkit.org/show_bug.cgi?id=72067

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium.py: close_fds=True on
            posix prevents the subprocesses from sharing the same fd for stdin.
            Sharing the same fd prevents us from closing the files unless all references
            to the fd are closed.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py: In addition
            to adding a test for this, speed up a test (from 3sec to 0) by fixing
            the timeout override. It looks like it regressed in r95875.

2011-11-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r99964.
        http://trac.webkit.org/changeset/99964
        https://bugs.webkit.org/show_bug.cgi?id=72124

        Broke too many Qt tests (Requested by tronical_ on #webkit).

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/webcore.prf:

2011-11-11  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Remove the QStyle dependency in Qt's mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=67773

        This refactoring splits up RenderThemeQt with two
        subclasses, a QStyle-backed one, and a Mobile version
        that uses the old mobile theme for now.

        QStyle availability is detected at compile time, and
        its use is determined by the QT_WEBKIT_USE_MOBILE_THEME
        environment variable.

        Reviewed by Simon Hausmann.

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * qmake/mkspecs/features/features.prf: HAVE_QSTYLE detection,
        based on availability of QtWidgets.
        * qmake/mkspecs/features/webcore.prf: cleanup.

2011-11-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Add missing include to PlatformWebViewQt

        Reviewed by Simon Hausmann.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:

2011-11-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix incremental builds on Windows after buildsystem refactor

        The qmake rules to ensure that we run make on the derived sources
        before running qmake on the target were inside a unix-scope, which
        resulted in flakey builds on Windows.

        We now generate a rule on all platforms that ensures that "make qmake"
        will always run make on the derived sources. In addition, on platforms
        that have GNU make (where "make incremental" does not run "make qmake",
        but only "make"), we add a similar rule that ensures that any time the
        target makefile is regenerated we first run qmake and make on the derived
        sources. This rule relies on GNU make's order-only-prerequisites to
        not trigger a qmake-run of the target every time we run make.

        https://bugs.webkit.org/show_bug.cgi?id=71778

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/functions.prf:

2011-11-11  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Remove QWebNavigationController
        https://bugs.webkit.org/show_bug.cgi?id=72113

        Reviewed by Andreas Kling.

        Adapt to the move of the QWebNavigationController functions/properties to
        QQuickWebView.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        * MiniBrowser/qt/qml/BrowserWindow.qml:

2011-11-11  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Build system tweak

        Reviewed by Tor Arne Vestbø.

        Be a good qmake citizen, return true from our linkStaticLibrary
        "test" function.

        * qmake/mkspecs/features/functions.prf:

2011-11-11  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Add support for QT += webkit-private

        Reviewed by Tor Arne Vestbø.

        * qmake/qt_webkit.pri: Declare private headers.

2011-11-11  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, build fix attempt after r99907. Since that revision
        GTK layout tests were not running at all...

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2011-11-10  Andrew Scherkus  <scherkus@chromium.org>

        [Chromium] only run media GPU layout tests on platforms supporting accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=72001

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-11-05  Filip Pizlo  <fpizlo@apple.com>

        bencher script should support remote benchmarking
        https://bugs.webkit.org/show_bug.cgi?id=71618

        Rubber-stamped by Geoff Garen.
        
        Added the following features:
        
        - Benchmark report tells you the hostname and machine model (according to
          'sysctl hw.model') of the machine you did the run on, and svn revision number
          (according to 'svn info') of the VMs you're testing.
        
        - The --remote option. You give this an ssh-style hostname (i.e. user@host is
          acceptable, in addition to just host, in which case your username is used)
          and it automatically packages the build directories of the VMs you're testing,
          sends them to the remote machine along with your copy of the bencher script
          and all of the options you passed.  This pretty much seamlessly allows you
          to run a set of benchmarks on any machine that is sufficiently compatible with
          yours (i.e. similar OS) and that has the appropriate ~/.bencher file, which
          must now include a tempPath setting that tells bencher where to put files
          when that machine is used as a slave in a remote benchmarking run.
          
        - Added yet another way of specifying which benchmarks to run. This was sort of
          necessary for --remote to work as expected. Previously, you either said what
          suites to exclude (for example --exclude-sunspider) or that you only wanted
          to run one suite to the exclusion of others (--sunspider-only). But it's
          often better to just be able to specify the list of suites you want. This is
          now supported. You can say, for example, --v8 --sunspider, which means, just
          run V8 and SunSpider. This is equivalent to saying --exclude-kraken, which is
          still supported.

        * Scripts/bencher:

2011-11-10  Tony Chang  <tony@chromium.org>

        Lazily start DRT instances in NRWT
        https://bugs.webkit.org/show_bug.cgi?id=72038

        Reviewed by Eric Seidel.

        Just a refactoring, no new tests.

        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-11-10  Ryosuke Niwa  <rniwa@webkit.org>

        ChangeLog mistakenly recognizes any string between '*' and ':' as touched files
        https://bugs.webkit.org/show_bug.cgi?id=72057

        Reviewed by Eric Seidel.

        Make the regular expression more explicit.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:

2011-11-10  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] X11 plugins need to be reworked for Qt5
        https://bugs.webkit.org/show_bug.cgi?id=70023

        Reviewed by Simon Hausmann.

        Rework our basic plugin support in a way that does
        not need a bridge between Qt and X. The solution is
        based on getting the content drawed by the plugin
        from the server as an image and creating a QImage
        from it.

        * qmake/mkspecs/features/features.prf: Enable X11
        plugins if Qt is built with the xcb-xlib backend.

2011-11-10  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix keyboard related layout tests after API refactoring

        Reviewed by Tor Arne Vestbø.

        Send key events to the handling page item, not the view.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::sendEvent):
        (WTR::PlatformWebView::postEvent):

2011-11-10  Alexandre Mazari  <amazari@igalia.com>

        [GTK] Make the ENABLE(FEATURE) macro work in DRT
        https://bugs.webkit.org/show_bug.cgi?id=71940

        Reviewed by Philippe Normand.

        * GNUmakefile.am:
        Add webcore_cppflags to Programs_DumpRenderTree_CPP so
        ENABLE_* variables are part of the environment.

2011-11-10  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix focus related layout tests after API refactoring

        Reviewed by Tor Arne Vestbø.

        Make sure the focus is set on the page now, not on the view
        (which doesn't actually handle the focus).

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::WrapperWindow):
        (WTR::WrapperWindow::handleStatusChanged):

2011-11-10  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Merge QTouchWebView and QDesktopWebView into one class
        https://bugs.webkit.org/show_bug.cgi?id=71355

        Reviewed by Kenneth Rohde Christiansen.

        Make MiniBrowser and WebKitTestRunner work again after the
        merge.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::webView):
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        * MiniBrowser/qt/main.cpp:
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/DesktopView.qml: Removed.
        * MiniBrowser/qt/qml/TouchView.qml: Removed.
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2011-11-10  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Change semantics of the haveQt() function to match API promises

        Having Qt 5 does not imply that we have Qt 4, from an API point of
        view, as a major version can in theory break BC/SC. Our minimum
        version of Qt 4 will always be the latest released version of Qt 4,
        so the only place we should use haveQt(4, x) is when checking for
        the minimum requirements.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/functions.prf:

2011-11-07  Kaustubh Atrawalkar  <kaustubh@motorola.com> and Sergio Villar Senin  <svillar@igalia.com>

        [WK2] [GTK] Implement a MouseDown/MouseUp/MouseMoveTo/MouseScrollBy/LeapForward functions for WebKit2 EventSender
        https://bugs.webkit.org/show_bug.cgi?id=69411

        Reviewed by Martin Robinson.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        use the EventSender instead of WebProcess Event Simulation.
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::WTREventQueueItem::WTREventQueueItem):
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::getMouseButtonModifiers):
        (WTR::eventSenderButtonToGDKButton):
        (WTR::EventSenderProxy::createMouseButtonEvent):
        (WTR::EventSenderProxy::updateClickCountForButton):
        (WTR::EventSenderProxy::replaySavedEvents):
        (WTR::EventSenderProxy::sendOrQueueEvent):
        (WTR::webkitModifiersToGDKModifiers):
        (WTR::getGDKKeySymForKeyRef):
        (WTR::EventSenderProxy::keyDown):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::leapForward):

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Enable exports and constructor functions in static libs

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/functions.prf: Use --whole-archive and their
        mac/win32-msvc equivalents when linking static libraries into a shared
        library or executable.

2011-11-09  Hayato Ito  <hayato@chromium.org>

        [NRWT] Make results.html aware of reference filename in reftests.
        https://bugs.webkit.org/show_bug.cgi?id=71574

        Reviewed by Ryosuke Niwa.

        If a reference filename is different from the default one, include that in result summary
        so results.html can link to the correct reference file.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:

2011-11-09  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Update project files and
        add LTC stubs for new methods.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::addChromeInputField):
        (LayoutTestController::removeChromeInputField):
        (LayoutTestController::focusWebView):
        (LayoutTestController::setBackingScaleFactor):
        * waf/build/settings.py:

2011-11-09  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Support XCode 4 when building deps.

        * wx/install-unix-extras:

2011-11-09  Eric Seidel  <eric@webkit.org>

        Remove the concept of platform-dependent unittests
        https://bugs.webkit.org/show_bug.cgi?id=71963

        Unreviewed.  Fix test-webkitpy on cygwin.

        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:

2011-11-09  Dana Jansens  <danakj@chromium.org>

        Add cc-bugs group to watch changes in chromium graphics
        https://bugs.webkit.org/show_bug.cgi?id=71690

        Reviewed by David Levin.

        * Scripts/webkitpy/common/config/committers.py: Make new Account superclass for non-contributor watch accounts
        * Scripts/webkitpy/common/config/committers_unittest.py: Test the Account superclass
        * Scripts/webkitpy/common/config/watchlist: Add cc-bugs@google.com to watch list
        * Scripts/webkitpy/common/watchlist/watchlistparser.py: Check for Accounts also, but require it to be the bugzilla email for any Account/Contributor/etc.

2011-11-09  Eric Seidel  <eric@webkit.org>

        Remove more platform-dependent unittests
        https://bugs.webkit.org/show_bug.cgi?id=71971

        Reviewed by Adam Barth.

        Tests which only run on a couple platforms will break.
        All tests should run on all platforms where possible.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:

2011-11-09  Ojan Vafai  <ojan@chromium.org>

        Merge in results to the test results server even if build numbers conflict
        https://bugs.webkit.org/show_bug.cgi?id=71967

        Reviewed by Tony Chang.

        This was initially meant to be a sanity check that we don't
        enter duplicate runs, but it turns out that we can reasonably get
        in these situations when a builder is clobbered (e.g. the build
        numbers start over again from 0).

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2011-11-09  Eric Seidel  <eric@webkit.org>

        Remove the concept of platform-dependent unittests
        https://bugs.webkit.org/show_bug.cgi?id=71963

        Reviewed by Adam Barth.

        These have been the source of never-ending sadness.
        We'd change behavior and forget to update results in
        some unittests because they were only run on certain platforms.
        This change removes a large source of these platform-dependent
        unittests, which was caused by the port_maker stuff.

        It's possible that this change will break test-webkitpy
        on some platforms, but that will be a one-time cost.
        I will fix the breakage by removing the platform-dependantness
        of any such broken tests.

        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/efl_unittest.py:
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:

2011-11-09  Eric Seidel  <eric@webkit.org>

        Make the Port object have a Host
        https://bugs.webkit.org/show_bug.cgi?id=71961

        Reviewed by Adam Barth.

        This has been a long time coming.
        Now that Port has a Host object, it's very easy
        to write unittests which use a properly mocked Port.
        Soon we will remove the executive, filesystem and user
        members of Port and get everything through the Host.

        Note how in many callsites we're actually removing
        explicit mocks, since we're now always going to get the
        correct Executive/User/FileSystem from the
        Host and callsites don't need to be careful to pass each one.

        This is prep-work for adding a new Environment member to
        Host and needing to be able to access the Environment
        member from Port functions w/o needing to pass an Environment
        object (or appropriate Mock) every place we create a Port object.
        Now that we have a single Host object to reach out through, its
        simple to add additional functionality (like Environment) while
        keeping our unittests properly mocked.

        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/port/apple.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/efl.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:

2011-11-09  Dominic Mazzoni  <dmazzoni@google.com>

        [Chromium] Implement AccessibilityUIElement::insertionPointLineNumberGetterCallback
        https://bugs.webkit.org/show_bug.cgi?id=71561

        Reviewed by Dimitri Glazkov.

        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::insertionPointLineNumberGetterCallback):

2011-11-09  Benjamin Poulain  <bpoulain@apple.com>

        Implement dumpProgressFinishedCallback() for Mac layoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=66772

        Reviewed by Simon Fraser.

        When dumpProgressFinishedCallback is enabled, DumpRenderTree should output
        "postProgressFinishedNotification" on FrameLoaderClient::postProgressFinishedNotification().

        On Mac, the FrameLoaderClient post a notification. This patch add handling for this notification
        in the FrameLoadDelegate and print the output in response to the notification.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate init]):
        (-[FrameLoadDelegate dealloc]):
        (-[FrameLoadDelegate webViewProgressFinishedNotification:]):

2011-11-09  Philippe Normand  <pnormand@igalia.com>

        [GTK][DRT] window internals object is not reset after each test
        https://bugs.webkit.org/show_bug.cgi?id=71890

        Reviewed by Martin Robinson.

        Call WebCoreTestSupport::resetInternalsObject without going
        through DumpRenderTreeSupport.

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

2011-11-09  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::uiElementAttributeValue):

2011-11-09  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * DumpRenderTree/AccessibilityUIElement.h:

2011-11-09  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed build fix.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::makeJSAccessibilityUIElement):
        A bad merge added this check that is making the bots sad.

2011-11-09  Chris Fleizach  <cfleizach@apple.com>

        AX: crash when accessing selectedTab in a tab list
        https://bugs.webkit.org/show_bug.cgi?id=70938

        Reviewed by Beth Dakin.

        Add the ability to retrieve an element through an arbitrary attribute.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (uiElementAttributeValueCallback):
        (AccessibilityUIElement::uiElementAttributeValue):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::uiElementAttributeValue):

2011-11-09  Andy Wingo  <wingo@igalia.com>

        Add webkitdirs.pm:getArchitecture implementation for GTK
        https://bugs.webkit.org/show_bug.cgi?id=71370

        Reviewed by Xan Lopez.

        * Scripts/webkitdirs.pm (determineArchitecture): Add an
        implementation for ports using autotools, so that a vanilla
        `run-javascriptcore-tests --gtk' invocation doesn't pass --32-bit
        to build-jsc on x86-64 machines.

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed, rolling out r99707.
        http://trac.webkit.org/changeset/99707

        Re-enable until we can disable it together with tests in one
        shot.

        * qmake/mkspecs/features/features.prf:

2011-11-09  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Disable use of QtUiTools if the library/module is not found

        We rely on the lookup order of prf files to inject our own uitools.prf
        that will verify that QtUiTools is in fact present before allowing the
        CONFIG += uitools to have any effect.

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * qmake/mkspecs/features/uitools.prf: Added.

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed, rolling out r99701.
        http://trac.webkit.org/changeset/99701

        Breaks Qt mac build

        * qmake/mkspecs/features/functions.prf:

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Prospective build fix for Win32/Mac with xmlpatterns

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/features.prf: Disable XSLT support initially.
        We default to XSLT support if qxmlpatterns is available. However qxmlpatterns
        is not up to the task of full XSLT support, so we should disable it.

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Enable exports and constructor functions in static libs

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/functions.prf: Use --whole-archive and their
        mac/win32-msvc equivalents when linking static libraries into a shared
        library or executable.

2011-11-09  Philippe Normand  <pnormand@igalia.com>

        [GTK][DRT] window internals object is not reset after each test
        https://bugs.webkit.org/show_bug.cgi?id=71890

        Reviewed by Xan Lopez.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest): reset the Internals object after each test.

2011-11-09  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Detect presence of QtUiTools and enable it only when available

        The disable_uitools option was a workaround for missing detection.

        Reviewed by Simon Hausmann.

        * QtTestBrowser/QtTestBrowser.pro:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:

2011-11-09  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't override config for the build_pass of debug_and_release

        Qmake will parse the profile once for each configuration (debug and
        release), with the build_pass option set. In that situation we don't
        want to override what qmake is setting explicitly, otherwise the
        debug-step will end up hitting all the release-scopes.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_pre.prf:

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Unbreak the Qt build (copy & paste mistake - oops)

        * qmake/mkspecs/features/functions.prf:

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Centralize duplicated code for linking the static libs

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/functions.prf:
        * qmake/mkspecs/features/javascriptcore.prf:
        * qmake/mkspecs/features/webcore.prf:
        * qmake/mkspecs/features/webkit2.prf:

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Build system cleanup
        https://bugs.webkit.org/show_bug.cgi?id=71815

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/InjectedBundle/Target.pri: We don't need to link against the webkit2
        static library.
        * qmake/mkspecs/features/javascriptcore.prf: The wtf sources pull in a glib dependency
        (ownPtr functions for glib types). Propagate that to everyone using javascriptcore.

2011-11-08  Hayato Ito  <hayato@chromium.org>

        [NRWT] Make single_test_runner aware of reference filename of test_input.
        https://bugs.webkit.org/show_bug.cgi?id=71567

        Reviewed by Ryosuke Niwa.

        Make single_test_runner honor a reference filename of given test_input so that
        we can use any file as reference html, instead of depending on implicit naming convention.
        The typical use case is to support w3c reftests.

        No tests since no functional changes until there is a client.
        Test should be easily written with future clients.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        * Scripts/webkitpy/layout_tests/models/test_input.py:

2011-11-08  Lucas Forschler  <lforschler@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=71839
        Update the leaks bot OS to Lion.
        Update the config.json to reflect the update.

        Reviewed by Stephanie Lewis.

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

2011-11-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r99626.
        http://trac.webkit.org/changeset/99626
        https://bugs.webkit.org/show_bug.cgi?id=71866

        "C++ exceptions cannot be disabled without influencing the
        Objective-C exceptions" (Requested by benjaminp on #webkit).

        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:

2011-11-08  Benjamin Poulain  <bpoulain@apple.com>

        [Mac] Disable C++ exceptions from DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=71834

        Reviewed by Darin Adler.

        DumpRenderTree Mac does not handle C++ exceptions. When such exception
        happens, it tends to cause the AutoReleasePool stack to be corrupted,
        which leads to crashes long after the exception was raised.

        This patch disabled C++ exceptions in order to catch the problems where
        they happen when a C++ exception is raised.

        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:

2011-11-08  Julien Chaffraix  <jchaffraix@webkit.org>

        Moved myself to the reviewer list (yay!).

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

2011-11-08  Zeno Albisser  <zeno@webkit.org>

        Added myself as a committer.

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

2011-11-08  Andy Wingo  <wingo@igalia.com>

        Skip some ECMAScript tests that fail on Linux in some time zones.
        https://bugs.webkit.org/show_bug.cgi?id=71371

        Reviewed by Martin Robinson.

        * Scripts/run-javascriptcore-tests: Skip some more tests.

2011-11-08  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed trivial fix after build system refactoring.

        * Scripts/run-qtwebkit-tests: Fix path of QtWebProcess for QML tests.

2011-11-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't set OBJECTS_DIR and DEFINES in default_pre

        If a pro file needs to access the OBJECTS_DIR it should use the
        form ${QMAKE_VAR_OBJECTS_DIR} to ensure the value is evaluated
        after defaults_post has been processed.

        Setting DEFINES in defaults_pre is also bad, as any DEFINES=foo on
        the command line will override whatever we set in defaults_pre.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:

2011-11-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Prevent duplicated sources in SOURCES/OBJECTIVE_SOURCES

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:

2011-11-07  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] MiniBrowser should use urlFromUserInput()
        https://bugs.webkit.org/show_bug.cgi?id=71680

        Use urlFromUserInput() / QUrl::fromUserInput() to automatically
        complete urls in MiniBrowser.

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::load):
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/utils.cpp:
        (Utils::urlFromUserInput):
        * MiniBrowser/qt/utils.h:
        (Utils::Utils):

2011-11-07  Yuqiang Xian  <yuqiang.xian@intel.com>

        Added myself as a committer.

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

2011-11-07  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed webkitpy test fix after r99512.

        * Scripts/webkitpy/tool/commands/suggestnominations_unittest.py:
        Xianzhu Wang is now a committer, so we can't nominate him as a committer anymore.

2011-11-07  Xianzhu Wang  <wangxianzhu@chromium.org>

        Added myself as a committer.

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

2011-11-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r99470.
        http://trac.webkit.org/changeset/99470
        https://bugs.webkit.org/show_bug.cgi?id=71740

        "Broke test-webkitpy" (Requested by eseidel2 on #webkit).

        * Scripts/webkitpy/common/config/watchlist:

2011-11-07  Tony Chang  <tony@chromium.org>

        [chromium] update flakiness dashboard to reflect current bots

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/builders.js: Remove (deps) debug
            bots and merged linux debug bots into a single bot.
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (setupExpectationsTest):

2011-11-07  Dana Jansens  <danakj@chromium.org>

        Add cc-bugs group to watch changes in chromium graphics
        https://bugs.webkit.org/show_bug.cgi?id=71690

        Reviewed by James Robinson.

        * Scripts/webkitpy/common/config/watchlist:

2011-11-07  Balazs Ankes  <Ankes.Balazs@stud.u-szeged.hu>

        [NRWT] Parsing of test_expectations.txt should be agnostic to newline at end
        https://bugs.webkit.org/show_bug.cgi?id=70912

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/port/webkit.py: Add newline at the end of test_expectations.txt.
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py: Make up the test_test_expectations method for the updated webkit.py.

2011-11-07  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests: support --repeat-each feature from old-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=62199

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-11-07  Fady Samuel  <fsamuel@chromium.org>

        [Chromium] Rename WebView::scalePage to WebView::setPageScaleFactor to match WebCore
        https://bugs.webkit.org/show_bug.cgi?id=71485

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::scalePageBy):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):

2011-11-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Put the jsc binary in 'bin' instead of leaving it deep in the build tree

        Allows us to not package up the whole Source/JavaScriptCore directory for the
        buildbots.

        Reviewed-by Simon Hausmann.

        * BuildSlaveSupport/built-product-archive:
        * Scripts/webkitdirs.pm:
        (jscProductDir):

2011-11-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Ensure we always export symbols for the QtWebKit API when building WebKit

        Reviewed-by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:

2011-11-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Sanitize qmake paths correctly before comparing

        The qmake function toSanitizedPath had a bug causing empty paths on MinGW,
        which caused us to always generate derived webcore sources, but never build
        them. The bug has been fixed, and we now also sanitize paths for the injected
        bundle derived sources.

        Reviewed by Simon Hausmann.

        * WebKitTestRunner/InjectedBundle/DerivedSources.pri:
        * qmake/mkspecs/features/functions.prf:

2011-11-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Print right order for changing feature defines

        Reviewed by Simon Hausmann.

        * Scripts/webkitdirs.pm:
        (buildQMakeProject):

2011-11-06  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed trivial fix after build system refactoring.

        * Scripts/run-qtwebkit-tests: Fix qml_import_path.

2011-11-06  Eric Seidel  <eric@webkit.org>

        Clarify how the symbol and runtime-feature based test exclusion works and cleanup the code a bit
        https://bugs.webkit.org/show_bug.cgi?id=66078

        Unreviewed.  Add an assert about the type of "args"
        to our Executive Mocks and fix a piece of code
        from this patch which was hitting that assert
        when executing for real.

        * Scripts/webkitpy/common/system/executive_mock.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-11-06  Eric Seidel  <eric@webkit.org>

        Split chunk handling out of prepare_lists_and_print_output to make it more readable
        https://bugs.webkit.org/show_bug.cgi?id=71629

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2011-11-06  Eric Seidel  <eric@webkit.org>

        Clarify how the symbol and runtime-feature based test exclusion works and cleanup the code a bit
        https://bugs.webkit.org/show_bug.cgi?id=66078

        Reviewed by Adam Barth.

        The runtime feature detection was fixed to work in bug 64472.
        In this bug I moved the symbol-based feature detection from
        popen() to Executive.run_command and cleaned up the callers
        and unittests to make sure that we're correctly parsing the
        nm output correctly.  The old code happened to work even though
        the runtime-features path was using "str in list" and the
        symbol features path was using "str in str" and it just happened
        to do what we wanted to.  Now runtime features and symbol feature
        blacklists are computed separately (and with better documentation).

        This system remains confusing, partially because these are black-lists
        which are amended to whatever static blacklist may exist for the
        port as part of a Skipped list file.

        For example, notice how the runtime feature list only has directory
        blacklists for a couple features.  If all features are off,
        how do we skip enough tests with only 2 entries in the blacklist map?
        The answer is that Windows is the only port to use runtime feature
        detection, and the win/Skipped file turns off all the other features
        statically (like mathml, mhtml, wss, etc.) where as some other ports (like AppleMac)
        which use symbol-based feature detection turn of mathml, wcss, etc
        using the blacklists found in _missing_symbol_to_skipped_tests.

        I also noticed a couple places where we still referenced xhtmlmp
        even though support for such has been removed from WebKit.  Removed those.

        This should result in no functional change.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
         - Use self._filesystem instead of os.path
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-11-06  Dan Bernstein  <mitz@apple.com>

        Made show-pretty-diff work when the input path contains spaces.

        Reviewed by Anders Carlsson.

        * Scripts/show-pretty-diff:

2011-11-05  Daniel Cheng  <dcheng@chromium.org>

        [chromium] Use the security origin instead of the URL when checking notification permissions
        https://bugs.webkit.org/show_bug.cgi?id=71590

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::checkPermission):
        * DumpRenderTree/chromium/NotificationPresenter.h:

2011-11-05  Darin Adler  <darin@apple.com>

        Fix a small leak in Mac version of LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=71615

        Reviewed by Mark Rowe.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::applicationCacheDiskUsageForOrigin): Release the origin.
        (LayoutTestController::localStorageDiskUsageForOrigin): Ditto.

2011-11-04  Eric Seidel  <eric@webkit.org>

        Upgrade to the latest Mechanize
        https://bugs.webkit.org/show_bug.cgi?id=71594

        Reviewed by Adam Barth.

        I noticed our mechanize was somewhat out of date when removing Python 2.5 support.
        Mechanize is no longer two separate libraries, so importing it is much simpler.

        * Scripts/webkitpy/thirdparty/__init__.py:

2011-11-04  Stephen Chenney  <schenney@chromium.org>

        Crash in ScrollAnimator.cpp
        https://bugs.webkit.org/show_bug.cgi?id=69865

        The code in ScrollAnimator assumes that horizontal per-page mouse
        wheel events cannot happen, which is not true. This patch adds layout
        tests for all paging wheel event situations and fixes the broken
        horizontal case.

        Reviewed by Anders Carlsson

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::handleMouseWheel): Added the ability to specify that a
        mouse wheel event should be paging.

2011-11-04  Eric Seidel  <eric@webkit.org>

        Remove deprecated free functions in port.factory
        https://bugs.webkit.org/show_bug.cgi?id=71494

        Unreviewed.  Fix exception when running new-run-webkit-httpd.

        * Scripts/new-run-webkit-httpd:

2011-11-04  Adam Roben  <aroben@apple.com>

        Remove Leopard-specific code from build.webkit.org

        We don't have any Leopard bots anymore.

        Fixes <http://webkit.org/b/71583> build.webkit.org configuration contains obsolete Leopard code

        Reviewed by Mark Rowe.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Removed now-unused StartATSServer
        and StopATSServer steps.
        (unitTestsSupported): Removed check for mac-leopard.
        (TestFactory.__init__): Removed Leopard-specific steps.

2011-11-04  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests autoinstalls python-irclib even though it doesn't need to
        https://bugs.webkit.org/show_bug.cgi?id=71549

        Reviewed by Adam Barth.

        Several members of Host didn't really belong there
        and were instead specific to WebKitPatch, so I've moved
        them up onto that class.

        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/common/host_mock.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:

2011-11-04  Tony Chang  <tony@chromium.org>

        garden-o-matic: bring back party time!
        https://bugs.webkit.org/show_bug.cgi?id=71582

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html: Allow images from file:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/images/partytime.gif: Renamed from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/partytime.gif.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js: Add length() for UpdateTracker.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js: Plumb through length().
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js: Toggle partytime.gif via css class.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/onebar.css: Add css styling for partytime.

2011-11-04  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Fix the order of the items in the dumped history list.
        https://bugs.webkit.org/show_bug.cgi?id=71562

        It did not make much sense to hold the history list in a map, as we do not need
        the keys. And the printed items must be sorted by target, which is more easily
        done with a vector.

        Should make tests such as http/tests/navigation/error404-frames.html pass.

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/DumpHistoryItem.cpp:
        (compareHistoryItemsByTarget):
        (dumpHistoryItem):

2011-11-04  Patrick Gansterer  <paroga@webkit.org>

        [Qt] Remove ENABLE_SQLITE from qmake files
        https://bugs.webkit.org/show_bug.cgi?id=71546

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/webcore.prf:

2011-11-04  Adam Barth  <abarth@webkit.org>

        watchlist for WebIDL shouldn't trigger on Internals.idl
        https://bugs.webkit.org/show_bug.cgi?id=70657

        Reviewed by David Levin.

        Internals.idl isn't part of the Web-facing IDL in the project.

        * Scripts/webkitpy/common/config/watchlist:

2011-11-04  Anders Carlsson  <andersca@apple.com>

        Fix WKTR crash when running NPN_ConvertPoint test.

        Call notifyDone in a timeout - otherwise we'll end up entering layout from layout.

        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/ConvertPoint.cpp:
        (ConvertPoint::NPP_SetWindow):

2011-11-04  Anders Carlsson  <andersca@apple.com>

        NPN_ConvertPoint plug-in test should be called from NPP_SetWindow
        https://bugs.webkit.org/show_bug.cgi?id=71570

        Reviewed by Simon Fraser.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPP_SetWindow):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        Remove the NPP parameter from NPP_SetWindow.

        * DumpRenderTree/TestNetscapePlugIn/Tests/NPPSetWindowCalledDuringDestruction.cpp:
        (NPPSetWindowCalledDuringDestruction::NPP_SetWindow):
        Remove the NPP parameter from NPP_SetWindow.

        * DumpRenderTree/TestNetscapePlugIn/Tests/PassDifferentNPPStruct.cpp:
        (PassDifferentNPPStruct::NPP_SetWindow):
        Remove the NPP parameter from NPP_SetWindow and use PluginTest::log for logging.

        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/ConvertPoint.cpp:
        (ConvertPoint::NPP_SetWindow):
        Run the test from NPP_SetWindow and call notifyDone() when done.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_SetWindow):
        Remove unnecessary parameter.

2011-11-04  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix run-qtwebkit-tests execution on the build bot(s).

        Rubber-stamped by Tor Arne Vestbø.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: The path to the tests
        changed slightly after the refactoring.

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't warn about disabling WebKit2 when qmake does recursive includes

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_pre.prf:

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't error out on wrong Qt version when qmake does recursive includes

        Reviewed by Simmon Hausmann.

        * qmake/mkspecs/features/default_pre.prf:

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Disable STDIN check before cleaning build dir

        It didn't work on the bots.

        Reviewed by Ossy.

        * Scripts/webkitdirs.pm:

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't build all of webkit when running build-jsc

        In case the whole webkit project was built, but we then subsequently
        want to build only JSC, we need to run make in the proper subdirectory.

        This also means the incremental target needs to be added to all
        makefiles.

        Reviewed by Simmon Hausmann.

        * Scripts/webkitdirs.pm:
        (buildQMakeProject):
        * qmake/mkspecs/features/default_post.prf:

2011-11-04  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix run-javascriptcore-tests for Qt when it's executed by the bot.

        Reviewed by Tor Arne Vestbø.

        * Scripts/webkitdirs.pm:
        (jscProductDir): jsc path changed.

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Error out early if trying to build against Qt < 4.8

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_pre.prf:

2011-11-04  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix run-launcher for Qt and Gtk.

        Rubber-stamped by Tor Arne Vestbø.

        * Scripts/webkitdirs.pm:
        (isWK2): Re-add isWK2(), as it's used in run-launcher.

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Ignore '-2' if passed to build-webkit. WebKit2 is now built by default.

        Reviewed by Simon Hausmann.

        * Scripts/build-webkit:

2011-11-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use web view title as window title in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=71544

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewURIChanged): Removed extra space.
        (webViewTitleChanged): Set window title using
        webkit_web_view_get_title().
        (browser_window_init): Set initial default window title.
        (browserWindowConstructed): Connect to WebView notify::title
        signal.

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Refactor and clean up the qmake build system

        The qmake build system has accumulated a bit of cruft and redundancy
        over time. There's also a fairly tight coupling between how to build
        the various targets, and _what_ to build, making it harder to add new
        rules or sources. This patch aims to elevate these issues somewhat.

        This is a short-list of the changes:

          * The rules for how to build targets are now mostly contained as
            prf-files in Tools/qmake/mkspecs/features. Using mkspecs also
            allows us to do pre- and post-processing of each project file,
            which helps to clean up the actual project files.

          * Derived sources are no longer generated as a separate make-step
            but is part of each target's project file as a subdir. Makefile
            rules are used to ensure that we run make on the derived sources
            before running qmake on the actual target makefile. This makes
            it easier to keep a proper dependency between derived sources
            and the target.

          * We use GNU make and the compiler to generate dependencies on
            UNIX-based systems running Qt 5. This allows us to lessen the
            need to run qmake, which should reduce compile time.

          * WebKit2 is now build by default if building with Qt 5. It can
            be disabled by passing --no-webkit2 to build-webkit.

        The result of these changes are hopefully a cleaner and easier
        build system to modify, and faster build times due to no longer
        running qmake on every single build. It's also a first step
        towards possibly generating the list of sources using another
        build system.

        https://bugs.webkit.org/show_bug.cgi?id=71222

        Reviewed by Simon Hausmann.

        * DerivedSources.pro: Removed.
        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/ImageDiff.pro:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * MiniBrowser/qt/MiniBrowser.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        (LauncherWindow::screenshot):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * Scripts/build-webkit:
        (unlinkZeroFiles):
        * Scripts/webkitdirs.pm:
        (qtFeatureDefaults):
        (promptUser):
        (buildQMakeProject):
        * Tools.pro:
        * WebKitTestRunner/DerivedSources.pri: Added.
        * WebKitTestRunner/DerivedSources.pro: Removed.
        * WebKitTestRunner/InjectedBundle/DerivedSources.pri: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.pro: Added.
        * WebKitTestRunner/InjectedBundle/Target.pri: Added.
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro: Removed.
        * WebKitTestRunner/Target.pri: Added.
        * WebKitTestRunner/WebKitTestRunner.pro:
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        * WebKitTestRunner/qt/WebKitTestRunner.pro: Removed.
        * qmake/README: Added.
        * qmake/mkspecs/features/default_post.prf: Added.
        * qmake/mkspecs/features/default_pre.prf: Added.
        * qmake/mkspecs/features/features.prf: Renamed from Source/WebCore/features.pri.
        * qmake/mkspecs/features/functions.prf: Added.
        * qmake/mkspecs/features/javascriptcore.prf: Renamed from Source/JavaScriptCore/JavaScriptCore.pri.
        * qmake/mkspecs/features/mac/default_post.prf: Added.
        * qmake/mkspecs/features/mac/default_pre.prf: Added.
        * qmake/mkspecs/features/minimal_qt.prf: Added.
        * qmake/mkspecs/features/qtwebkit.prf: Added.
        * qmake/mkspecs/features/rpath.prf: Added.
        * qmake/mkspecs/features/unix/default_post.prf: Added.
        * qmake/mkspecs/features/unix/default_pre.prf: Added.
        * qmake/mkspecs/features/valgrind.prf: Added.
        * qmake/mkspecs/features/webcore.prf: Renamed from Source/WebCore/WebCore.pri.
        * qmake/mkspecs/features/webkit2.prf: Copied from Source/WebKit2/WebKit2.pri.
        * qmake/mkspecs/features/win32/default_post.prf: Added.
        * qmake/qt_webkit.pri: Renamed from Source/WebKit/qt/qt_webkit_version.pri.
        * qmake/syncqt-4.8: Added.
        (showUsage):
        ():
        (copyFile):
        (symlinkFile):

2011-11-04  Eric Seidel  <eric@webkit.org>

        Remove deprecated free functions in port.factory
        https://bugs.webkit.org/show_bug.cgi?id=71494

        Unreviewed.  Fixing exception seen when running test-webkitpy.

        Sorry, I previously had deleted the relevant rebaseline-chromium-webkit-tests
        unittest, since that script is nearly ready to be deleted.  But I added
        it back at the last second and failed to run the tests. :(
        This fixes the exception the bots were seeing.

        * Scripts/webkitpy/style/checkers/test_expectations.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:

2011-11-02  Xiaomei Ji  <xji@chromium.org>

        Enable ctrl-arrow move cursor by word in visual order in cr-win by command line flag.
        https://bugs.webkit.org/show_bug.cgi?id=71163

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/chromium/WebPreferences.cpp: Set visualWordMovementEabled to false in DRT.
        (WebPreferences::applyTo):

2011-11-03  Eric Seidel  <eric@webkit.org>

        Remove deprecated free functions in port.factory
        https://bugs.webkit.org/show_bug.cgi?id=71494

        Reviewed by Adam Barth.

        I removed port.factory.get, get_all, and all_port_names -- long-since deprecated
        free functions in factory.py.  To remove these required fixing all callsites
        to use MockHost, Host, or PortFactory where appropriate.  After this change
        we're only left with a handfull of places where we inappropraitely use a
        real Executive, FileSystem or User object during unittesting.

        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
         - These PortFactory overrides were from an earlier edition of my previous patch
           in the end, I removed MockPortFactory so all tests ended up with this same
           real PortFactory() with a MockHost.  This was simply redundent code.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
         - Use MockHost to get a mocked-out PortFactory.
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
         - This code has no access to a Host object, so we just use a default PortFactory
           for now.  This will still incorrectly create real Executive/FileSystem objects
           durring unittesting, which is wrong. :(
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
         - Use a MockHost to get a mocked PortFactory.
        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor_unittest.py:
         - Use a MockHost to get a mocked PortFactory.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py:
         - ditto.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
         - ditto.
        * Scripts/webkitpy/layout_tests/port/__init__.py:
         - factory.get no longer exists.  Yay!
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
         - Use a MockHost to get a mocked PortFactory.
           To do this efficiently, I created a helper function
           and combined all these (mostly redundant) tests into one test
           with several calls to the helper function.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
         - Pass MockUser and MockExecutive in these port testing subclasses.
         - I also removed a bunch of unecessary uses of mocktool. namespacing.
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
         - Awesome windows hacks should only happen on win32.  Once we started
           using MockExecutives these 'svn help' commands started printing in
           other tests, which is how I found this bug.
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
         - DryRunPort has no Host, so just use a PortFactory() directly.
           This will do the wrong thing if we're unittesting the DryRun port
           but it's no worse than the existing code.
        * Scripts/webkitpy/layout_tests/port/factory.py:
         - Remove the free functions.
         - Fix argument overriding to be able to override None.
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
         - Use a mocked-out PortFactory during testing.
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
         - Pass MockExecutive and MockUser to these manual Port instantiations.
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
         - No access to a Host object here, so just using PortFactory directly.
           This is wrong, but no more wrong than the existing code was.
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
         - Use a MockHost to get a mocked out PortFactory.
        * Scripts/webkitpy/layout_tests/port/test.py:
         - Use our fancy _set_default_overriding_none system to clean this code up and pass a MockExecutive.
        * Scripts/webkitpy/layout_tests/port/win.py:
         - Don't run cmd /c ver from WinPort.__init__ or it shows up in unittests which have logging MockExecutive
           now that we're actually passing MockExecutive to most Port instantiations during testing.
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
         - Pass our new "unittesting" bool to _detect_version when actually unittesting.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
         - Host is the future.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
         - Use a MockHost to get a mocked out PortFactory.  Once we have a mocked PortFactory
           we don't need to pass MockUser explicitly, it does that automatically for us.
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
         - Use a MockHost to get a mocked out PortFactory.
        * Scripts/webkitpy/style/checkers/test_expectations.py:
         - We don't have access to a Host object, so using PortFactory() directly.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
         - Remove unused variable.
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
         - Host isn't accessible here, so using PortFactory() directly, which
           although unfortunate is no worse than before.
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
         - Testing is much easier when you don't need to hack global state...
        * Scripts/webkitpy/tool/commands/expectations.py:
         - Use the port_factory on the tool.
        * Scripts/webkitpy/tool/commands/rebaseline.py:
         - ditto.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
         - This unittest was wrong.  It was trying to pass the tool object, but failing to pass
           the arguments in the right order.  Fixing that made it use a MockFileSystem
           (like it had been trying to), which then required us to actually populate
           that MockFileSystem with fake expectation files (instead of using the ones on the real disk).
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
         - Get the port_factory from the tool.
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
         - Ditto.
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
         - Use a MockHost to get a mocked out Port object.

2011-11-03  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Allow choosing which backing store to use.
        https://bugs.webkit.org/show_bug.cgi?id=70532

        Reviewed by Antonio Gomes.

        This change makes it possible to change the backing store used by DRT
        from Tiled Backing Store (TBS) to Single Backing Store (SBS) by
        setting the environment variable DRT_USE_SINGLE_BACKING_STORE to 1.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (shouldUseSingleBackingStore):
        (chooseAndInitializeAppropriateSmartClass):
        (drtViewAdd):
        * DumpRenderTree/efl/DumpRenderTreeView.h:

2011-11-02  Erik Arvidsson  <arv@chromium.org>

        JS Test Harness: Remove more link tags
        https://bugs.webkit.org/show_bug.cgi?id=71339

        Reviewed by Ojan Vafai.

        * Scripts/make-new-script-test:
        (writeTestFile): Don't output <link>

2011-11-03  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

        Reviewed by Martin Robinson.

        [GTK] arguments passed to build-jsc are not taken into account
        https://bugs.webkit.org/show_bug.cgi?id=58333

        * Scripts/build-jsc:

2011-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Show url of history items in a status bar in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=71474

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowSetStatusText): Set status text and show/hide the
        status label.
        (resetStatusText): Reset status text when history menu is hidden.
        (browserWindowHistoryItemSelected): Show url of currently selected
        history item.
        (browserWindowCreateBackForwardMenu): Connect to hide signal of
        menu to reset the status text.
        (browserWindowConstructed): Use GtkOverlay if available to show
        status text.

2011-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add back/forward menus to MiniBrowser using WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=71466

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowHistoryItemActivated): Go to selected back formard
        list item using webkit_web_view_go_to_back_forward_list_item()
        (browserWindowCreateBackForwardMenu): Create a GtkMenu for the
        given GList of WebKitBackForwardListItems.
        (browserWindowUpdateNavigationActions): Enable/disable back and
        forward buttons depending on whether it's possible to go
        back/forward. Create a menu for back and forward toolbar buttons.
        (backForwadlistChanged): Call browserWindowUpdateNavigationActions().
        (browserWindowConstructed): Connect to WebKitBackForwardList
        changed signal.

2011-11-03  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Remove Maemo specific code paths
        https://bugs.webkit.org/show_bug.cgi?id=71476

        Reviewed by Kenneth Rohde Christiansen.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::~LauncherWindow):
        (LauncherWindow::init):
        (LauncherWindow::showLinkHover):
        (LauncherWindow::selectElements):
        (LauncherWindow::showFPS):
        (LauncherWindow::updateFPS):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/locationedit.cpp:
        * QtTestBrowser/locationedit.h:

2011-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Show load progress information in MiniBrowser using WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=71461

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (resetEntryProgress): Reset the entry progress after a while when
        load has been completed.
        (webViewLoadProgressChanged): Update location entry progress.
        (browserWindowConstructed): Connect to WebView
        notify::estimated-load-progress signal.

2011-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove WebKit2 C API from MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=71459

        Reviewed by Martin Robinson.

        Use the GTK+ API instead to add minimum functionality. The other
        features will be ported to GTK+ API in following patches.

        * MiniBrowser/gtk/BrowserWindow.c:
        (activateUriEntryCallback): Use webkit_web_view_load_uri().
        (goBackCallback): Use webkit_web_view_go_back().
        (goForwardCallback): Use webkit_web_view_go_forward().
        (webViewURIChanged): Update location entry with current uri using
        webkit_web_view_get_uri().
        (browserWindowFinalize):
        (browserWindowGetProperty):
        (browserWindowSetProperty):
        (browser_window_init):
        (browserWindowConstructed): Connect to notify::uri signal of
        WebView to be notified when the URI changes.
        (browser_window_class_init):
        (browser_window_new): Use WebKitWebView.
        (browser_window_get_view): Use WebKitWebView
        * MiniBrowser/gtk/BrowserWindow.h:
        * MiniBrowser/gtk/GNUmakefile.am:
        * MiniBrowser/gtk/WebBundle/WebBundleMain.c: Removed.
        * MiniBrowser/gtk/main.c:
        (loadURI): Use webkit_web_view_new().
        (main):

2011-11-03  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Unable to start MiniBrowser after run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=71469

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-launcher: Pass @ARGV instead of @args, which is stripped
        from things like -2. Neither Gtk or Qt MiniBrowser like unknown command
        line arguments.

2011-11-03  Philippe Normand  <pnormand@igalia.com>

        [GTK] [WK2] ttf-liberation fonts moved to a new location (in Debian)
        https://bugs.webkit.org/show_bug.cgi?id=71445

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): set directoriesDescription only when needed.
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::inititializeFontConfigSetting): Add the new font path for Debian fonts and
        refactored the font files loading code to avoid copy/pastes, ease
        maintenance and future font directories additions.

2011-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove GtkLauncher2
        https://bugs.webkit.org/show_bug.cgi?id=71449

        Reviewed by Martin Robinson.

        GtkLauncher2 is the GtkLauncher code compiled with webkit2. This
        made sense when we wanted to implement the exactly same wk1 API
        for wk2. Now the code would require an ifdef for most the api, so
        it's better to remove GtkLauncher2 and port MiniBrowser to the new
        GTK+ API.

        * GNUmakefile.am:
        * GtkLauncher/main.c:
        (notifyProgressCb):
        (closeWebViewCb):
        (createBrowser):
        (addWebSettingsGroupToContext):
        (main):

2011-11-02  Philippe Normand  <pnormand@igalia.com>

        [GTK] [DRT] ttf-liberation fonts moved to a new location (in Debian)
        https://bugs.webkit.org/show_bug.cgi?id=71359

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Add the new font path for Debian fonts and
        refactored the font files loading code to avoid copy/pastes, ease
        maintenance and future font directories additions.

2011-11-02  Eric Seidel  <eric@webkit.org>

        Move Mocks into _mock files near their implementations
        https://bugs.webkit.org/show_bug.cgi?id=71425

        Reviewed by Adam Barth.

        This entire change is splitting mocktool.py into separate _mock.py files
        and placing them next to their real implementations.

        I also deleted MockPortFactory (since it was wrong) and was just hiding
        the fact that the "skipped-ports" command was broken (and has been for a long time).
        So I made MockHost use a real PortFactory (passed a MockHost) and changed
        the skipped-ports implementation to use modern PortFactory methods.

        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        * Scripts/webkitpy/common/checkout/checkout_mock.py: Added.
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/checkout/deps_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/__init__.py.
        * Scripts/webkitpy/common/checkout/scm/scm_mock.py: Added.
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/config/ports_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/gtk_unittest.py.
        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/common/host_mock.py: Added.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py: Added.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_mock.py: Added.
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/common/net/failuremap_unittest.py:
        * Scripts/webkitpy/common/net/irc/irc_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/__init__.py.
        * Scripts/webkitpy/common/net/statusserver_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/gtk_unittest.py.
        * Scripts/webkitpy/common/net/statusserver_unittest.py:
        * Scripts/webkitpy/common/net/web_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/gtk_unittest.py.
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_mock.py:
        * Scripts/webkitpy/common/system/platforminfo_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/__init__.py.
        * Scripts/webkitpy/common/system/user_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/gtk_unittest.py.
        * Scripts/webkitpy/common/system/workspace_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/__init__.py.
        * Scripts/webkitpy/common/system/workspace_unittest.py:
        * Scripts/webkitpy/common/watchlist/watchlist_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/__init__.py.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor_unittest.py:
        * Scripts/webkitpy/layout_tests/port/__init__.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/efl_unittest.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        * Scripts/webkitpy/layout_tests/port/http_lock_unittest.py:
        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        * Scripts/webkitpy/test/main.py:
        * Scripts/webkitpy/tool/bot/botinfo_unittest.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:

2011-11-02  Dan Bernstein  <mitz@apple.com>

        Fixed the build and removed another copy to ColorBits.ttf.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/fonts/ColorBits.ttf: Removed.

2011-11-02  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r98759-r98773): platform/mac/fonts/color-bitmap.html failing on Lion Intel Debug (Tests)
        https://bugs.webkit.org/show_bug.cgi?id=71424

        Reviewed by Sam Weinig.

        Removed the ColorBits font and the code to register it in the process
        running the tests. The font was only used by the aforementioned test,
        which is now being removed.

        * DumpRenderTree/fonts/ColorBits-A.png: Removed.
        * DumpRenderTree/fonts/ColorBits.ttf: Removed.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        (activateTestingFonts):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::inititializeFontConfigSetting):
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:
        (WTR::allowedFontFamilySet):
        (WTR::activateFonts):

2011-11-02  Dan Bernstein  <mitz@apple.com>

        Fix an intermittent hang in RenderedImageFromDOMRange.

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::run): Made the call to -runMode:beforeDate: return
        immediately if there are no sources by passing a date in the distant past.

2011-11-02  Adam Roben  <aroben@apple.com>

        Add git-add-reviewer

        I've been using this script for a while to add reviewers to git commits in my local
        repository before pushing them to the Subversion repository. Basic usage is:

        git-add-reviewer HEAD^ "Joe Schmoe"
        or
        git-add-reviewer -i trunk

        Fixes <http://webkit.org/b/71419> Would like an easy way to add reviewer names to existing
        git commits

        Reviewed by Sam Weinig.

        * Scripts/git-add-reviewer: Added.
        (top level): Parse options, check that the working tree is clean, then run in either
        interactive or non-interactive mode as appropriate.
        (interactive): Write out a temp file that contains each commit with "NOBODY" next to it and
        open it in the user's editor. The user can replace "NOBODY" with reviewer names. When the
        editor exits, we check out the commit just before the earliest one we're modifying. Then
        for each commit, we check it out, update the reviewer, and amend the commit to contain the
        new reviewer. Finally, we update the branch that was originally checked out to point to the
        last amended commit.
        (nonInteractive): Check out the commit to modify, write the current commit message to the
        MERGE_MSG file so addReviewer will update it, add the reviewer to the ChangeLog(s), amend
        the commit, and rebase the original branch on top of the amended commit. (usage): Print out
        a usage message and exit.
        (requireCleanWorkTree): Do the same steps git-rebase does to ensure that the working tree
        and index are clean.
        (fail): Print out the specified error message, if any, and return false. This function is
        used as a return value in various error cases throughout the script.
        (cherryPick): Cherry-pick the specified commit and return 1 if we succeeded.
        (addReviewer): Add the specified reviewer to all the ChangeLogs modified in this commit, and
        to .git/MERGE_MSG, which will be used as the commit message for the next commit.
        (commit): Call git-commit and use .git/MERGE_MSG as the commit message.

        (addReviewerToChangeLog):
        (addReviewerToCommitMessage):
        These just call through to addReviewerToFile.

        (addReviewerToFile): Read in the file, replacing any "NOBODY" text with the reviewer name(s)
        and replacing "Reviewed" with "Rubber-stamped" if specified. Write the resulting text to a
        temp file, then move the temp file over the original file and stage it for the next commit.
        (head): Returns the name of the currently-checked-out branch.
        (isAncestor): Returns true if the first commit is an ancestor of the second.
        (toCommit): Converts a commitish to a commit ID using git-rev-parse.
        (changeLogsForCommit): Returns a list of all the ChangeLogs modified in the given commit.
        (resetToCommit): Checks out the given commit, throwing away any local changes.
        (writeCommitMessageToFile): Gets the commit message for the current commit and writes it to
        the specified file.
        (rebaseOntoHead): Rebases the specified branch onto HEAD.
        (checkout): Checks out the given commit.
        (getConfigValue): Reads the specified config variable from git-config.

2011-11-02  Dean Jackson  <dino@apple.com>

        Add ENABLE_CSS_SHADERS flag
        https://bugs.webkit.org/show_bug.cgi?id=71394

        Reviewed by Sam Weinig.

        * Scripts/build-webkit:

2011-10-31  Eric Seidel  <eric@webkit.org>

        BaselineOptimizer tests should use mocks instead of real Executive/FileSystem objects
        https://bugs.webkit.org/show_bug.cgi?id=71237

        Reviewed by Adam Barth.

        Calling the static version of factory.get() with proper mocking
        requires passsing an explict filesystem, executive, etc.
        So instead, we use a PortFactory instance and pass it a Host pointer.
        I had to add a MockHost since we'd not needed a non-host tool before now.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/mocktool.py:

2011-11-02  Anders Carlsson  <andersca@apple.com>

        Update for the WebKit2 API fixage.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2011-11-02  Anders Carlsson  <andersca@apple.com>

        Fix build.

        Add new functions to the page loader client.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2011-11-02  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10336700> Add API to get rendered text image without having to select it
        https://bugs.webkit.org/show_bug.cgi?id=71407

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/RenderedImageFromDOMRange.mm: Added.
        (-[RenderedImageFromDOMRangeFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::TEST):

2011-11-02  Benjamin Poulain  <benjamin@webkit.org>

        Make the main frame's base path more explicit in _drt_descriptionSuitableForTestResult
        https://bugs.webkit.org/show_bug.cgi?id=71351

        Reviewed by Darin Adler.

        Add the delimiter "/" at the end of the path instead of adding +1 when using
        the path.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[NSURL _drt_descriptionSuitableForTestResult]):

2011-11-02  Tom Sepez  <tsepez@chromium.org>

        XSSAuditor is silent
        https://bugs.webkit.org/show_bug.cgi?id=70973

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didDetectXSS):
        * DumpRenderTree/chromium/WebViewHost.h:
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didDetectXSS:]):
        * MiniBrowser/mac/BrowserWindowController.m:
        (didDetectXSSForFrame):
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didDetectXSSForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2011-11-02  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] REGRESSION: 5 editing tests fail
        https://bugs.webkit.org/show_bug.cgi?id=71117

        Reviewed by Andreas Kling.

        Make sure that the view is properly focused, in order to get the
        didBeginEditing DRT calls.

        This requires activating the window (the call will result in a FocusIn
        event to the window as well as setting QGuiApplication::focusWindow())
        as well as enabling the focus on the view item. The signature of
        setFocus has changed to take a boolean.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):

2011-11-02  Matt Falkenhagen  <falken@chromium.org>

        [chromium] Add per-script font preferences support in overridePreference
        https://bugs.webkit.org/show_bug.cgi?id=71110

        This allows a layout test to do something like:

        // Set standard font for Arabic to Ahem.
        overridePreference("WebKitStandardFontMap", [ "Arab", "Ahem" ]);

        This should make writing a layout test for per-script fonts easier.

        This change only affects the Chromium DumpRenderTree, but the other
        platforms should probably also have a similar change eventually.

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/LayoutTestController.cpp: add per-script
        font preferences to overridePreference
        (LayoutTestController::cppVariantToWebStringArray):
        (setFontMap):
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (setStandardFontFamilyWrapper):
        (setFixedFontFamilyWrapper):
        (setSerifFontFamilyWrapper):
        (setSansSerifFontFamilyWrapper):
        (setCursiveFontFamilyWrapper):
        (setFantasyFontFamilyWrapper):
        (applyFontMap):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h: add per-script font
        preference members
        (WebPreferences::UScriptCodeHashTraits::emptyValue):
        (WebPreferences::UScriptCodeHashTraits::constructDeletedValue):
        (WebPreferences::UScriptCodeHashTraits::isDeletedValue):

2011-11-02  Elliot Poger  <epoger@google.com>

        until use_skia=1 by default on mac, default port should be chromium-cg-mac
        https://bugs.webkit.org/show_bug.cgi?id=71312

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:

2011-11-02  Stephen Chenney  <schenney@chromium.org>

        printing layout test failures after r98634
        https://bugs.webkit.org/show_bug.cgi?id=71080

        Reviewed by Kent Tamura

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintPagesWithBoundaries): Added transforms invert the CG Bitmap so the coord system
        matches that for Skia.

2011-11-01  Sam Weinig  <sam@webkit.org>

        Can't complete ChangeLog when using resolve-Changelogs and webkit-tools-completion.sh
        https://bugs.webkit.org/show_bug.cgi?id=71346

        Reviewed by Dan Bernstein.

        * Scripts/webkit-tools-completion.sh:
        Add "-o default" which allows for completing files in addition to the word list.

2011-11-02  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Add support for touch event testing to WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=71310

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/DerivedSources.pro: Build system foo to ensure the ENABLE_TOUCH_EVENTS
        define works in EventSendingController.idl
        * WebKitTestRunner/EventSenderProxy.h: Add declarations for Qt implementations of touch
        handlers.
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl: Add touch functions
        required by tests.
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp: Forward touch messages to the
        ui process.
        (WTR::EventSendingController::addTouchPoint):
        (WTR::EventSendingController::updateTouchPoint):
        (WTR::EventSendingController::setTouchModifier):
        (WTR::EventSendingController::touchStart):
        (WTR::EventSendingController::touchMove):
        (WTR::EventSendingController::touchEnd):
        (WTR::EventSendingController::clearTouchPoints):
        (WTR::EventSendingController::releaseTouchPoint):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro: Include features.pri for feature
        defines.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle): Forward incoming
        touch messages to the EventSenderProxy.
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp: Implement touch test harness functions.
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::addTouchPoint):
        (WTR::EventSenderProxy::updateTouchPoint):
        (WTR::EventSenderProxy::setTouchModifier):
        (WTR::EventSenderProxy::touchStart):
        (WTR::EventSenderProxy::touchMove):
        (WTR::EventSenderProxy::touchEnd):
        (WTR::EventSenderProxy::clearTouchPoints):
        (WTR::EventSenderProxy::releaseTouchPoint):
        (WTR::EventSenderProxy::sendTouchEvent):
        * WebKitTestRunner/qt/WebKitTestRunner.pro: Include features.pri for feature defines.

2011-11-01  Sam Weinig  <sam@webkit.org>

        resolve-ChangeLogs --help should be faster.

        Reviewed by Adam Roben.

        * Scripts/resolve-ChangeLogs:
        (usageAndExit):
        Add a call to usageAndExit() before doing work to find unmerged changelogs
        if --help or something illegal is provided on the command line.

2011-11-01  Benjamin Poulain  <bpoulain@apple.com>

        [Mac] _drt_descriptionSuitableForTestResult generate an exception for absolute paths above the main frame
        https://bugs.webkit.org/show_bug.cgi?id=71342

        Reviewed by Darin Adler.

        [NSURL _drt_descriptionSuitableForTestResult] was generating a NSRangeException due to the call to
        [NSString substringFromIndex:] with an index out of the string range.

        The source of this path is the test-loading-archive-subresource-null-mimetype.html which load a subresource
        from the root of the disk.
        The problem was hidden because the exception are catched when calling the delegate.

        This patch changes _drt_descriptionSuitableForTestResult to return absolute string if the resource is not
        in a subdirectory of the main frame.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[NSURL _drt_descriptionSuitableForTestResult]):

2011-11-01  Alok Priyadarshi  <alokp@chromium.org>

        [chromium] --enable-hardware-gpu flag is not recognized by run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=71318

        Reviewed by James Robinson.
        
        Fixed a typo for --enable-hardware-gpu flag.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-11-01  Elliot Poger  <epoger@google.com>

        chromium-gpu port should default to chromium-gpu-mac, not chromium-gpu-cg-mac
        https://bugs.webkit.org/show_bug.cgi?id=71286

        Reviewed by Stephen White.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-11-01  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Fix build of WebKitTestRunner with ELF symbol visibility
        https://bugs.webkit.org/show_bug.cgi?id=71299

        Reviewed by Andreas Kling.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp: Use the properly exported symbol for the Qt
        build to enable WebCoreTestSupport::injectInternalsObject.
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro: Fix include path to DRTSupportQt

2011-11-01  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Merge common desktop and touch view APIs under a base class.
        https://bugs.webkit.org/show_bug.cgi?id=71280

        Reviewed by Andreas Kling.

        Remove unneded forwarding logic for TouchWebView since those properties are
        now in the view just as the desktop web view.

        * MiniBrowser/qt/qml/TouchView.qml:

2011-11-01  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        check-webkit-style: Allow names starting with "_q_".
        https://bugs.webkit.org/show_bug.cgi?id=70625

        Reviewed by Tor Arne Vestbø.

        Used by the Qt port as the standard prefix for private slots.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-11-01  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Fix valgrind error about uninitialized variable
        https://bugs.webkit.org/show_bug.cgi?id=71273

        Reviewed by Kenneth Christiansen.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify): Initialize isPrimary.

2011-10-31  Adam Roben  <aroben@apple.com>

        Make Leaks Viewer less strict when parsing leaks-related output from NRWT/ORWT

        Fixes <http://webkit.org/b/71258> REGRESSION (r98639): Leaks Viewer doesn't show recent
        leaky builds

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js:
        (RecentBuildsLoader.prototype.start): Relax a regex to gloss over differences in ORWT's vs.
        NRWT's leaks-related output (i.e., "M total leaks found!" vs. "M total leaks found for a
        total of N bytes!").

2011-10-31  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Rename ewk_view_setting_scripts_window_open_{get,set} after r93833
        https://bugs.webkit.org/show_bug.cgi?id=71228

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createNewWindow):
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):

2011-10-31  Eric Seidel  <eric@webkit.org>

        webkitpy tests depend too much on the user's environment
        https://bugs.webkit.org/show_bug.cgi?id=71234

        Reviewed by Dirk Pranke.

        This change just makes a bunch of our older tests use
        more modern mocking to avoid trying to launch processes
        or read from the user's filesystem during unittesting.

        I found many of these by adding an assert in Executive.run_command
        that we were not unittesting.  I can't add that assert always
        as there are some valid uses of Executive during unittesting.
        Once I fix more of these, I may find a way to add such an assert conditionally.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:

2011-10-31  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] MiniBrowser doesn't resize as the size is always overridden
        https://bugs.webkit.org/show_bug.cgi?id=71212

        Reviewed by Simon Hausmann.

        Remove call overriden the size.

        * MiniBrowser/qt/main.cpp:
        (main):

2011-10-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98819, r98823, r98825, and r98830.
        http://trac.webkit.org/changeset/98819
        http://trac.webkit.org/changeset/98823
        http://trac.webkit.org/changeset/98825
        http://trac.webkit.org/changeset/98830
        https://bugs.webkit.org/show_bug.cgi?id=71199

        Broke Chromium Windows bot (Requested by rniwa on #webkit).

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/efl.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2011-10-30  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests is locale dependent
        https://bugs.webkit.org/show_bug.cgi?id=68691

        Unreviewed.

        This is a temporary hack until someone from the cr-win port
        can take a look and determine which environment variable
        lighttpd is missing.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

2011-10-30  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests is locale dependent
        https://bugs.webkit.org/show_bug.cgi?id=68691

        Unreviewed.  I would have preferred to have this reviewed,
        but relevant reviewers are asleep and bots are broken.

        This was a regression from moving to a clean environment.
        ChromiumWin (and possibly other ports), need the "PATH"
        environment copied over.  This wasn't caught in my testing
        because although we had unittests to cover this, they
        weren't being run on anything but windows.  The vast majority
        of this change is just fixing the unittests to use our
        modern MockFileSystem/MockUser/MockExecutive so they can
        be run on any system (and removing the platform checks from
        the unittests so they are run everywhere).

        The actual fix is the single line "PATH" string added to base.py.
        The rest of this change is just fixing the Chromium port unittests
        to run on all systems (including changing the Chromium port to
        use FileSystem.path_to_module instead of __file__).

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:

2011-10-29  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests is locale dependent
        https://bugs.webkit.org/show_bug.cgi?id=68691

        Unreviewed.

        Fix the Qt port and unittest the function so we don't break it again.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:

2011-10-29  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests is locale dependent
        https://bugs.webkit.org/show_bug.cgi?id=68691

        Reviewed by Adam Barth.

        Make NRWT use a clean environment just like ORWT did.
        I've manually validated that NRWT now copies over
        the same environment variables that ORWT did.
        This new code is exercised by existing setup_environ_for_server tests.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/efl.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2011-10-29  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests: MASTER BUG: Switch all webkit.org bots over
        https://bugs.webkit.org/show_bug.cgi?id=34984

        Reviewed by Adam Barth.

        Move run-webkit-tests from using a white-list of supported NRWT ports
        to a blacklist of ports requiring ORWT.

        I've also added the ability to opt-in to parallel testing on a per-port basis.

        With these changes I'm going to officially declare this bug dead and
        work on remaining polish issues and individual developer complaints.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):
        (platformIsReadyForParallelTesting):

2011-10-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98780.
        http://trac.webkit.org/changeset/98780
        https://bugs.webkit.org/show_bug.cgi?id=71173

        Broke Qt bots (Requested by rniwa on #webkit).

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-10-28  Rafael Weinstein  <rafaelw@chromium.org>

        webkit.py gdb visualizer is broken after change to StringImpl
        https://bugs.webkit.org/show_bug.cgi?id=71154

        Reviewed by Tony Chang.

        r98624 changed StringImpl m_data to m_data32. This changes updates
        webkit.py to match.

        * gdb/webkit.py:

2011-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Fix typo in check-for-inappropriate-objc-class-names
        https://bugs.webkit.org/show_bug.cgi?id=71144

        Reviewed by Dan Bernstein.

        * Scripts/check-for-inappropriate-objc-class-names:

2011-10-28  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        Add support for sending scroll-update events from EventSender.
        https://bugs.webkit.org/show_bug.cgi?id=66272

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::reset):
        (EventSender::gestureScrollUpdate):
        (EventSender::gestureEvent):
        * DumpRenderTree/chromium/EventSender.h:

2011-10-28  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests: MASTER BUG: Switch all webkit.org bots over
        https://bugs.webkit.org/show_bug.cgi?id=34984

        Reviewed by Adam Barth.

        Move run-webkit-tests from using a white-list of supported NRWT ports
        to a blacklist of ports requiring ORWT.

        I've also added the ability to opt-in to parallel testing on a per-port basis.

        With these changes I'm going to officially declare this bug dead and
        work on remaining polish issues and individual developer complaints.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):
        (platformIsReadyForParallelTesting):

2011-10-28  Eric Seidel  <eric@webkit.org>

        NRWT crashes when parsing leaks output due to UTF-8 decoding error
        https://bugs.webkit.org/show_bug.cgi?id=71112

        Reviewed by Adam Barth.

        Use read_binary_file instead of read_text_file and add a test
        case with some non-utf8 data to make sure we don't break this in the future.

        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py:

2011-10-28  David Levin  <levin@chromium.org>

        watchlist should not CC the bug reporter
        https://bugs.webkit.org/show_bug.cgi?id=71079

        Reviewed by Adam Barth.

        Tested by test_apply_watch_list_local (webkitpy.tool.steps.applywatchlist_unittest.ApplyWatchListTest)
        which remains upchanged and thus verifies that the reporter doesn't get added to the cc line.

        * Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py: Add the new email in the output.
        * Scripts/webkitpy/tool/mocktool.py: Change the reporter and make them one of the people to cc.
        * Scripts/webkitpy/tool/steps/applywatchlist.py: Remove the reporter from the cc list.

2011-10-28  Zoltan Horvath  <zoltan@webkit.org>

        Add watchlist for QtWebKit2 API and for WK2's Qt specific files.
        https://bugs.webkit.org/show_bug.cgi?id=71116

        Reviewed by David Levin.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-28  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Adapt to QSG* to QQuick* API change in qtdeclarative
        https://bugs.webkit.org/show_bug.cgi?id=70494

        Reviewed by Kenneth Christiansen.

        Use QQuick* instead of QSG* as well as QStandardPaths
        instead of QDesktopLocation.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        * MiniBrowser/qt/BrowserWindow.h:
        * QtTestBrowser/cookiejar.cpp:
        (TestBrowserCookieJar::TestBrowserCookieJar):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::setDiskCache):
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::WrapperWindow):
        (WTR::WrapperWindow::handleStatusChanged):

2011-10-28  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Fix the Ctrl behavior for touch mocking in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=71106

        Reviewed by Simon Hausmann.

        Holding Ctrl allows multiple touch points to be held on the screen using
        mouse buttons. It would previously only prevent TouchReleased to be sent
        and would require another MouseButtonRelease to be sent without holding Ctrl.

        This patch makes sure that all held touch points are released when Ctrl
        is released if MouseButtonRelease was received.
        It also removes the touch QEvent::Type logic since it's currently handled
        by QtGui by observing the modified touch points.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        (MiniBrowserApplication::sendTouchEvent):
        * MiniBrowser/qt/MiniBrowserApplication.h:

2011-10-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] MiniBrowser needs a -window-size option
        https://bugs.webkit.org/show_bug.cgi?id=70999

        Reviewed by Simon Hausmann.

        Add an -window-size option useful for testing the viewport handling.
        Also clean up the option handling.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):
        (WindowOptions::setRequestedWindowSize):
        (WindowOptions::requestedWindowSize):
        * MiniBrowser/qt/utils.cpp:
        (takeOptionValue):
        * MiniBrowser/qt/utils.h:

2011-10-28  Jochen Eisinger  <jochen@chromium.org>

        Add allowScriptFromSource callback to FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=71013

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setScriptsAllowed):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebPermissions.cpp:
        (WebPermissions::allowScriptFromSource):
        (WebPermissions::setScriptsAllowed):
        (WebPermissions::reset):
        * DumpRenderTree/chromium/WebPermissions.h:

2011-10-28  Alexandru Chiculita  <achicu@adobe.com>

        Added myself as a committer.

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

2011-10-27  Adam Barth  <abarth@webkit.org>

        Remove WinCairo from the set of core builders.  WinCairo rarely builds
        and is never green.

        Rubber-stamped by Eric Seidel.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-10-27  Yuta Kitamura  <yutak@chromium.org>

        WebSocket: Connecting to localhost:8880 takes one second on Windows
        https://bugs.webkit.org/show_bug.cgi?id=64788

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        Bind to "localhost" instead of "127.0.0.1" to let pywebsocket listen on both
        IPv4 and IPv6 addresses. This should prevent the test reserved-opcodes.html
        from timing out on Windows, because this test tries to open a lot of
        connections to localhost and each attempt takes one second to fall back from
        IPv6 to IPv4 on Windows (I have no idea why Windows works like this, though).

2011-10-27  Adam Barth  <abarth@webkit.org>

        Dis-integrate run-bindings-tests with webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=71092

        Reviewed by Ryosuke Niwa.

        These tests aren't really adding any value.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2011-10-27  Eric Seidel  <eric@webkit.org>

        REGRESSION (r98639): NRWT crashes when parsing leaks output
        https://bugs.webkit.org/show_bug.cgi?id=71087

        Unreviewed.  Sadly we have no good way to test logging.

        * Scripts/webkitpy/layout_tests/port/leakdetector.py:

2011-10-27  David Levin  <levin@chromium.org>

        Test expectation errors should include the file name and platform in both the log and exception info.
        https://bugs.webkit.org/show_bug.cgi?id=71067

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:

2011-10-27  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests doesn't understand --qt or --gtk
        https://bugs.webkit.org/show_bug.cgi?id=63970

        Reviewed by Ojan Vafai.

        Add support for --qt and --gtk to NRWT.
        I also removed some incorrect comments in the option parsing
        code (options which we already implement, but said we didn't)
        as well as moved --platform parsing out of the "results_options"
        section into the top configuration section.

        Now run-webkit-tests no longer needs NRWT-specific code for passing
        --platform=qt, etc.

        * Scripts/run-webkit-tests:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-10-27  Eric Seidel  <eric@webkit.org>

        REGRESSION (NRWT): build.webkit.org doesn't show the total number of leaks found during a test run on the Leaks bot
        https://bugs.webkit.org/show_bug.cgi?id=66227

        Reviewed by Adam Roben.

        I believe this should fix the bug.

        * Scripts/run-webkit-tests: make NRWT default for --leaks
        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        (LeakDetector._parse_leaks_output): removed the (unneeded) process_pid argument, and made the regexp use named groups (even though we don't ever grab them by name)
        (LeakDetector.count_total_bytes_and_unique_leaks): renamed from parse_leak_files
        (LeakDetector.count_total_leaks): new file (the guts of this change) which is used to re-parse the leaks output during the summarize leaks phase.
        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py:
        Changes to reflect the rename of count_total_bytes_and_unique_leaks and a new test for count_total_leaks.
        * Scripts/webkitpy/layout_tests/port/mac.py:
        Use count_total_leaks to spit out the total leak count like ORWT did, and remove the FIXME on the subject.

2011-10-27  Stephen Chenney  <schenney@chromium.org>

        [Chromium] Need setPrinting
        https://bugs.webkit.org/show_bug.cgi?id=46152

        Reviewed by Hajime Morita.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): Added logic for handling setPrinting.
        (LayoutTestController::reset): Clearing flags for setPrinting.
        (LayoutTestController::setPrinting): Set flags for setPrinting.
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::setIsPrinting): Added the setPrinting methods and flags.
        (LayoutTestController::isPrinting): Method to return the setPrinting status.
        * DumpRenderTree/chromium/TestShell.cpp:
        (dumpFramesAsPrintedText): A method for creating a text dump in printed layout.
        (TestShell::dump): Modified to dump setPrinting-specific output.
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintPagesWithBoundaries): Handling for pixel tests when setPrinting is
        active.
        * DumpRenderTree/chromium/WebViewHost.h: Prototype for paintPagesWithBoundaries.

2011-10-27  Sam Weinig  <sam@webkit.org>

        Add allowsPlugIns property to WKBrowsingContextGroup
        https://bugs.webkit.org/show_bug.cgi?id=70987

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextGroupTest.mm:
        Add basic test for WKBrowsingContextGroup.allowsPlugIns. 

2011-10-27  Adam Roben  <aroben@apple.com>

        Test WKBundlePageGetBackingScaleFactor

        Test for <http://webkit.org/b/71025> <rdar://problem/10355037> REGRESSION (r97191): Clients
        can't reliably determine the scale factor of snapshots returned via
        WKBundlePageCreateSnapshot* API

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added new files.

        * TestWebKitAPI/Tests/WebKit2/mac/GetBackingScaleFactor.mm: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle): Record the passed-back scale factor.
        (TestWebKitAPI::setInjectedBundleClient): Hook up our didReceiveMessage callback.
        (TestWebKitAPI::createWindow): Conjure up a window.
        (TestWebKitAPI::TEST): Ask the injected bundle code to call the new
        WKBundlePageGetBackingScaleFactor API when the WKView is in windows with various scale
        factors and when using a custom scale factor, and check that we get those same scale factors
        back.

        * TestWebKitAPI/Tests/WebKit2/mac/GetBackingScaleFactor_Bundle.mm: Added.
        (TestWebKitAPI::GetBackingScaleFactorTest::GetBackingScaleFactorTest): Just initialize our
        members.
        (TestWebKitAPI::GetBackingScaleFactorTest::didCreatePage): Store the page for later.
        (TestWebKitAPI::GetBackingScaleFactorTest::didReceiveMessage): Get the backing scale factor
        from the page using the new API and send it back.

2011-10-27  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] MiniBrowser crashes when started with 0 arguments

        Rubber-stamped by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):
        Fix typo error.

2011-10-27  Takashi Toyoshima  <toyoshim@chromium.org>

        [WebSocket] update pywebsocket to 0.7.
        https://bugs.webkit.org/show_bug.cgi?id=70992

        Reviewed by Kent Tamura.

        pywebsocket 0.7 fixed the bug on dual stack support on OS X.

        * Scripts/webkitpy/thirdparty/__init__.py:

2011-10-27  Elliot Poger  <epoger@google.com>

        make lion observe MAC lines in test_expectations.txt
        https://bugs.webkit.org/show_bug.cgi?id=70941

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2011-10-27  John Knottenbelt  <jknotten@chromium.org>

        [Chromium] Allow DRT to be built without notifications enabled.
        https://bugs.webkit.org/show_bug.cgi?id=70919

        Reviewed by Tony Gentilcore.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::grantDesktopNotificationPermission):
        (LayoutTestController::simulateDesktopNotificationClick):
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetTestController):

2011-10-21  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Improve command line arguments handling for MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=70616

        Reviewed by Kenneth Rohde Christiansen.

        - Use two dashes for word arguments.
        - Return with an error when an unsupported argument is given.
        - Allow the URL to be placed before option arguments.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (printHelp):
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/utils.cpp:
        (takeOptionFlag):
        (takeOptionValue):
        * MiniBrowser/qt/utils.h:

2011-10-27  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] NRWT doesn't work on qt-mac platform
        https://bugs.webkit.org/show_bug.cgi?id=64445

        Reviewed by Adam Barth.

        * Scripts/run-webkit-tests: Switch qt-mac platform to NRWT.
        (useNewRunWebKitTests):
        * Scripts/webkitpy/layout_tests/port/qt.py: Fix library path on Mac.

2011-10-26  Sam Weinig  <sam@webkit.org>

        Add initial setting to WKBrowsingContextGroup
        https://bugs.webkit.org/show_bug.cgi?id=70942

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextGroupTest.mm: Added.
        Add basic test that setting the javaScriptEnabled setting takes. It is not
        possible to test its effect quite yet.

2011-10-26  Alejandro G. Castro  <alex@igalia.com>

        [GTK] [WK2] Add WebKit2 distcheck support
        https://bugs.webkit.org/show_bug.cgi?id=70933

        Reviewed by Martin Robinson.

        * WebKitTestRunner/GNUmakefile.am: Add missing files to the
        sources and EXTRA_DIST.

2011-10-26  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Fix failing assertion on startup of MiniBrowser -touch.

        Reviewed by Tor Arne Vestbø.

        We're using QScroller since r98460, which requires QWidget/QApplication. So
        use QApplication and QtWidgets for the time being.

        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication):
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/MiniBrowserApplication.h:

2011-10-25  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] Rewrite MiniBrowser in QML
        https://bugs.webkit.org/show_bug.cgi?id=70315

        Add the first QML based implementation of MiniBrowser.

        Patch by Jocelyn Turcotte <jocelyn.turcotte@nokia.com>,
                 Zeno Albisser <zeno.albisser@nokia.com>

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::webView):
        (BrowserWindow::load):
        (BrowserWindow::keyPressEvent):
        (BrowserWindow::~BrowserWindow):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication):
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):
        * MiniBrowser/qt/UrlLoader.cpp:
        (UrlLoader::UrlLoader):
        * MiniBrowser/qt/icons/next.png: Added.
        * MiniBrowser/qt/icons/previous.png: Added.
        * MiniBrowser/qt/icons/refresh.png: Added.
        * MiniBrowser/qt/icons/stop.png: Added.
        * MiniBrowser/qt/main.cpp:
        (main):
        * MiniBrowser/qt/qml/BrowserWindow.qml: Added.

2011-10-26  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] Remove QtWidgets dependency in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=70529

        Remove obsolete code for a new QML based implementation
        of MiniBrowser.
        Change BrowserWindow to derive from QSGView instead of
        QMainWindow. QSGView is used as a top level window that
        provides the container for placing QML content.
        Make MiniBrowserApplication derive from QGuiApplication
        instead of QApplication.

        Patch by Jocelyn Turcotte <jocelyn.turcotte@nokia.com>,
                 Zeno Albisser <zeno.albisser@nokia.com>

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/BrowserView.cpp: Removed.
        * MiniBrowser/qt/BrowserView.h: Removed.
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::load):
        (BrowserWindow::screenshot):
        (BrowserWindow::loadURLListFromFile):
        (BrowserWindow::updateUserAgentList):
        (BrowserWindow::~BrowserWindow):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication):
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        * MiniBrowser/qt/UrlLoader.cpp:
        (UrlLoader::UrlLoader):
        * MiniBrowser/qt/main.cpp:

2011-10-25  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] Remove QAction from MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=70525

        In order to rewrite MiniBrowser in QML we need a suitable
        mechanism for triggering navigation actions.
        Due to the QtWidgets dependency of QAction the current
        solution is not suitable anymore. Therefore we introduce
        invokable methods and export properties in QWebNavigationController.

        Patch by Jocelyn Turcotte <jocelyn.turcotte@nokia.com>,
                 Zeno Albisser <zeno.albisser@nokia.com>

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/BrowserView.cpp:
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):

2011-10-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Unregister viewport,changed signal in EWebLauncher.
        https://bugs.webkit.org/show_bug.cgi?id=70478

        Reviewed by Eric Seidel.

        'viewport,changed' signal was registered by EWebLauncher in order to test viewport meta tag.
        However, it sets wrong layout to some web sites which have viewport meta tag. Because, host pc
        doesn't support proper DPI value though viewport is using DPI value to compute layout values.
        This signal is for mobile device.

        * EWebLauncher/main.c:
        (browserCreate):

2011-10-25  Anders Carlsson  <andersca@apple.com>

        Plug-ins have no way to find out when the device scale factor changes
        https://bugs.webkit.org/show_bug.cgi?id=67226
        <rdar://problem/10048276>

        Reviewed by Sam Weinig.

        Keep a cached copy of the contents scale and update it when it changes.

        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/ContentsScaleFactor.cpp:
        (ContentsScaleFactor::ContentsScaleFactor):
        (ContentsScaleFactor::cachedContentsScaleFactor):
        (ContentsScaleFactor::ScriptableObject::hasProperty):
        (ContentsScaleFactor::ScriptableObject::getProperty):
        (ContentsScaleFactor::NPP_New):
        (ContentsScaleFactor::NPP_SetValue):

2011-10-25  Sam Weinig  <sam@webkit.org>

        Add WKBrowsingContextLoadDelegateTest test for a failed load
        https://bugs.webkit.org/show_bug.cgi?id=70859

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextLoadDelegateTest.mm:
        (TEST_F): Add TEST_F(WKBrowsingContextLoadDelegateTest, SimpleLoadFail).
 
        (-[SimpleLoadFailDelegate browsingContextControllerDidFailProvisionalLoad:withError:]):
        Test that we are getting the correct NSError code and domain.

2011-10-25  Erik Arvidsson  <arv@chromium.org>

        JS Test Harness: Make successfullyParsed optional
        https://bugs.webkit.org/show_bug.cgi?id=70784

        Reviewed by Ojan Vafai.

        * Scripts/make-new-script-test:
        (writeTestFile): Update the template for script tests.

2011-10-25  Anders Carlsson  <andersca@apple.com>

        Plug-ins have to use JavaScript to find out the current device scale factor
        https://bugs.webkit.org/show_bug.cgi?id=67225
        <rdar://problem/10048258>

        Reviewed by Darin Adler.

        Add a plug-in test for getting the contents scale factor.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/ContentsScaleFactor.cpp: Added.
        (ContentsScaleFactor::ContentsScaleFactor):
        (ContentsScaleFactor::contentsScaleFactor):
        (ContentsScaleFactor::ScriptableObject::hasProperty):
        (ContentsScaleFactor::ScriptableObject::getProperty):
        (ContentsScaleFactor::ScriptableObject::pluginTest):
        (ContentsScaleFactor::NPP_GetValue):

2011-10-25  Sam Weinig  <sam@webkit.org>

        Flesh out WKBrowsingContextLoadDelegate a bit
        https://bugs.webkit.org/show_bug.cgi?id=70846

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2ObjC: Added.
        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextLoadDelegateTest.mm: Added.
        (WKBrowsingContextLoadDelegateTest::WKBrowsingContextLoadDelegateTest):
        (WKBrowsingContextLoadDelegateTest::SetUp):
        (WKBrowsingContextLoadDelegateTest::TearDown):
        (-[SimpleLoadDelegate browsingContextControllerDidFinishLoad:]):
        (TEST_F):
        Add basic testing for WKBrowsingContextLoadDelegate.

2011-10-25  Alexey Proskuryakov  <ap@apple.com>

        make-script-test-wrappers should not look outside fast/js
        https://bugs.webkit.org/show_bug.cgi?id=66357

        Reviewed by Maciej Stachowiak.

        * Scripts/make-script-test-wrappers: Don't look for template files everywhere, only support
        fast/js.

2011-10-25  Adam Barth  <abarth@webkit.org>

        Add a --make option to update-webkit to engage the Makefile-based build system
        https://bugs.webkit.org/show_bug.cgi?id=70847

        Reviewed by Dimitri Glazkov.

        I can never remember what crazy environment variables I'm supposed to
        set to tell GYP what to do.

        * Scripts/update-webkit:

2011-10-25  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Force layout when sending events.
        https://bugs.webkit.org/show_bug.cgi?id=70357

        Reviewed by Antonio Gomes.

        Some tests such as editing/input/page-up-down-scrolls.html rely on the
        scrollbars being properly set up during the onload events.
        Document::implicitClose(), however, dispatches the onload events before
        calling FrameView::layout(), so these tests usually fail.

        We now do the same as the GTK+ and Chromium ports and manually force the
        layout when dispatching events.

        * DumpRenderTree/efl/EventSender.cpp:
        (sendMouseEvent):
        (keyDownCallback):

2011-10-25  Daniel Bates  <dbates@rim.com>

        build-webkit --clean should only clean build directory for CMake-based ports
        https://bugs.webkit.org/show_bug.cgi?id=70834

        Reviewed by Antonio Gomes.

        Currently build-webkit --clean both cleans the build directory and builds WebKit for
        CMake-based ports. Instead, build-webkit --clean should only clean up the build directory
        as per its description in the usage message of build-webkit.

        * Scripts/webkitdirs.pm:
        (buildCMakeProjectOrExit):

2011-10-25  Anna Cavender  <annacc@chromium.org>

        Enable running of track layout tests for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=70803

        Reviewed by Adam Barth.
        
        Make DumpRenderTree/TestShell always run with track enabled
        (equivalent of --enable-video-track).

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2011-10-25  Vamshikrishna Yellenki  <vamshi@motorola.com>

        [WK2]Main window never gets focus using TAB key in WebKit2 GTK+.
        https://bugs.webkit.org/show_bug.cgi?id=70603

        Reviewed by Gustavo Noronha Silva.

        * MiniBrowser/gtk/BrowserWindow.c:
        (focus):
        (unFocus):
        (browserWindowUIClientInit):

2011-10-25  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10337033> DOMRangeOfString:relativeTo:options has problems with -webkit-user-select: none

        Reviewed by Adam Roben.

        * TestWebKitAPI/Tests/mac/DOMRangeOfString.mm:
        (TestWebKitAPI::TEST):

2011-10-25  Eric Seidel  <eric@webkit.org>

        WIN: editing tests fail under NRWT because editing delegate callbacks aren't stripped
        https://bugs.webkit.org/show_bug.cgi?id=64471

        Reviewed by Adam Roben.

        Speculative fix.

        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:

2011-10-24  Mikhail Naganov  <mnaganov@chromium.org>

        Fix bug summary when rolling Chromium DEPS to LKGR.
        https://bugs.webkit.org/show_bug.cgi?id=69917

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/commands/roll.py:
        * Scripts/webkitpy/tool/commands/roll_unittest.py:

2011-10-24  Ivan Briano  <ivan@profusion.mobi>

        [EFL] Build fix. Add include path to find npapi.h
        https://bugs.webkit.org/show_bug.cgi?id=70730

        Unreviewed build fix.

        * DumpRenderTree/efl/CMakeLists.txt: Add include path for npapi.h

2011-10-24  Eric Seidel  <eric@webkit.org>

        Plugin tests are failing after switching WK2 to NRWT
        https://bugs.webkit.org/show_bug.cgi?id=70760

        Reviewed by Simon Fraser.

        Perpetuate this horrible hack.

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-10-24  Eric Seidel  <eric@webkit.org>

        NRWT doesn't support ORWT's --root option, but should
        https://bugs.webkit.org/show_bug.cgi?id=70416

        Reviewed by Dirk Pranke.

        Add support for ORWT's --root option which is used for
        running tests with a nightly build of WebKit.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/base.py:
         - webkit_build_path was never called by any code, removed.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-10-24  David Levin  <levin@chromium.org>

        check-webkit-style complains about WEBKIT_EXPORT in test/WebUnitTests.h
        https://bugs.webkit.org/show_bug.cgi?id=70747

        Reviewed by Tony Chang.

        * Scripts/webkitpy/style/checkers/cpp.py: Allow WEBKIT_EXPORT in tests dir.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Corresponding test.

2011-10-24  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Crash when running pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=70725

        Reviewed by Chang Shu.

        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2011-10-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove g_thread_init() calls
        https://bugs.webkit.org/show_bug.cgi?id=70717

        Reviewed by Xan Lopez.

        With newer glib it's not needed anymore and with previous versions
        it was already called by g_type_init().

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (main):
        * GtkLauncher/main.c:
        (main):
        * MiniBrowser/gtk/main.c:
        (main):

2011-10-24  Alejandro G. Castro  <alex@igalia.com>

        [WK2] [GTK] WebKitTestRunner crashes with heap corruption
        https://bugs.webkit.org/show_bug.cgi?id=69403

        We did not added autotoolsconfig.h to the config.h file and we
        were adding Platform.h without the config.h in the
        WebKitTestRunnerPrefix.h. Added the autotoolsconfig.h include in
        the Prefix file.

        Reviewed by Martin Robinson.

        * WebKitTestRunner/WebKitTestRunnerPrefix.h:

2011-10-23  Tomasz Morawski  <t.morawski@samsung.com>

        [EFL] Remove unused code from EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=70590

        Reviewed by Andreas Kling.

        Removed unused function on_closeWindow from EWebLauncher

        * EWebLauncher/main.c:

2011-10-23  Luke Macpherson   <macpherson@chromium.org>

        Add watchlist for WebCore/css and put myself on it.
        https://bugs.webkit.org/show_bug.cgi?id=70701

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/watchlist:
        Add watchlist for WebCore/css and put myself on it.

2011-10-23  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        [GTK] Implement KeyDown function for WebKit2 EventSender.
        https://bugs.webkit.org/show_bug.cgi?id=69410

        Reviewed by Martin Robinson.

        Implement the KeyDown function on Gtk platform.

        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp: Added.
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::dispatchEvent):
        (WTR::getModifiers):
        (WTR::getGDKKeySymForKeyRef):
        (WTR::EventSenderProxy::keyDown):

2011-10-22  Zan Dobersek  <zandobersek@gmail.com>

        [WK2][GTK] run-launcher script fails after testing WK2 tests
        https://bugs.webkit.org/show_bug.cgi?id=70676

        Reviewed by Andreas Kling.

        Pass the '-2' flag instead of '--webkit-test-runner' when executing
        run-launcher script after testing with WebKitTestRunner.

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2011-10-22  Zan Dobersek  <zandobersek@gmail.com>

        [WK2][GTK] Missing env variables cause WKTR to crash
        https://bugs.webkit.org/show_bug.cgi?id=70674

        Reviewed by Martin Robinson.

        Set two environment variables that the Gtk's port of WebKitTestRunner
        depends on and crashes if they're not explicitly set by the user.
        Also modify the setting of the WEBKIT_INSPECTOR_PATH variable so it
        properly uses the _build_path method.

        * Scripts/webkitpy/layout_tests/port/gtk.py: Set
        TEST_RUNNER_INJECTED_BUNDLE_FILENAME and TEST_RUNNER_TEST_PLUGIN_PATH
        environment variables.

2011-10-21  Filip Pizlo  <fpizlo@apple.com>

        Bencher script doesn't measure GC times accurately
        https://bugs.webkit.org/show_bug.cgi?id=70588

        Reviewed by Geoff Garen.
        
        Added two new options which allow different ways of measuring GC times:
        
        --measure-gc, which omits calls to gc() between benchmark invocations.
        This option takes an optional argument, which is the name of the
        VM in which to enable this feature. This allows comparing a single VM
        against itself, with and without GC.
        
        --rerun <N>, which causes each sample measurement to include N invocations
        which do not have gc() calls between them. The default is N = 1, which
        results in the same behavior as before.
        
        You can use either --measure-gc or --rerun <N> for N > 1 (preferably
        N >= 3) to get more of a contribution from GC to the measured times.
        --rerun results in tighter confidence intervals than --measure-gc, since
        it amortizes GC effects in each sample, while with --measure-gc some
        samples will see GC and some won't leading to a higher standard devation
        and thus requiring more samples to reduce confidence intervals to
        managable levels.

        * Scripts/bencher:

2011-10-21  Sam Weinig  <sam@webkit.org>

        Remove ability to create a WKView without a WKContextRef and WKPageGroupRef
        https://bugs.webkit.org/show_bug.cgi?id=70653

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate newWindow:]):
        (-[BrowserAppDelegate openPanelDidEnd:returnCode:contextInfo:]):
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController initWithContext:pageGroup:]):
        (-[BrowserWindowController windowWillClose:]):
        (createNewPage):
        (-[BrowserWindowController awakeFromNib]):
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit2Test):
        Update testing code to pass a PageGroup as necessary.

2011-10-21  Leandro Pereira  <leandro@profusion.mobi>

        webkitpy: Teach NRWT about the EFL port
        https://bugs.webkit.org/show_bug.cgi?id=70637

        Allows using ``efl'' as a platform when executing NRWT.

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/port/efl.py: Added.
        * Scripts/webkitpy/layout_tests/port/efl_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/factory.py: Adjust factory to make EflPort objects
        when using PortFactory.get(port_name='efl').

2011-10-21  Devdatta Deshpande  <pwjd73@motorola.com>

        [Gtk] mousemove event always has metaKey == true
        https://bugs.webkit.org/show_bug.cgi?id=35299

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/EventSender.cpp:
        (gdkModifierFromJSValue): GDK_META_MASK is used to represent metaKey for platform GTK mouse and
        keyboard events. So making it in sync with WebCore files.
        (mouseMoveToCallback): Sending modifier keys state for mouse move event.

2011-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        watchlist: Add a new entry for WebKit2 GTK+ public API
        https://bugs.webkit.org/show_bug.cgi?id=70601

        Reviewed by Philippe Normand.

        Subscribe myself to WebKit2 GTK+ API patches. Also add a message
        for patches that might include new API that points to the WebKit2
        GTK+ API guidelines.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-21  Simon Hausmann  <simon.hausmann@nokia.com>

        Remove QtScript source code from WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=64088

        Reviewed by Tor Arne Vestbø.

        Removed dead code that isn't developed anymore.

        * Scripts/webkitpy/style/checker_unittest.py:

2011-10-20  Eric Seidel  <eric@webkit.org>

        Switch webkit2 bot to NRWT
        https://bugs.webkit.org/show_bug.cgi?id=56729

        Reviewed by Adam Barth.

        Move the WK2 bot to using NRWT instead of ORWT, as announced on webkit-dev:
        https://lists.webkit.org/pipermail/webkit-dev/2011-October/018337.html

        * Scripts/run-webkit-tests:
        (runningOnBuildBot):
        (useNewRunWebKitTests):

2011-10-20  Eric Seidel  <eric@webkit.org>

        NRWT is asserting on DRT due to lack of newline when processing line from DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=70585

        Reviewed by Adam Barth.

        This really should be an assert, as this inidicates a programming error in either DRT or NRWT.
        However since DRT was functioning fine before in Qt, we'll make this an error log for now
        and once we find the root cause flip this back to an assert.

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-10-20  Yuta Kitamura  <yutak@chromium.org>

        Unreviewed, rolling out r98064.
        http://trac.webkit.org/changeset/98064
        https://bugs.webkit.org/show_bug.cgi?id=64788

        Broke Mac bots.

        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:

2011-10-20  Yuta Kitamura  <yutak@chromium.org>

        WebSocket: Connecting to localhost:8880 takes one second on Windows
        https://bugs.webkit.org/show_bug.cgi?id=64788

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        Bind to "localhost" instead of "127.0.0.1" to let pywebsocket listen on both
        IPv4 and IPv6 addresses. This should prevent the test reserved-opcodes.html
        from timing out on Windows, because this test tries to open a lot of
        connections to localhost and each attempt takes one second to fall back from
        IPv6 to IPv4 on Windows (I have no idea why Windows works like this, though).

2011-10-20  Ryosuke Niwa  <rniwa@webkit.org>

        nrwt: newly generated results are put in cross-platform directory
        https://bugs.webkit.org/show_bug.cgi?id=68931

        Reviewed by Dirk Pranke.

        The bug was caused by SingleTestRunner._add_missing_baselines's always calling _save_baseline_data
        with generate_new_baseline set to False. Fixed the bug by always passing True when .png file is missing
        (because png images are typically different on each platform), and passing True when .txt file is missing
        and the actual result's first line matches the regular expression "layer at \(\d+,\d+\) size \d+x\d+".

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py: Changed the expectation
        and added a test case.

2011-10-20  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Adding myself to watchlist.

        * Scripts/webkitpy/common/config/watchlist:
        Add "ChromiumDumpRenderTree" and "Forms" definitions, and cc them to me.

2011-10-20  Nico Weber  <thakis@chromium.org>

        [chromium/mac] Add support for building with make
        https://bugs.webkit.org/show_bug.cgi?id=70455

        Reviewed by Adam Barth.

        Depends on http://codereview.chromium.org/8352029/
        `GYP_GENERATORS=make Tools/Scripts/update-webkit --chromium` will
        create a toplevel Makefile.chromium.

        If that file exists and is newer than Source/WebKit/chromium/WebKit.xcodeproj,
        `Tools/Scripts/build-webkit --chromium` will build with make instead of
        xcodebuild.

        Also let nrwt use a binary from out/ if it exists.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        (isChromiumMacMake):
        (determineIsChromiumMacMake):
        (buildChromium):

2011-10-20  Eric Seidel  <eric@webkit.org>

        Possible REGRESSION(97879): NRWT fails when DumpRenderTree crashes
        https://bugs.webkit.org/show_bug.cgi?id=70524

        Reviewed by Adam Barth.

        This is a speculative fix, since I do not use a platform
        which outputs crashlogs over stderr.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-10-20  Eric Seidel  <eric@webkit.org>

        REGRESSION(97879): Pixel tests no longer work with NRWT on Mac
        https://bugs.webkit.org/show_bug.cgi?id=70492

        Reviewed by Adam Barth.

        The bug turned out to be that I was assuming the block.content
        would be empty before the binary content following Content-Length
        was read inside _read_block.  Turns out its not, due to extra newlines
        and "ExpectedHash" header.

        In the process of trying to figure out what was going wrong I ended up
        cleaning up our newline usage in DumpRenderTree a little.  Moved
        two error messages from stdout to stderr, and fixed a little code indent/whitespace.

        I also fixed ServerProcess to use "deadline" everywhere instead of timeout
        per Adam's request in the original bug.

        * DumpRenderTree/PixelDumpSupport.cpp:
        (dumpWebViewAsPixelsAndCompareWithExpected):
        * DumpRenderTree/cg/ImageDiffCG.cpp:
        (main):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (restoreMainDisplayColorProfile):
        (setupMainDisplayColorProfile):
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-10-20  Tony Chang  <tony@chromium.org>

        [chromium] Remove <stdint.h> from ImageDiff and use
        unsigned int instead of uint32_t.

        Unreviewed, fixing the chromium win build.

        * DumpRenderTree/chromium/ImageDiff.cpp:
        (Image::pixelAt):
        (Image::setPixelAt):
        (maxOf3):
        (getRedComponent):
        (getGreenComponent):
        (getBlueComponent):
        (weightedPercentageDifferent):
        (createImageDiff):

2011-10-20  Hao Zheng  <zhenghao@chromium.org>

        [Chromium] Reduce dependencies of ImageDiff to compile it for Android.
        https://bugs.webkit.org/show_bug.cgi?id=69997

        Reviewed by Tony Chang.

        This change is required to make ImageDiff for Android, and can benefit
        other platforms, too. On Android, most targets are built as
        toolsets:target. while ImageDiff needs to be built as toolsets:host.
        Currently, building the standalone target of ImageDiff depends on about
        85 other targets (try  make ImageDiff'), which is inefficient. After the
        change, ImageDiff only depends on webkit_support_gfx, which in turn
        depends on libpng and zlib.

        * DumpRenderTree/chromium/ImageDiff.cpp:
        (main):

2011-10-20  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Unreviewed DumpRenderTree build fix.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::addChromeInputField): Add stub.
        (LayoutTestController::removeChromeInputField): Ditto.
        (LayoutTestController::focusWebView): Ditto.
        (LayoutTestController::setBackingScaleFactor): Ditto.

2011-10-20  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Plug ImageDiff/DumpRenderTree on CMake build system
        https://bugs.webkit.org/show_bug.cgi?id=70142

        Reviewed by Gustavo Noronha Silva.

        * CMakeListsEfl.txt: Include DRT CMakeLists.
        * DumpRenderTree/efl/CMakeLists.txt: Added.

2011-10-20  Philippe Normand  <pnormand@igalia.com>

        [style] Allow usage of NULL in gst_*
        https://bugs.webkit.org/show_bug.cgi?id=70498

        Reviewed by David Levin.

        * Scripts/webkitpy/style/checkers/cpp.py: Simplified the detection
        of gst_ calls. Now just ignore NULL in all of them.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Test for above change.

2011-10-20  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Unreviewed. Build fix after r97043.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues): Use ewk_view_scale_set() instead of ewk_view_page_scale().
        * DumpRenderTree/efl/EventSender.cpp:
        (scalePageByCallback): Ditto.

2011-10-20  Philippe Normand  <pnormand@igalia.com>

        Unreviewed. Adding myself to watchlists.
        * Scripts/webkitpy/common/config/watchlist:

2011-10-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach new-run-webkit-tests about #CRASHED and #CRASHED - WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=63683

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-10-19  Jochen Eisinger  <jochen@chromium.org>

        Chromium doesn't support git branch builds, so don't add the branch to the product dir
        https://bugs.webkit.org/show_bug.cgi?id=70449

        Reviewed by Eric Seidel.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):

2011-10-19  Ojan Vafai  <ojan@chromium.org>

        Unreviewed. Adding myself to watchlists.
        * Scripts/webkitpy/common/config/watchlist:

2011-10-19  Tom Zakrajsek  <tomz@codeaurora.org>

        Add a suggest-nominations command to webkit-patch for computing potential committer/reviewer nominations
        https://bugs.webkit.org/show_bug.cgi?id=62166

        Reviewed by Eric Seidel.

        Included options to control committer/reviewer patch count requirements,
        an age-limit on patches, and verbose output for more in-depth analysis.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/suggestnominations.py: Added.
        * Scripts/webkitpy/tool/commands/suggestnominations_unittest.py: Added.

2011-10-19  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests -2 was crashing due to both "java" and "java/" being listed in Skipped files.
        Make NRWT normalize directory names in Skipped files during parsing.

        Unreviewed.  Very simple (tested) change.

        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-10-19  David Levin  <levin@chromium.org>

        watchlist: Should be more robust to bad regex.
        https://bugs.webkit.org/show_bug.cgi?id=69486

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/watchlist: Change the instructions due to
          watchlist being checked by check-webkit-style (bug 69487) and remove the .* from file
          patterns since they are no longer anchored on the right hand side.
        * Scripts/webkitpy/common/watchlist/amountchangedpattern.py: Change *pattern to take a compiled regex directly.
        * Scripts/webkitpy/common/watchlist/amountchangedpattern_unittest.py: Ditto.
        * Scripts/webkitpy/common/watchlist/changedlinepattern.py: Ditto.
        * Scripts/webkitpy/common/watchlist/changedlinepattern_unittest.py: Ditto.
        * Scripts/webkitpy/common/watchlist/filenamepattern.py: Ditto.
        * Scripts/webkitpy/common/watchlist/filenamepattern_unittest.py: Ditto and change a test now that
        filenames are no longer anchored on the right hand side.
        * Scripts/webkitpy/common/watchlist/watchlistparser.py: Catch regex errors and log them as errors.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py: Add some tests to verify that bad regexes
        don't kill everything.

2011-10-19  David Levin  <levin@chromium.org>

        watchlist: Add a stylecheck to do validity checks for the watchlist config.
        https://bugs.webkit.org/show_bug.cgi?id=69487

        Reviewed by Adam Barth.

        * Scripts/webkitpy/style/checker.py: Add the watchlist file type.
        * Scripts/webkitpy/style/checkers/watchlist.py: Added.
        * Scripts/webkitpy/style/checkers/watchlist_unittest.py: Added.

2011-10-19  Eric Seidel  <eric@webkit.org>

        NRWT ServerProcess can't read lines from stderr and stdio separately
        https://bugs.webkit.org/show_bug.cgi?id=70435

        Reviewed by Adam Barth.

        This is the underlying bug behind our lack of WK2 support, and timeout detection on Windows.
        DRT expects RWT to read one line at a time from stderr and stdout independently.
        This allows DRT to communicate errors over stderr and have them responded to immediately
        regardless of what state the stdio stream may be in.  Previously NRWT's ServerProcess
        class only exposed a read_line function which would read a line from stdout
        and batch all output from stderr into an error buffer.  Callers would only be able
        to respond to commands over stderr if they happened to correspond with a stdout line boundary.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-10-19  Chang Shu  <cshu@webkit.org>

        [Qt] Support WK1-only Skipped list
        https://bugs.webkit.org/show_bug.cgi?id=70254

        Reviewed by Csaba Osztrogonác.

        Added a new search path qt-wk1 for skipping WK1-only tests.

        * Scripts/webkitpy/layout_tests/port/qt.py: NRWT
        * Scripts/old-run-webkit-tests: ORWT

2011-10-19  Gabor Rapcsanyi  <rgabor@webkit.org>

        [GTK] Enable to use built-product-archive on GTK platform
        https://bugs.webkit.org/show_bug.cgi?id=70319

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/built-product-archive:

2011-10-18  David Levin  <levin@chromium.org>

        watchlist: Should try to run if it can and not throw on mistakes.
        https://bugs.webkit.org/show_bug.cgi?id=70358

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/system/outputcapture.py: Add the ability to capture log output.
        * Scripts/webkitpy/common/watchlist/watchlistloader_unittest.py: Adapt to the logging of errors.
        * Scripts/webkitpy/common/watchlist/watchlistparser.py: Change to log problems and fix problems when found.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py: Adapt to the logging of errors.
        * Scripts/webkitpy/common/watchlist/watchlistrule.py: Expose a way to remove instructions.
        * Scripts/webkitpy/common/watchlist/watchlistrule_unittest.py: Test the new function.

2011-10-18  Sam Weinig  <sam@webkit.org>

        Move uses of C-SPI out of WKView.h and into WKViewPrivate.h
        https://bugs.webkit.org/show_bug.cgi?id=70387

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/BrowserWindowController.m:
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorOnBack.mm:
        * TestWebKitAPI/mac/JavaScriptTestMac.mm:
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        Update to include WKViewPrivate.h where necessary.

2011-10-18  Joseph Pecoraro  <joepeck@webkit.org>

        Web Inspector: Some localizedStrings.js Updates
        https://bugs.webkit.org/show_bug.cgi?id=70365

        Reviewed by Darin Adler.

        * Scripts/check-inspector-strings:
        Updated to the new webkitpy way to determine checkout root.

        * Scripts/webkitdirs.pm:
        (copyInspectorFrontendFiles):
        Made it so build-webkit --inspector-frontend copies over
        the localizedStrings.js file as well as the frontend files.

2011-10-18  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Clear list of visited pages before each test.
        https://bugs.webkit.org/show_bug.cgi?id=70355

        Reviewed by Antonio Gomes.

        r97596 uncovered a bug in the implementation: the list of visited
        links was not cleared between tests, which caused tests such as
        fast/repaint/outline-repaint-glitch.html to be flaky (the link color
        changed depending on whether fast/repaint/border-repaint-glitch.html
        was visited before or not).

        Call ewk_history_clear to make sure the visited links list does not
        persist between tests.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):

2011-10-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Split TestExpectationsEditor into its own file.
        https://bugs.webkit.org/show_bug.cgi?id=70348

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor.py: Copied from Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py.
        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Adjusted for change.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Ditto.
        * Scripts/webkitpy/tool/servers/gardeningserver.py: Ditto.

2011-10-18  Ryosuke Niwa  <rniwa@webkit.org>

        [Chromium] buildbot runs nrwt with --chromium instead of --chromium-cg-mac
        https://bugs.webkit.org/show_bug.cgi?id=70313

        Reviewed by Adam Barth.

        Fixed the bug by passing --platform --chromium-cg-mac in RunWebKitTests. We can't always add
        this parameter because build-webkit and other scripts don't accept it.

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

2011-10-18  Adam Barth  <abarth@webkit.org>

        Subscribe myself to WebIDL changes
        https://bugs.webkit.org/show_bug.cgi?id=70341

        Reviewed by David Levin.

        I've also added some documentation and refactored my previous
        subscriptions to make it eaiser for others to subscribe as well.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Add myself to the newfangled watchlist plumbing.
        https://bugs.webkit.org/show_bug.cgi?id=70338

        Reviewed by David Levin.

        * Scripts/webkitpy/common/config/watchlist: Added sheepishly.

2011-10-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix a unit test in TestFailures.
        https://bugs.webkit.org/show_bug.cgi?id=70337

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/NewBugForm_unittests.js: Turns out,
            the value of a method property should always be lowercase.

2011-10-18  Adam Barth  <abarth@webkit.org>

        Always enable ENABLE(XPATH)
        https://bugs.webkit.org/show_bug.cgi?id=70217

        Reviewed by Eric Seidel.

        * Scripts/build-webkit:

2011-10-18  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic should not report flaking in expected failures as failures.
        https://bugs.webkit.org/show_bug.cgi?id=70279

        Reviewed by Adam Barth.

        On the bots, flakes that are already expected to fail aren't reported as failures (they keep the bot green).
        For example, if TEXT failure is expected, a TEXT TIMEOUT result will not cause the redness. We should do the
        same for garden-o-matic.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js: Spuriously changed to use Array iterators rather than jQuery APIs,
            rewrote the logic for determining expected or unexpected failures as a central analysis tool.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js: Added unit tests.

2011-10-18  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] Support for client-based geolocation
        https://bugs.webkit.org/show_bug.cgi?id=64970

        Reviewed by Martin Robinson.

        Add support for testing client-based geolocation tests in DumpRenderTree.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Reset GeolocationClientMock.
        (createWebView): Create web view after declaring DumpRenderTree mode.
        That way a mock client for geolocation is used instead of a GeoClue
        client if a web view is created when testing.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Implement functions for
        geolocation layout tests.
        (LayoutTestController::setMockGeolocationPosition):
        (LayoutTestController::setMockGeolocationError):
        (LayoutTestController::setGeolocationPermission):
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * Scripts/build-webkit: Note that the Gtk port is using client-based
        geolocation, even though changing this flag has no effect on compilation.

2011-10-07  Andrey Kosyakov  <caseq@chromium.org>

        [Chromium] suppress console output from DevTools window
        https://bugs.webkit.org/show_bug.cgi?id=69632

        Reviewed by Pavel Feldman.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::showDevTools):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didAddMessageToConsole):
        (WebViewHost::reset):
        (WebViewHost::setLogConsoleOutput):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-10-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r97735.
        http://trac.webkit.org/changeset/97735
        https://bugs.webkit.org/show_bug.cgi?id=70317

        some people apparently use build-jsc with the qt port without
        building webkit first (Requested by torarne on #webkit).

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (buildQMakeProject):
        (buildQMakeQtProject):

2011-10-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove dead code in build-webkit

        build-webkit will iterate over a list of subdirectories to build,
        but this feature is only used by the Apple ports. For QtWebKit we
        always pass an empty directory to buildQMakeProject, which makes
        the logic for dealing with sub-projects in buildQMakeProject just
        added noise.

        If we do want this feature at some point, we should redo it in
        the context of the upcoming build system changes for Qt.

        Reviewed by Simon Hausmann.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (buildQt):

2011-10-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Remove traces of Symbian support from the build scripts

        Reviewed by Simon Hausmann.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        (argumentsForConfiguration):
        (usesPerConfigurationBuildDirectory):
        (buildQMakeProject):

2011-10-18  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r97672.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-10-17  Kent Tamura  <tkent@chromium.org>

        A follow-up of r97716.
        https://bugs.webkit.org/show_bug.cgi?id=68803

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::reset): Initialize m_dumpCreateView.

2011-10-17  Jochen Eisinger  <jochen@chromium.org>

        [chromium] add LayoutTestController.dumpCreateView() to monitor calls to WebViewClient::createView
        https://bugs.webkit.org/show_bug.cgi?id=68803

        Reviewed by Nate Chapin.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::dumpCreateView):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::shouldDumpCreateView):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createView):

2011-10-17  Nate Chapin  <japhet@chromium.org>

        Add myself to watchlists, and add a watch
        for Source/WebCore/loader/.
        https://bugs.webkit.org/show_bug.cgi?id=70263

        Reviewed by David Levin.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-17  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Make non-recognized keys work in events as well.
        https://bugs.webkit.org/show_bug.cgi?id=69860

        Reviewed by Antonio Gomes.

        fast/forms/select-type-ahead-non-latin.html is the canonical case we fix
        here: it has a select box with a few non-latin options, and one of them
        is selected via the keyboard.

        In this specific case, we need to make EventHandler::keyEvent send a
        keyPressEvent to SelectElement, so that
        SelectElement::defaultEventHandler calls typeAheadFind(). This happens
        only when PlatformKeyEvent::text() is not empty, which was not the case
        so far.

        * DumpRenderTree/efl/EventSender.cpp:
        (keyDownCallback):

2011-10-17  Alok Priyadarshi  <alokp@chromium.org>

        Add layout tests for WebPlugin compositor path
        https://bugs.webkit.org/show_bug.cgi?id=69027

        Reviewed by James Robinson.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestWebPlugin.cpp: Added.
        (premultiplyAlpha):
        (TestWebPlugin::TestWebPlugin):
        (TestWebPlugin::~TestWebPlugin):
        (TestWebPlugin::mimeType):
        (TestWebPlugin::initialize):
        (TestWebPlugin::destroy):
        (TestWebPlugin::updateGeometry):
        (TestWebPlugin::parsePrimitive):
        (TestWebPlugin::parseColor):
        (TestWebPlugin::parseOpacity):
        (TestWebPlugin::initScene):
        (TestWebPlugin::drawScene):
        (TestWebPlugin::destroyScene):
        (TestWebPlugin::initProgram):
        (TestWebPlugin::initPrimitive):
        (TestWebPlugin::drawPrimitive):
        (TestWebPlugin::loadShader):
        (TestWebPlugin::loadProgram):
        * DumpRenderTree/chromium/TestWebPlugin.h: Added.
        (TestWebPlugin::scriptableObject):
        (TestWebPlugin::paint):
        (TestWebPlugin::updateFocus):
        (TestWebPlugin::updateVisibility):
        (TestWebPlugin::acceptsInputEvents):
        (TestWebPlugin::handleInputEvent):
        (TestWebPlugin::didReceiveResponse):
        (TestWebPlugin::didReceiveData):
        (TestWebPlugin::didFinishLoading):
        (TestWebPlugin::didFailLoading):
        (TestWebPlugin::didFinishLoadingFrameRequest):
        (TestWebPlugin::didFailLoadingFrameRequest):
        (TestWebPlugin::Scene::Scene):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createPlugin):

2011-10-17  Ryosuke Niwa  <rniwa@webkit.org>

        [nrwt] Add new category for MISSING
        https://bugs.webkit.org/show_bug.cgi?id=69990

        Reviewed by Dirk Pranke.

        Treat missing results as a new category in summerize_results.

        Because Chromium port wants to turn bots red when there are tests with missing results,
        extracted the logic to compute the exit code as exit_code_from_summarized_results in
        base and chromium ports.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-10-17  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic operations fail because of CSP.
        https://bugs.webkit.org/show_bug.cgi?id=70249

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html: Added gardening server to the policy.

2011-10-17  Ada Chan  <adachan@apple.com>

        Add a test to call WKPageLoadAlternateHTMLString() with a non-directory URL.
        https://bugs.webkit.org/show_bug.cgi?id=70168

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/WebKit2/LoadAlternateHTMLStringWithNonDirectoryURL.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST): Call WKPageLoadAlternateHTMLString() with a file URL and make sure it finishes loading.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Add the new file.

2011-10-17  Darin Adler  <darin@apple.com>

        Add some more *.pyc ignores in directories with Python scripts.

        * QueueStatusServer: Added property svn:ignore.
        * Scripts/webkitpy/common/watchlist: Added property svn:ignore.
        * Scripts/webkitpy/layout_tests/controllers: Added property svn:ignore.
        * Scripts/webkitpy/layout_tests/views: Added property svn:ignore.

2011-10-17  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2][meta] Fix failing API tests
        https://bugs.webkit.org/show_bug.cgi?id=70236

        Reviewed by Csaba Osztrogonác.

        In order to run WebKit2 API tests we need the WebProcess to be in
        the path so let's add the bin directory when running the API tests of Qt.

        * Scripts/run-qtwebkit-tests:

2011-10-17  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [Qt][WK2] Build dependency problems
        https://bugs.webkit.org/show_bug.cgi?id=68456

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:
        (buildQMakeProject):

2011-10-17  Holger Hans Peter Freyther  <holger@moiji-mobile.com>

        [build] Introduce Qt/SH4 buildbot
        https://bugs.webkit.org/show_bug.cgi?id=70227

        Reviewed by Adam Roben.

        Add buildslave for Linux/Qt/SH4.

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

2011-10-16  Adam Barth  <abarth@webkit.org>

        Always enable ENABLE(DOM_STORAGE)
        https://bugs.webkit.org/show_bug.cgi?id=70189

        Reviewed by Eric Seidel.

        * Scripts/build-webkit:
        * waf/build/settings.py:

2011-10-15  Adam Barth  <abarth@webkit.org>

        Rename ENABLE(TILED_BACKING_STORE) to USE(TILED_BACKING_STORE)
        https://bugs.webkit.org/show_bug.cgi?id=70194

        Reviewed by Daniel Bates.

        * Scripts/build-webkit:

2011-10-15  Ojan Vafai  <ojan@chromium.org>

        run-webkit-tests should accept --child-processes
        https://bugs.webkit.org/show_bug.cgi?id=69713

        Reviewed by Adam Barth.

        Only set --child-processes=1 if --child-processes it not
        passed on the commandline.

        * Scripts/run-webkit-tests:

2011-10-15  Daniel Bates  <dbates@webkit.org>

        Extract common gdb code into its own function; Remove script gdb-safari
        https://bugs.webkit.org/show_bug.cgi?id=68499

        Reviewed by David Kilzer.

        Almost identical code is used in webkitdirs::{debugMiniBrowser, debugWebKitTestRunner,
        runSafari}() and in the script gdb-safari to launch gdb to debug an application.
        We should extract the common parts into a function that can be shared by all callers
        so as to remove duplicate code.

        As a side effect of removing duplicate code we can remove the script gdb-safari since
        its code has been incorporated into webkitdirs::debugSafari() which is called by the
        script debug-safari.

        * Scripts/debug-safari: Modified to call webkitdirs::debugSafari().
        * Scripts/gdb-safari: Removed.
        * Scripts/webkitdirs.pm:
        (execMacWebKitAppForDebugging): Added; Extracted common debugging code from
        debugMiniBrowser(), debugWebKitTestRunner(), runSafari() and
        script gdb-safari to here.
        (debugSafari): Added.
        (runSafari): Extracted debugging code to debugSafari() and debugMacWebKitApp();
        Also, return the exit status of WebKit launcher (WebKit.exe) on Windows. Currently,
        runSafari() always returns 1 on Windows and the script run-safari exits using this
        value as its exit status. Hence, the script run-safari always exits with a nonzero
        exit status (i.e. abnormal termination) on Windows. Instead, we should return the
        exit status of the WebKit launcher application.
        (debugMiniBrowser): Modified to call debugMacWebKitApp().
        (debugWebKitTestRunner): Ditto.

2011-10-15  Robert Hogan  <robert@webkit.org>

        [webkit-patch] Put Source/Tools changes at the top of patches, LayoutTests at the bottom
        https://bugs.webkit.org/show_bug.cgi?id=70056

        Reviewed by Adam Barth.

        The preferred file-order for patches is LayoutTests at the end and
        ChangeLogs before everything else in a subdirectory. Specify this in a git 'orderfile' and use 
        it when creating patches for review and landing.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/config/orderfile: Added.

2011-10-15  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        [Qt] [Symbian] Remove support for the Symbian platform for the QtWebKit port
        https://bugs.webkit.org/show_bug.cgi?id=69920

        Reviewed by Kenneth Rohde Christiansen.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::screenshot):
        (LauncherWindow::showFPS):
        (LauncherWindow::updateFPS):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::buildUI):
        * Scripts/webkitpy/style/checker.py: Remove rules for the
        WebKit/qt/symbian/platformplugin directory.
        * Scripts/webkitpy/style/checker_unittest.py:
        * Tools.pro:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp:
        (WTR::LayoutTestController::platformInitialize):
        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::isExistingLibrary):
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-10-15  Adam Barth  <abarth@webkit.org>

        Fix typo in webkitpy help
        https://bugs.webkit.org/show_bug.cgi?id=70169

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/tool/commands/upload.py:

2011-10-15  Tony Chang  <tony@chromium.org>

        fix another typo in treemap.html
        https://bugs.webkit.org/show_bug.cgi?id=70149

        Reviewed by Ojan Vafai.

        Fixes a bug where #treemapfocus=LayoutTests%2Fhttp didn't focus the http tests.

        * TestResultServer/static-dashboards/treemap.html:

2011-10-14  Adam Barth  <abarth@webkit.org>

        Hide status bubbles from queues which are very far behind
        https://bugs.webkit.org/show_bug.cgi?id=70133

        Reviewed by Eric Seidel.

        The mac-ews is so far behind that we shouldn't show its status bubble.
        The status bubble just makes contributors sad.

        * QueueStatusServer/handlers/statusbubble.py:

2011-10-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Write unit test to ensure style-checker-filter option is passed properly in webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=70143

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/download_unittest.py: Added a test for land-cowboy. Not so cowboy after all.
        * Scripts/webkitpy/tool/steps/checkstyle.py: Fixed a bug, discovered by the newly added test.

2011-10-14  David Levin  <levin@chromium.org>

        watchlist: Add a validation check for the email names in the list.
        https://bugs.webkit.org/show_bug.cgi?id=70154

        Reviewed by Adam Barth.

        If an email is listed which doesn't have a bugzilla log in, then any emails
        added to the bug along with that email will fail to happen, so try to prevent this
        from happening by validating that emails added to the watchlist are known to be
        contributors.

        * Scripts/webkitpy/common/config/committers.py: Add my other email aliases for bugzilla.
        * Scripts/webkitpy/common/watchlist/watchlistparser.py: Add the check.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py: A unit test for the check.

2011-10-14  David Levin  <levin@chromium.org>

        watchlist: If the style check fails, then the watchlist will not be run.
        https://bugs.webkit.org/show_bug.cgi?id=69484

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/queues.py: Run the watch list even
        if the style part fails and don't allow watch list failures turn the
        bot run red.
        * Scripts/webkitpy/tool/commands/queues_unittest.py: Appropriate unit tests.
        * Scripts/webkitpy/tool/mocktool.py: Add support to make an executive command throw.

2011-10-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Plumb style-checker filter up to command options and make land-cowboy use it.
        https://bugs.webkit.org/show_bug.cgi?id=70119

        Reviewed by Adam Barth.

        * Scripts/webkitpy/style/checker.py: Added ChangeLogChecker categories to the big list.
        * Scripts/webkitpy/style/checkers/changelog.py: Declared categories, used in ChangeLogChecker.
        * Scripts/webkitpy/tool/commands/download.py: Made LandCowboy use filter.
        * Scripts/webkitpy/tool/commands/download_unittest.py: Tweaked the test.
        * Scripts/webkitpy/tool/commands/upload_unittest.py: Ditto.
        * Scripts/webkitpy/tool/steps/checkstyle.py: Made check_style_filter work.
        * Scripts/webkitpy/tool/steps/options.py: Added new option, check-style-filter.

2011-10-14  Sam Weinig  <sam@webkit.org>

        Remove the Leopard slaves.

        Reviewed by Adam Roben.

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

2011-10-14  Peter Beverloo  <peter@chromium.org>

        [Chromium] Inherit settings from Chromium's envsetup.sh, address a NDK todo
        https://bugs.webkit.org/show_bug.cgi?id=70028

        Reviewed by Adam Barth.

        * Scripts/update-webkit-chromium:
        * Scripts/webkitdirs.pm:
        (buildChromiumMakefile):
        (buildChromium):

2011-10-14  Leandro Pereira  <leandro@profusion.mobi>

        Unreviewed; add missing #includes.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        * DumpRenderTree/efl/EventSender.cpp:

2011-10-14  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Correctly get the absolute URL in LayoutTestController::queueLoad()
        https://bugs.webkit.org/show_bug.cgi?id=69770

        Reviewed by Antonio Gomes.

        We were just appending the given URL to the absolute URI of the main
        frame, which resulted in "file:///foo/bar/baz.htmltheother/url.html"
        instead of "file:///foo/bar/theother/url.html".

        This should make fast/dom/navigation-type-navigate.html behave
        better (it still fails, but later).

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::queueLoad):

2011-10-13  Arko Saha  <arko@motorola.com>

        Microdata: Basic implementation of document.getItems() method.
        https://bugs.webkit.org/show_bug.cgi?id=68610

        Reviewed by Ryosuke Niwa.

        Added ENABLE(MICRODATA) feature flag. Implement document.getItems() DOM API.
        Spec : http://www.whatwg.org/specs/web-apps/current-work/complete/microdata.html

        * Scripts/build-webkit:

2011-10-14  Csaba Osztrogonác  <ossy@webkit.org>

        new-run-webkit-tests does not support qt-4.8 results
        https://bugs.webkit.org/show_bug.cgi?id=64071

        Roll-back second part of r97252. :)

        * Scripts/webkitpy/layout_tests/port/qt.py:

2011-10-14  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Do not use OwnFastMallocPtr to manage char*'s.
        https://bugs.webkit.org/show_bug.cgi?id=70106

        Reviewed by Antonio Gomes.

        OwnFastMallocPtr was being used as a smart pointer that automatically called
        free() on the strings returned by the EFL or by ewk.

        However, when WTF is built in release mode, it uses its own memory management
        code instead of using the system malloc(), free() and friends. This means bad
        things will happen when one uses WTF's free() on memory allocated with system
        malloc() by the EFL or ewk.

        The easiest way to solve this is to call free() ourselves.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (dumpFramesAsText):
        (getFinalTestURL):

2011-10-14  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Add DumpRenderTreeSupportEfl
        https://bugs.webkit.org/show_bug.cgi?id=68458

        Reviewed by Kenneth Rohde Christiansen.

        Make the calls in DumpRenderTree use DumpRenderTreeSupportEfl.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::initialize): Turn on mock scrollbars.
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        (DumpRenderTreeChrome::onWindowObjectCleared):
        (DumpRenderTreeChrome::onDocumentLoadFinished):
        * DumpRenderTree/efl/GCControllerEfl.cpp:
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::counterValueForElementById):
        (LayoutTestController::pageNumberForElementById):
        (LayoutTestController::numberOfPages):
        (LayoutTestController::workerThreadCount):
        (LayoutTestController::findString):
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):
        (LayoutTestController::sampleSVGAnimationForElementAtTime):
        (LayoutTestController::numberOfActiveAnimations):
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):
        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:
        (createBitmapContextFromWebView):

2011-10-14  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Enable NRWT for Qt 4.8 version too, because it is supported after r97461.

        Unreviewed.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-10-14  Csaba Osztrogonác  <ossy@webkit.org>

        new-run-webkit-tests does not support qt-4.8 results
        https://bugs.webkit.org/show_bug.cgi?id=64071

        Roll-back r97252 with unit test fix.

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:

2011-10-13  Ojan Vafai  <ojan@chromium.org>

        Make filter-build-webkit exit 1 if the build fails.
        https://bugs.webkit.org/show_bug.cgi?id=70080

        Reviewed by Eric Seidel.

        This only works if you redirect stderr to stdout, but it at least makes it possible.
        This is useful if you want to run a followup command (e.g. run-webkit-tests) but
        only if the build succeeds.

        * Scripts/filter-build-webkit:

2011-10-13  Dimitri Glazkov  <dglazkov@chromium.org>

        land-cowboy should at least check style.
        https://bugs.webkit.org/show_bug.cgi?id=70073

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/download.py: Added CheckStyle step to LandCowboy command.

2011-10-13  Tony Chang  <tony@chromium.org>

        fix regex in layout test times dashboard
        https://bugs.webkit.org/show_bug.cgi?id=70059

        This fixes the treemapfocus query param.

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/treemap.html:

2011-10-13  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=70050
        DRT and WRT should have HiDPI testing capabilities

        Reviewed by Darin Adler.

        New layoutTestController function setBackingScaleFactor takes a double for a scale 
        factor and a callback function to call once the backing scale factor has 
        successfully been set for the view.
        * DumpRenderTree/LayoutTestController.cpp:
        (setBackingScaleFactorCallback):
        (LayoutTestController::staticFunctions):

        On Mac, setBackingScaleFactor calls WebView _setCustomBackingScaleFactor. Other 
        platforms do nothing.
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setBackingScaleFactor):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setBackingScaleFactor):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setBackingScaleFactor):

        Reset the backing scale factor by calling _setCutsomBackingScaleFactor with a 
        value of 0, which resets to the system default.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):

        When generating the pixel dump, create a Bitmap of the appropriate size based on 
        the backing scale factor. If it is a HiDPI view, paint into the context using 
        displayRectIgnoringOpacity.
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):

        And now the same stuff for WK2. Again, new layoutTestController function 
        setBackingScaleFactor takes a double for a scale factor and a callback function. 
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setBackingScaleFactor):
        (WTR::LayoutTestController::callSetBackingScaleFactorCallback):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

        The InjectedBundle sends a message to the UI process to set the backing scale 
        factor. It also processes a message the UI process will send back once it 
        completes this task, and at that time, the InjectedBundle calls the callback.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::postSetBackingScaleFactor):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:

        Again, reset the backing scale factor by calling WKPageSetCustomBackingScaleFactor 
        with a value of 0, which resets to the system default.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

        Upon receiving the SetBackingScaleFactor message, call 
        WKPageSetCustomBackingScaleFactor to the given scale factor, and post a message 
        back to InjectedBundle to say it has been done.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        
        Don't use window snapshotting for the HiDPI tests. We don't have a way to fake a 
        window's scale factor so we have to avoid that.
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2011-10-13  John Knottenbelt  <jknotten@chromium.org>

        [Chromium] Allow building without speech input enabled.
        https://bugs.webkit.org/show_bug.cgi?id=69867

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::addMockSpeechInputResult):

2011-10-13  Kent Tamura  <tkent@chromium.org>

        [Chromium] A DRT fix for r97348.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::overridePreference):
        Ignore overridePreference() for "WebKitWebAudioEnabled", and don't
        print an error message.

2011-10-12  Lucas Forschler  <lforschler@apple.com>

        Update kill-old-processes logic.
        https://bugs.webkit.org/show_bug.cgi?id=63651

        Reviewed by Ryosuke Niwa.

        Remove unused mac platform specific folder.
        Update master.config to use new kill-old-processes.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * BuildSlaveSupport/kill-old-processes:
        * BuildSlaveSupport/mac: Removed.

2011-10-12  Ryosuke Niwa  <rniwa@webkit.org>

        [NRWT] New tests without expected files are reported as flakey tests
        https://bugs.webkit.org/show_bug.cgi?id=67268

        Reviewed by Dirk Pranke.

        The bug was caused by summarize_results's regarding all tests that have an entry in result_summary
        and no entry in retry_summary as flaky. Since we don't retry missing tests, there will be no entries
        for missing results in retry_summary.

        Fixed the bug by treating missing results separately.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-10-12  Adam Barth  <abarth@webkit.org>

        Remove ENABLE(XHTMLMP) and associated code
        https://bugs.webkit.org/show_bug.cgi?id=69729

        Reviewed by David Levin.

        * Scripts/build-webkit:
        * Scripts/old-run-webkit-tests:
        * Scripts/webkitperl/features.pm:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-10-12  Ryosuke Niwa  <rniwa@webkit.org>

        Kill old run-webkit-tests processes in kill-process on Mac
        https://bugs.webkit.org/show_bug.cgi?id=69976

        Reviewed by Dirk Pranke.

        Add a system call to remove all python processes running run-webkit-tests.

        * BuildSlaveSupport/kill-old-processes:
        * BuildSlaveSupport/mac: Removed.

2011-10-12  Simon Fraser  <simon.fraser@apple.com>

        Many WK2 snapshots are blank
        https://bugs.webkit.org/show_bug.cgi?id=69953

        Reviewed by Beth Dakin.
        
        Two fixes:
        1. negating a size_t in CGContextTranslateCTM() fails, because
        size_t is unsigned. Fix by casing to CGFloat before negation.
        
        2. Turn on window autodisplay, so that compositing tests snapshot correctly.
        Autodisplay is necessary to kick off Core Animation rendering.

        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::createCGContextFromImage):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):

2011-10-12  Adam Barth  <abarth@webkit.org>

        commit-queue doesn't have a friendly error message when the reviewer line is messed up
        https://bugs.webkit.org/show_bug.cgi?id=69979

        Reviewed by Eric Seidel.

        Rather than combining the ChangeLog validation with a more complicated
        command, this patch has the commit-queue run it as a separate command,
        which will give us more control over the error message.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/steps/validatechangelogs.py:
        * Scripts/webkitpy/tool/steps/validatereviewer.py:

2011-10-12  Eric Seidel  <eric@webkit.org>

        Layout tests asserting in LayoutTestController::pathToLocalResource()
        https://bugs.webkit.org/show_bug.cgi?id=69898

        Reviewed by Simon Fraser.

        old-run-webkit-tests just didn't know to set LOCAL_RESOURCE_ROOT, oops.

        * Scripts/old-run-webkit-tests:
        (openDumpTool):

2011-10-12  Adam Barth  <abarth@webkit.org>

        The commit-queue doesn't tell me which tests my patch broke
        https://bugs.webkit.org/show_bug.cgi?id=69975

        Reviewed by Eric Seidel.

        We now print the list of newly failing tests, like we do for the EWS.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2011-10-10  Alice Boxhall  <aboxhall@chromium.org>

        Added myself as a committer.

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

2011-10-12  Adam Barth  <abarth@webkit.org>

        _run_tests is a confusing variable name in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=69971

        Reviewed by Eric Seidel.

        Eric and I thought this was a function.

        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py:

2011-10-12  Tony Chang  <tony@chromium.org>

        Fix test-webkitpy after r97307 and r97293.

        * Scripts/webkitpy/layout_tests/port/chromium.py: options.time_out_ms
          is None during tests so add back the check.
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py: The
          output directory is now build/Debug.

2011-10-12  Tony Chang  <tony@chromium.org>

        [chromium] remove old build dirs on chromium-win
        https://bugs.webkit.org/show_bug.cgi?id=69961

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py: Output is now
          always in build and never in chrome or webkit.

2011-10-12  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic's "Expect Failure" button does not work correctly, so we should remove it until the plumbing is fixed to avoid landmines.
        https://bugs.webkit.org/show_bug.cgi?id=69954

        Also renamed the action and associated event name to address an FIXME.

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js: Renamed event name.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js: Renamed the action.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js: Removed action temporarily.

2011-10-12  Tony Chang  <tony@chromium.org>

        stop spamming 'stopping test driver timed out, killing it' when running rwt
        https://bugs.webkit.org/show_bug.cgi?id=69938

        Reviewed by Adam Barth.

        In http://trac.webkit.org/changeset/95875 , we made the timeout for
        stopping the driver based on time_out_ms, but we based it on the wrong
        default times.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-10-12  Simon Fraser  <simon.fraser@apple.com>

        3D transforms are flattened in WebKit2 snapshots
        https://bugs.webkit.org/show_bug.cgi?id=68276

        Reviewed by Adam Roben.
        
        Fix WKImage leak noticed by Adam.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::windowSnapshotImage):

2011-10-12  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic should color-code test failure types.
        https://bugs.webkit.org/show_bug.cgi?id=69945

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js: Added an extra span for styling.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js: Updated tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css: Added color-coding.

2011-10-12  Adam Barth  <abarth@webkit.org>

        webkitpy tests are failing on Mac bots
        https://bugs.webkit.org/show_bug.cgi?id=69929

        Reviewed by Simon Fraser.

        Admit that Lion exists.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2011-10-12  Simon Fraser  <simon.fraser@apple.com>

        Improve output of run-api-tests to make time-outs more obvious
        https://bugs.webkit.org/show_bug.cgi?id=69788

        Reviewed by Adam Roben.
        
        List the tests that failed and timed out at the bottom of the output,
        if run with --verbose.

        * Scripts/run-api-tests:
        (runAllTests):
        (runTest):

2011-10-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r97252.
        http://trac.webkit.org/changeset/97252
        https://bugs.webkit.org/show_bug.cgi?id=69944

        Broke test-webkpy (Requested by abarth on #webkit).

        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:

2011-10-12  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        new-run-webkit-tests does not support qt-4.8 results
        https://bugs.webkit.org/show_bug.cgi?id=64071

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:

2011-10-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] Make adding another unit test easier
        https://bugs.webkit.org/show_bug.cgi?id=69409

        Reviewed by Gustavo Noronha Silva.

        * Scripts/run-gtk-tests: Update run-gtk-tests to be able to execute
        new WebKit2 tests.

2011-10-11  Takashi Toyoshima  <toyoshim@chromium.org>

        [WebSocket] update pywebsocket to 0.6b6.
        https://bugs.webkit.org/show_bug.cgi?id=69824

        Reviewed by Kent Tamura.

        WebKit supports WebSocket with version 8 based protocol for now.
        We should update its protocol to version 13 based one like hybi-17.
        pywebsocket 0.6b6 supports both of version 8 and 13.

        * Scripts/webkitpy/thirdparty/__init__.py:

2011-10-11  Simon Fraser  <simon.fraser@apple.com>

        WebKitTestRunner needs to link with WebKit for NSURL category methods
        https://bugs.webkit.org/show_bug.cgi?id=69892

        Reviewed by Sam Weinig.
        
        WebDragClient::declareAndWriteDragImage() was throwing an Obj-C exception on 10.6 because
        the +_web_originalDataAsString selector on NSURL was not recognized. Link with
        WebKit.framework to fix this.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2011-10-11  Adam Barth  <abarth@webkit.org>

        sheriffbot takes too long to acknowledge rollout commands
        https://bugs.webkit.org/show_bug.cgi?id=69871

        Reviewed by Eric Seidel.

        We used to update the working copy before acknowledging the command
        because we wanted to ping all the relevant IRC nicks.  That's caused a
        bunch of frustration because folks don't know whether the bot has heard
        their commands.

        This patch makes the bot reply immediately before updating the working
        copy.  All the relevenat folks are still pinged when the bot finishes
        preparing the rollout.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-10-11  Adam Barth  <abarth@webkit.org>

        test-webkitpy fails on Lion
        https://bugs.webkit.org/show_bug.cgi?id=69873

        Reviewed by Eric Seidel.

        This patch fixes one of the two failures.  I'll need to track down the
        other failure another time.

        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:

2011-10-11  Adam Barth  <abarth@webkit.org>

        garden-o-matic should warn me when run-webkit-tests errors out (e.g., due to python screw-ups)
        https://bugs.webkit.org/show_bug.cgi?id=65230

        Reviewed by Dimitri Glazkov.

        This patch causes us to treat crashed or hung run-webkit-tests runs
        similarly to how we treat compile failures.  In some sense, they're
        similar because they prevent us from getting test coverage.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:

2011-10-11  Adam Barth  <abarth@webkit.org>

        Failing builder display in garden-o-matic should have the same visual style as the failure grid
        https://bugs.webkit.org/show_bug.cgi?id=69876

        Reviewed by Dimitri Glazkov.

        This patch generalizes the view we use for failing builders in the
        FailureGrid so that we can use it for the list of builders that aren't
        compiling.

        One downside of this patch is that it makes it harder to tell when
        debug builders are failing (as opposed to release builders) because
        that information isn't presented in this view.  A future patch will
        improve this aspect.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/failures.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css:

2011-10-11  Filip Pizlo  <fpizlo@apple.com>

        Some API tests are timing out in Release
        https://bugs.webkit.org/show_bug.cgi?id=69787

        Reviewed by Mark Rowe.
        
        NDEBUG must be set in release builds. Otherwise the world breaks. Also added some
        magic to ensure that GTest builds in release mode in clang with NDEBUG set.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/config.h:

2011-10-11  Adam Barth  <abarth@webkit.org>

        garden-o-matic links to flakiness dashboard should open in a new tab
        https://bugs.webkit.org/show_bug.cgi?id=69864

        Reviewed by Dimitri Glazkov.

        This bug was obvious in the first five minutes of using this new
        feature.  :)

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:

2011-10-11  Adam Barth  <abarth@webkit.org>

        Tweak the Content-Security-Policy for garden-o-matic.  It turns out
        that * doesn't really mean "all".  I've emailed the W3C working group
        about changing the spec.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:

2011-10-11  Adam Barth  <abarth@webkit.org>

        garden-o-matic should link to the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=69862

        Reviewed by Dimitri Glazkov.

        The flakiness dashboard has lots of great information about the failure
        history of each test.  This patch adds a link from garden-o-matic to
        the flakiness dashboard so the gardener can look at this information.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:

2011-10-11  David Levin  <levin@chromium.org>

        watchlist: assertRaisesRegexp implementation should be compatible with python 2.7.
        https://bugs.webkit.org/show_bug.cgi?id=69789

        Reviewed by Eric Seidel.

        Made the signature of _assertRaisesRegexp match that of Python 2.7.

        * Scripts/webkitpy/common/watchlist/watchlistloader_unittest.py: Adjusted to be compatible with Python 2.7.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py: Ditto.
        * Scripts/webkitpy/common/webkitunittest.py: Ditto.
        * Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py: Ditto.

2011-10-11  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Do not abort() when an unknown key is pressed.
        https://bugs.webkit.org/show_bug.cgi?id=69856

        Reviewed by Antonio Gomes.

        A lot of tests crash due to the previous behaviour. Just using the
        received name of the pressed key works most of the time, and when it
        does not the failing tests should tell us.

        * DumpRenderTree/efl/EventSender.cpp:
        (keyPadNameFromJSValue):
        (keyNameFromJSValue):
        (keyDownCallback):

2011-10-11  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [Qt] [WK2] NRWT failed to launch MiniBrowser after test run
        https://bugs.webkit.org/show_bug.cgi?id=68016

        Reviewed by Chang Shu.

        * Scripts/webkitpy/layout_tests/port/qt.py:

2011-10-11  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Return the right window count in LayoutTestController.
        https://bugs.webkit.org/show_bug.cgi?id=69764

        Reviewed by Antonio Gomes.

        Follow-up to r96943: now that we have DumpRenderTreeChrome and
        DumpRenderTreeView in the tree, we can correctly count the number of
        open windows in DRT.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::windowCount):

2011-10-11  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r96770-r96777): fast/dom/Window/window-properties.html, fast/dom/prototype-inheritance-2.html, fast/js/global-constructors.html failing on SnowLeopard Intel Release (Tests)
        https://bugs.webkit.org/show_bug.cgi?id=69800

        Reviewed by Csaba Osztrogonác.

        Enable WEB_AUDIO at runtime.

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

2011-10-11  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Make sure IconDatabase is closed before trying to open it again.
        https://bugs.webkit.org/show_bug.cgi?id=69769

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setIconDatabaseEnabled):

2011-10-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove all references to QTDIR_build and standalone_package

        Qt is now modularized, which means we no longer import WebKit into
        the Qt source tree. Instead we use git submodules, and building
        QtWebKit as "part of Qt" is really building QtWebKit as from trunk.

        To decrease the number of buildsystem configurations we also remove
        the standalone_package code-path used when we were providing tarballs
        with the derived sources pre-generated.

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowser.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:

2011-10-11  Dominic Mazzoni  <dmazzoni@google.com>

        Update Chromium accessibility support in DRT.
        https://bugs.webkit.org/show_bug.cgi?id=69676

        Reviewed by Chris Fleizach.

        Adds several missing properties and methods to enable more
        tests to pass, and in particular adds support for notification
        callbacks.

        * DumpRenderTree/chromium/AccessibilityController.cpp:
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::reset):
        (AccessibilityController::getFocusedElement):
        (AccessibilityController::shouldLogAccessibilityEvents):
        (AccessibilityController::notificationReceived):
        (AccessibilityController::logAccessibilityEventsCallback):
        * DumpRenderTree/chromium/AccessibilityController.h:
        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (getHelpText):
        (getStringValue):
        (getOrientation):
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElement::isEqual):
        (AccessibilityUIElement::notificationReceived):
        (AccessibilityUIElement::roleGetterCallback):
        (AccessibilityUIElement::titleGetterCallback):
        (AccessibilityUIElement::descriptionGetterCallback):
        (AccessibilityUIElement::helpTextGetterCallback):
        (AccessibilityUIElement::stringValueGetterCallback):
        (AccessibilityUIElement::xGetterCallback):
        (AccessibilityUIElement::yGetterCallback):
        (AccessibilityUIElement::widthGetterCallback):
        (AccessibilityUIElement::heightGetterCallback):
        (AccessibilityUIElement::intValueGetterCallback):
        (AccessibilityUIElement::minValueGetterCallback):
        (AccessibilityUIElement::maxValueGetterCallback):
        (AccessibilityUIElement::childrenCountGetterCallback):
        (AccessibilityUIElement::insertionPointLineNumberGetterCallback):
        (AccessibilityUIElement::selectedTextRangeGetterCallback):
        (AccessibilityUIElement::isEnabledGetterCallback):
        (AccessibilityUIElement::isRequiredGetterCallback):
        (AccessibilityUIElement::isFocusedGetterCallback):
        (AccessibilityUIElement::isFocusableGetterCallback):
        (AccessibilityUIElement::isSelectedGetterCallback):
        (AccessibilityUIElement::isSelectableGetterCallback):
        (AccessibilityUIElement::isMultiSelectableGetterCallback):
        (AccessibilityUIElement::isExpandedGetterCallback):
        (AccessibilityUIElement::isCheckedGetterCallback):
        (AccessibilityUIElement::isVisibleGetterCallback):
        (AccessibilityUIElement::isOffScreenGetterCallback):
        (AccessibilityUIElement::isCollapsedGetterCallback):
        (AccessibilityUIElement::hasPopupGetterCallback):
        (AccessibilityUIElement::isValidGetterCallback):
        (AccessibilityUIElement::orientationGetterCallback):
        (AccessibilityUIElement::showMenuCallback):
        (AccessibilityUIElement::pressCallback):
        (AccessibilityUIElement::isEqualCallback):
        (AccessibilityUIElement::addNotificationListenerCallback):
        (AccessibilityUIElement::removeNotificationListenerCallback):
        (AccessibilityUIElement::takeFocusCallback):
        (AccessibilityUIElement::fallbackCallback):
        (RootAccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElementList::getOrCreate):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/CppVariant.cpp:
        (CppVariant::invokeDefault):
        * DumpRenderTree/chromium/CppVariant.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::postAccessibilityNotification):

2011-10-10  Adam Klein  <adamk@chromium.org>

        Support Distributed-CompileC as an action name in filter-build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=69783

        Reviewed by Ojan Vafai.

        * Scripts/filter-build-webkit:

2011-10-10  Simon Fraser  <simon.fraser@apple.com>

        3D transforms are flattened in WebKit2 snapshots
        https://bugs.webkit.org/show_bug.cgi?id=68276

        Reviewed by Anders Carlsson.
        
        Use a snapshot of the window, rather than an image from the web process
        for pixel testing in WebKitTestRunner. This correctly captures compositing
        layers, so works for 3D transform tests.

        * WebKitTestRunner/PlatformWebView.h: Add a windowSnapshotImage() method.
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::createCGContextFromImage): Add a param to optionally flip the image when drawing.
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Call windowSnapshotImage(), and if it returns an image,
        use that instead of the image we get from the web process.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::windowSnapshotImage): Stub out the new method.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::windowSnapshotImage): Ditto.
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::windowSnapshotImage): Ditto.
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::windowSnapshotImage): Ditto.

2011-10-10  David Levin  <levin@chromium.org>

        Quick fix for watchlist unit test failures when using Python 2.7+
        Reviewed by Adam Barth.

        Filed bug https://bugs.webkit.org/show_bug.cgi?id=69789 about a
        better fix.

        * Scripts/webkitpy/common/webkitunittest.py: Always use our
        version of assertRaisesRegexp.

2011-10-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r97082.
        http://trac.webkit.org/changeset/97082
        https://bugs.webkit.org/show_bug.cgi?id=69784

        broke Windows build (Requested by smfr on #webkit).

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cg/TestInvocationCG.cpp: Renamed from Tools/WebKitTestRunner/cg/TestInvocationCG.mm.
        (WTR::createCGContextFromImage):
        (WTR::computeMD5HashStringForContext):
        (WTR::dumpBitmap):
        (WTR::paintRepaintRectOverlay):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):

2011-10-10  Simon Fraser  <simon.fraser@apple.com>

        3D transforms are flattened in WebKit2 snapshots
        https://bugs.webkit.org/show_bug.cgi?id=68276

        Reviewed by Anders Carlsson.
        
        The WKImage passed from the WebProcess when pixel dumping is created by painting compositing layers
        flattened, which flattens 3D transforms. Instead, use CGWindowListCreateImage() to get a snapshot of
        the window when doing pixel tests.
        
        Also allow the window to auto-display, so that Core Animation layers are rendered, and animate.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: TestInvocationCG became a .mm file
        * WebKitTestRunner/cg/TestInvocationCG.mm: Renamed from Tools/WebKitTestRunner/cg/TestInvocationCG.cpp.
        (WTR::createBitmapCGContext): Utility function to create a bitmap context.
        (WTR::computeMD5HashStringForContext):
        (WTR::dumpBitmap):
        (WTR::paintRepaintRectOverlay):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Use CGWindowListCreateImage() to
        grap a snapshot of the window, rather than relying on the WKImage which was passed from the web process.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView): Remove the line that turned off autoDisplay for the NSWindow.
        We need the window to autodisplay for Core Animation to render layers and start animations.

2011-10-10  Simon Fraser  <simon.fraser@apple.com>

        WebKitTestRunner needs layoutTestController.setWindowIsKey
        https://bugs.webkit.org/show_bug.cgi?id=42688

        Reviewed by Anders Carlsson.

        Implement layoutTestController.setWindowIsKey() in WebKitTestRunner.
        This sets a flag that the platform layer uses to indicate that
        the window is the key window, which fixes focus ring drawing
        in pixel results.
        
        Also focus the web view when we get a 'didCommitLoad' for the main
        frame, as DumpRenderTree does.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::postSetWindowIsKey):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::cacheLayoutTestControllerCallback): Replace some magic numbers with an enum.
        (WTR::LayoutTestController::addChromeInputField):
        (WTR::LayoutTestController::removeChromeInputField):
        (WTR::LayoutTestController::focusWebView):
        (WTR::LayoutTestController::setWindowIsKey):
        (WTR::LayoutTestController::callAddChromeInputFieldCallback):
        (WTR::LayoutTestController::callRemoveChromeInputFieldCallback):
        (WTR::LayoutTestController::callFocusWebViewCallback):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/PlatformWebView.h: Add an NSWindow subclass
        so that we can override -isKeyWindow. Use a boolean member variable
        to track window key status.
        (WTR::PlatformWebView::setWindowIsKey):
        (WTR::PlatformWebView::windowIsKey):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::runModal): Change the window key status when showing a modal alert, as DRT does.
        (WTR::closeOtherPage): Use the same cast as other functions.
        (WTR::focus): Implement to call setWindowIsKey(true)
        (WTR::unfocus): Implement to call setWindowIsKey(false)
        (WTR::TestController::createOtherPage): Add page callbacks for focus and unfocus.
        (WTR::TestController::initialize):
        (WTR::TestController::didCommitLoadForFrame): Hook up callback to focus the web view, as DRT does.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (-[WebKitTestRunnerWindow isKeyWindow]):
        (WTR::PlatformWebView::PlatformWebView): Make a WebKitTestRunnerWindow.
        (WTR::PlatformWebView::~PlatformWebView): Clean up the back pointer on the NSWindow subclass, in case it outlives us.
        (WTR::PlatformWebView::focus): Set the view as the first responder, and the window as the key window, as DRT does.
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2011-10-10  Raphael Kubo da Costa  <kubo@profusion.mobi>

        check-webkit-style: Add readability exception for Ewk_* data types.
        https://bugs.webkit.org/show_bug.cgi?id=69763

        Reviewed by David Levin.

        Many EFL-related files (such as EditorClientEfl.h or
        DumpRenderTreeSupportEfl.h) need to have declarations such as "typedef
        struct _Ewk_Foo Ewk_Foo", which currently produce false positives in
        check-webkit-style.

        Add an exception for them, just like there are exceptions for
        Evas_*, Ecore_* and others.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-10-10  Dominic Mazzoni  <dmazzoni@google.com>

        [Chromium] Get rid of WebAccessibilityCache.
        https://bugs.webkit.org/show_bug.cgi?id=68224

        Reviewed by Dimitri Glazkov.

        * DumpRenderTree/chromium/AccessibilityController.cpp:
        (AccessibilityController::bindToJavascript):

2011-10-09  Adam Barth  <abarth@webkit.org>

        Remove "near miss" XSS vulnerabilities in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=69708

        Reviewed by David Levin.

        Collin Jackson did a security audit of garden-o-matic.  He hasn't found
        any actual vulnerabilities yet, but he did identify a couple "near
        misses" where a slight change in garden-o-matic could lead to a
        vulnerability.  This patch removes those potential issues.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Bugzilla.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:

2011-10-07  Adam Barth  <abarth@webkit.org>

        Add a Content-Security-Policy to garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=69668

        Reviewed by David Levin.

        This will help mitigate cross-site script and will also help us dogfood CSP.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:

2011-10-07  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Add DumpRenderTreeChrome.{cpp,h}
        https://bugs.webkit.org/show_bug.cgi?id=66380

        Reviewed by Antonio Gomes.

        This encapsulates EWebKit into an object that manages multiple windows
        and provides a cleaner interface to EFL's DumpRenderTree.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp: Added.
        (DumpRenderTreeChrome::create):
        (DumpRenderTreeChrome::DumpRenderTreeChrome):
        (DumpRenderTreeChrome::~DumpRenderTreeChrome):
        (DumpRenderTreeChrome::createNewWindow):
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::removeWindow):
        (DumpRenderTreeChrome::initialize):
        (DumpRenderTreeChrome::extraViews):
        (DumpRenderTreeChrome::mainFrame):
        (DumpRenderTreeChrome::mainView):
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        (DumpRenderTreeChrome::onWindowObjectCleared):
        (DumpRenderTreeChrome::onLoadStarted):
        (DumpRenderTreeChrome::processWork):
        (DumpRenderTreeChrome::onLoadFinished):
        (DumpRenderTreeChrome::onStatusbarTextSet):
        (DumpRenderTreeChrome::onTitleChanged):
        (DumpRenderTreeChrome::onDocumentLoadFinished):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h: Added.
        * DumpRenderTree/efl/EventSender.cpp:
        (sendClick): Use browser->mainFrame() instead of mainFrame.
        (mouseDownCallback): Ditto.
        (mouseUpCallback): Ditto.
        (mouseMoveToCallback): Ditto.
        (mouseScrollByCallback): Ditto.
        (keyDownCallback): Ditto.
        (scalePageByCallback): Ditto.
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::counterValueForElementById): Use
        browser->mainFrame() instead of mainFrame.
        (LayoutTestController::pageNumberForElementById): Ditto.
        (LayoutTestController::numberOfPages): Ditto.
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId): Ditto.
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId): Ditto.
        (LayoutTestController::sampleSVGAnimationForElementAtTime): Ditto.
        (LayoutTestController::numberOfActiveAnimations): Ditto.
        (LayoutTestController::suspendAnimations): Ditto.
        (LayoutTestController::resumeAnimations): Ditto.
        (LayoutTestController::setWebViewEditable): Ditto.
        (LayoutTestController::webHistoryItemCount): Use browser->mainView()
        instead of browser.
        (LayoutTestController::queueLoad): Ditto.
        (LayoutTestController::setAcceptsEditing): Ditto.
        (LayoutTestController::setUserStyleSheetEnabled): Ditto.
        (LayoutTestController::setPrivateBrowsingEnabled): Ditto.
        (LayoutTestController::setFrameFlatteningEnabled): Ditto.
        (LayoutTestController::setSpatialNavigationEnabled): Ditto.
        (LayoutTestController::setPluginsEnabled): Ditto.
        (LayoutTestController::findString): Ditto.
        (LayoutTestController::setDeveloperExtrasEnabled): Ditto.
        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:
        (createBitmapContextFromWebView): Use browser->mainFrame() instead of
        mainFrame.
        * DumpRenderTree/efl/WorkQueueItemEfl.cpp:
        (LoadItem::invoke): Ditto.
        (LoadHTMLStringItem::invoke): Ditto.
        (ScriptItem::invoke): Ditto.
        (ReloadItem::invoke): Use browser->mainView() instead of browser.

2011-10-07  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Touch mocking is broken with Qt 5 post refactor merge
        https://bugs.webkit.org/show_bug.cgi?id=69617

        Reviewed by Andreas Kling.

        Injecting fake touch events using qt_translateRawTouchEvent does not work anymore, as it sends
        the touch events to widgets only. The QML view however is a QWindow. Therefore the fake touch
        events have to be dispatched through QWindowSystemInterface::handleTouchEvent. As a result the
        events appear to be spontaenous, which required adjusting the are-we-on-a-real-touch-device
        logic.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication):
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/MiniBrowserApplication.h:

2011-10-06  Adam Barth  <abarth@webkit.org>

        Port PixelZoomer to work in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=69577

        Reviewed by David Levin.

        This implementation of PixelZoomer is basically a fork of the
        implementation used by results.html.  These two apps have different
        requirements on where this code lives.  results.html wants to be
        self-contained whereas garden-o-matic wants to live in the public_html
        folder of the buildbot.  We could do something fancy here to share the
        code, but that's not likely to be of much benefit.

        I had to change a few things about pixelzoomer to accounter for the
        differences in DOM between results.html and garden-o-matic, but
        surprisingly little.  I also moved all the code into an anonymous
        function, which is the style we're suing for module separation in
        garden-o-matic.  Finally, some jQuery-ims snuck in because I didn't
        want to drag along too many extra functions from results.html.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/pixelzoomer.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/pixelzoomer.css: Added.
        (.pixel-zoom-container):
        (.pixel-zoom-container > *):
        (.pixel-zoom-container .scaled-image-container):
        (.scaled-image-container > img):

2011-10-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Change data type of parameter in ewk_view_viewport_attributes_get().
        https://bugs.webkit.org/show_bug.cgi?id=69505

        Reviewed by Andreas Kling.

        * EWebLauncher/main.c: Use *int* variables for width and height of viewport meta tag.
        (on_viewport_changed):

2011-10-06  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed test correction.

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration): Add 'wincairo' option to the set of
        configuration flags used by run-javascript-core tests, so that it
        does not attempt to run Apple's release version.

2011-10-06  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed test correction.

        * BuildSlaveSupport/test-result-archive: Add 'wincairo' to the set
         of known build slave types so that test-result-archive won't fail
         when running tests.

2011-10-06  Martin Robinson  <mrobinson@igalia.com>

        The GTK+ WebKit2 headers produce a lot of style warnings
        https://bugs.webkit.org/show_bug.cgi?id=69481

        Reviewed by David Levin.

        Prevent emitting so many style warnings for GTK+ API. We skip header
        files in the WebKit2 GTK+ API directory and also avoid warnings about
        identifier names that begin with "webkit_" in files that contain the
        string "gtk".

        * Scripts/webkitpy/style/checker.py: Do not check header files in
        Source/WebKit2/UIProcess/API/gtk that do not end in Private.h. This required
        adding the ability to specify a regular expression in the skip list. Remove
        a few files from the skipped list that no longer exist.
        * Scripts/webkitpy/style/checker_unittest.py: Added a test for this behavior.
        * Scripts/webkitpy/style/checkers/cpp.py: If a path contains "gtk" don't warn
        about identifiers that begin with "webkit_".
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added a test for this behavior.

2011-10-06  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Correct config.json for WinCairo Test builds.
        https://bugs.webkit.org/show_bug.cgi?id=69272

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Remove
         old 'WinCairo Debug (Build)' label and replace with correct
         'WinCairo Release' label.

2011-10-06  David Levin  <levin@chromium.org>

        Add a style checker watchlist definition and add myself to it.
        https://bugs.webkit.org/show_bug.cgi?id=69564

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-06  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Create icon database path in LayoutTestController::setIconDatabaseEnabled.
        https://bugs.webkit.org/show_bug.cgi?id=69450

        Reviewed by Ryosuke Niwa.

        This should avoid stderr messages when running
        webarchive/test-link-rel-icon.html.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setIconDatabaseEnabled):

2011-10-06  Alejandro G. Castro  <alex@igalia.com>

        [WK2] [GTK] Add Skipped file for Webkit2 test runner
        https://bugs.webkit.org/show_bug.cgi?id=69517

        Use the shared WK2 skipped file also in GTK port.

        Reviewed by Martin Robinson.

        * Scripts/old-run-webkit-tests:
        (readSkippedFiles):

2011-10-06  Elliot Poger  <epoger@google.com>

        allow new-run-webkit-tests to run on Lion
        https://bugs.webkit.org/show_bug.cgi?id=69429

        Add fallback lists for chromium-mac-lion, and add chromium-mac-snowleopard
        directory to fallback lists (even though that directory doesn't exist yet)

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:

2011-10-03  Hans Wennborg  <hans@chromium.org>

        IndexedDB: Remove SQLite-LevelDB migration code
        https://bugs.webkit.org/show_bug.cgi?id=69264

        Reviewed by Tony Chang.

        Remove setOverrideIndexedDBBackingStore. It was used in the layout
        test for migration.

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

2011-10-05  James Robinson  <jamesr@chromium.org>

        [chromium] Add a command line option to DumpRenderTree and run_webkit_tests.py to enable threaded compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=69498

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setThreadedCompositingEnabled):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-10-05  Erik Arvidsson  <arv@chromium.org>

        [QT] Fix DRT after r96779

        unreviewed.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::dumpHistoryItem):

2011-10-05  Erik Arvidsson  <arv@chromium.org>

        window.location.href and others needlessly decodes URI-encoded characters
        https://bugs.webkit.org/show_bug.cgi?id=30225

        Reviewed by Darin Adler.

        * DumpRenderTree/chromium/TestShell.cpp:
        (normalizeLayoutTestURLInternal): Remove extra encode.

2011-10-05  Darin Adler  <darin@apple.com>

        Fix build.

        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest.cpp:
        (TestWebKitAPI::TEST): Remove underscore prefix from call to
        WKContextRegisterURLSchemeAsEmptyDocument.

2011-10-05  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Switch to building Release target, and activate tests.
        https://bugs.webkit.org/show_bug.cgi?id=69272

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        Change from debug to release target. Switch from "Build" to
        "BuildAndTest"

2011-10-05  Simon Fraser  <simon.fraser@apple.com>

        In WebKitTestRunner, text has font smoothing in pixel snapshots
        https://bugs.webkit.org/show_bug.cgi?id=69396

        Reviewed by Darin Adler.
        
        Call the new WKContext method that disables font smoothing in
        WebKitTestRunner, so that pixel snapshots don't have font smoothing
        enabled. Remove leading underscore from a WKContext function call.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2011-10-05  David Levin  <levin@chromium.org>

        Improve the watchlist for threading entries.
        https://bugs.webkit.org/show_bug.cgi?id=69463

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-05  Adam Roben  <aroben@apple.com>

        Add tests for using RetainPtrs inside HashMap and HashSet

        Fixes <http://webkit.org/b/69414> <rdar://problem/10236833> Using RetainPtr as the key type
        in HashMap/HashSet fails to compile

        Reviewed by John Sullivan.

        * TestWebKitAPI/Tests/WTF/cf/RetainPtrHashing.cpp: Added.
        (TestWebKitAPI::TEST): Show that RetainPtr can be used inside HashSet and as both the key
        and value type of HashMap.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Added new file.

2011-10-05  Adam Barth  <abarth@webkit.org>

        Mark as Expected in garden-o-matic is confusing
        https://bugs.webkit.org/show_bug.cgi?id=69452

        Reviewed by David Levin.

        krit didn't understand the difference between this button and the
        Rebaseline button because both of them seem to indicate that the new
        behavior is expected.  This patch renames "Mark as Expected" to "Expect
        Failure" to make it clear that we're just expecting the test to fail
        rather than accepting the new results as passing.  We might need to
        iterate on these names a bit more if folks continue to find them
        confusing.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js:

2011-10-05  Adam Barth  <abarth@webkit.org>

        Add watchlist entries for abarth
        https://bugs.webkit.org/show_bug.cgi?id=69461

        Reviewed by David Levin.

        I might have gone a bit overboard.  We'll see if this is too much spam
        for me.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-05  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Teach old-run-webkit-tests about wincairo.
        https://bugs.webkit.org/show_bug.cgi?id=69280

        Reviewed by Adam Roben.

        * Scripts/old-run-webkit-tests: Handle wincairo case.
        (buildPlatformResultHierarchy):
        (readSkippedFiles): Ditto
        * Scripts/webkitdirs.pm: Deal with wincairo build case.
        (determineConfiguration):

2011-10-05  Chang Shu  <cshu@webkit.org>

        [WK2] Support setMarkedText/hasMarkedText/unmarkText/insertText for WTR TextInputController
        https://bugs.webkit.org/show_bug.cgi?id=68924

        Added TextInputController files and JS interfaces for the above functions.

        Reviewed by Darin Adler.

        * WebKitTestRunner/DerivedSources.make:
        * WebKitTestRunner/DerivedSources.pro:
        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/InjectedBundle/Bindings/TextInputController.idl: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::textInputController):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/InjectedBundle/TextInputController.cpp: Added.
        (WTR::TextInputController::create):
        (WTR::TextInputController::TextInputController):
        (WTR::TextInputController::~TextInputController):
        (WTR::TextInputController::wrapperClass):
        (WTR::TextInputController::makeWindowObject):
        (WTR::TextInputController::setMarkedText):
        (WTR::TextInputController::hasMarkedText):
        (WTR::TextInputController::unmarkText):
        (WTR::TextInputController::insertText):
        * WebKitTestRunner/InjectedBundle/TextInputController.h: Added.
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:

2011-10-04  Oliver Hunt  <oliver@apple.com>

        Add rudimentary filtering to write barriers
        https://bugs.webkit.org/show_bug.cgi?id=69392

        Reviewed by Filip Pizlo.

        When we're recording gc phase times Heap.o picks up
        some exit time destructors, so we'll just ignore Heap.o
        in this check.

        * Scripts/check-for-exit-time-destructors:

2011-10-05  Chang Shu  <cshu@webkit.org>

        [WK2] WebKitTestRunner needs LayoutTestController.dumpConfigurationForViewport
        https://bugs.webkit.org/show_bug.cgi?id=69365

        Reviewed by Darin Adler.

        Added js API in WTR LayoutTestController.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::dumpConfigurationForViewport):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-10-05  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] ImageDiff: Do not clear the image before it is processed and compared
        https://bugs.webkit.org/show_bug.cgi?id=69378

        Reviewed by Antonio Gomes.

        Commit 61836 to Evas added a few cleanup calls to some
        evas_object_image functions which effectively made ImageDiff consider
        all images to be equal.

        It turns out that now evas_object_image_colorspace_set clears any
        data set, so the call to evas_object_image_data_set was not having any
        effect.

        * DumpRenderTree/efl/ImageDiff.cpp:
        (readImageFromStdin): Call evas_object_image_data_set after
        evas_object_image_colorspace_set.

2011-10-05  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Fix Evas_Object_Image reference counts and file descriptor leakage in ImageDiff.
        https://bugs.webkit.org/show_bug.cgi?id=68449

        Reviewed by Antonio Gomes.

        evas_render() must be called to close up temporary files and unmap unused
        resources. evas_object_image_data_set() must be called after an
        evas_object_image_data_get() to balance an internal reference count.

        * DumpRenderTree/efl/ImageDiff.cpp:
        (differenceImageFromDifferenceBuffer):
        (calculateDifference):
        (printImage):
        (printImageDifferences):

2011-10-05  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Unreviewed build fix.

        Don't use WebCore directly in WTR.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::addChromeInputField):
        (WTR::PlatformWebView::removeChromeInputField):
        (WTR::PlatformWebView::makeWebViewFirstResponder):

2011-10-05  David Levin  <levin@chromium.org>

        watchlist: Add more rules for chromium public api and sort the file.
        https://bugs.webkit.org/show_bug.cgi?id=69323

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-05  David Levin  <levin@chromium.org>

        watchlist: Don't add the same message to a bug more than once.
        https://bugs.webkit.org/show_bug.cgi?id=69303

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/net/bugzilla/bug.py: Added a way to determine
        if a message is in the comments already.
        * Scripts/webkitpy/common/net/bugzilla/bug_unittest.py: A test for the above.
        * Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py:
        Pick a bug supplied by the mock. Change the test due to different output
        from the mock watch list tool.
        * Scripts/webkitpy/tool/mocktool.py: Change the mock watch list to return
        another email so it will be filtered out, fix bugs to have the cc and comment fields,
        and fix fetch_bug to handle bug_id's which are text (because that took me way too long
        to debug).
        * Scripts/webkitpy/tool/steps/applywatchlist.py: Change to filter out comments
        and/or cc's that are already in the bug.
        * Scripts/webkitpy/tool/steps/applywatchlist_unittest.py: Pick a bug supplied by the mock,
        and remove a comment that is filtered out.

2011-10-05  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Unreviewed build fix after r96643.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::addChromeInputField):
        (WTR::PlatformWebView::removeChromeInputField):
        (WTR::PlatformWebView::makeWebViewFirstResponder):

2011-10-04  Kent Tamura  <tkent@chromium.org>

        Introduce feature flags for incomplete input types
        https://bugs.webkit.org/show_bug.cgi?id=68971

        Reviewed by Hajime Morita.

        * Scripts/build-webkit:
        Add --input-type-{date,datetime,datetimelocal,month,time,week} flags.
        They are disabled by default.

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

        garden-o-matic doesn't launch it's UI on Lion
        https://bugs.webkit.org/show_bug.cgi?id=69349

        Reviewed by Darin Adler.

        It turns out that Lion is a bit more picky about file URLs.  This patch
        switches us from using a path to using an actual file URL, silencing
        the warning and making the tool actually launch on Lion.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-10-04  Daniel Bates  <dbates@rim.com>

        Fix Perl undefined variable warning when using run-safari after
        <http://trac.webkit.org/changeset/96448> (https://bugs.webkit.org/show_bug.cgi?id=68662)

        Rubber-stamped by Alexey Proskuryakov.

        * Scripts/webkitdirs.pm:
        (runMacWebKitApp): Check that the optional function argument $useOpenCommand
        is defined before using it in a comparison operation.

2011-10-04  Scott Graham  <scottmg@chromium.org>

        Add GAMEPAD feature flag
        https://bugs.webkit.org/show_bug.cgi?id=66859

        Reviewed by Darin Fisher.

        * Scripts/build-webkit:

2011-10-04  Jon Lee  <jonlee@apple.com>

        REGRESSION (WK2): (Shift-)option-tabbing skips over elements when transitioning from chrome to webview
        https://bugs.webkit.org/show_bug.cgi?id=68412
        <rdar://problem/9988252>

        Reviewed by Darin Adler.

        In order to create a test for the bug, I had to update DRT and WKTR to create some
        widget that allows first responder status to move away from the main web view.

        Three methods were added to layoutTestController: addChromeInputField,
        removeChromeInputField, and focusWebView. addChromeInputField adds a text field
        that is a sibling to the web view, and sets up the key event loop between the two.
        removeChromeInputField removes that field. focusWebView moves first responder
        status to the web view.

        The test makes the call via layoutTestController and passes a callback that it
        assumes will be executed once the task is completed. In DRT the callback is called
        synchronously. In WKTR this is handled with message passing between the two
        processes.

        * DumpRenderTree/LayoutTestController.cpp:
        (addChromeInputFieldCallback):
        (removeChromeInputFieldCallback):
        (focusWebViewCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::addChromeInputField):
        (LayoutTestController::removeChromeInputField):
        (LayoutTestController::focusWebView):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting): When resetting for the next test,
        make sure to remove the chrome input field.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::addChromeInputField):
        (LayoutTestController::removeChromeInputField):
        (LayoutTestController::focusWebView):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::addChromeInputField):
        (LayoutTestController::removeChromeInputField):
        (LayoutTestController::focusWebView):
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::postAddChromeInputField):
        (WTR::InjectedBundle::postRemoveChromeInputField):
        (WTR::InjectedBundle::postFocusWebView):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::callbackMap): Create a hash map that keeps track of the callbacks provided
        through JS.
        (WTR::cacheLayoutTestControllerCallback):
        (WTR::callLayoutTestControllerCallback):
        (WTR::LayoutTestController::addChromeInputField):
        (WTR::LayoutTestController::removeChromeInputField):
        (WTR::LayoutTestController::focusWebView):
        (WTR::LayoutTestController::callAddChromeInputFieldCallback):
        (WTR::LayoutTestController::callRemoveChromeInputFieldCallback):
        (WTR::LayoutTestController::callFocusWebViewCallback):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::addChromeInputField):
        (WTR::PlatformWebView::removeChromeInputField):
        (WTR::PlatformWebView::makeWebViewFirstResponder):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::addChromeInputField):
        (WTR::PlatformWebView::removeChromeInputField):
        (WTR::PlatformWebView::makeWebViewFirstResponder):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::addChromeInputField):
        (WTR::PlatformWebView::removeChromeInputField):
        (WTR::PlatformWebView::makeWebViewFirstResponder):

        * DumpRenderTree/mac/LayoutTestControllerMac.mm: These functions have nothing to do
        with the patch-- just cleaning up style.
        (LayoutTestController::addDisallowedURL):
        (originsArrayToJS):
        (LayoutTestController::queueLoad):
        (LayoutTestController::setMockDeviceOrientation):
        (LayoutTestController::setIconDatabaseEnabled):
        (LayoutTestController::setEditingBehavior):

2011-10-04  Simon Fraser  <simon.fraser@apple.com>

        Move font-fixup code in WebKitTestRunner to a better place
        https://bugs.webkit.org/show_bug.cgi?id=69356

        Reviewed by Sam Weinig.
        
        Move code that swizzles NSFontManager methods to ActivateFonts.mm, which
        already contains font-related code.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:
        (WTR::allowedFontFamilySet):
        (WTR::drt_NSFontManager_availableFontFamilies):
        (WTR::drt_NSFontManager_availableFonts):
        (WTR::swizzleNSFontManagerMethods):
        (WTR::activateFonts):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):

2011-10-04  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Add DumpRenderTree.cpp
        https://bugs.webkit.org/show_bug.cgi?id=62034

        Reviewed by Antonio Gomes.

        This is the main implementation file for EFL's DumpRenderTree.

        * DumpRenderTree/efl/DumpRenderTree.cpp: Added.
        (dumpFramesAsText):
        (dumpFrameScrollPosition):
        (shouldLogFrameLoadDelegates):
        (shouldDumpAsText):
        (sendPixelResultsEOF):
        (invalidateAnyPreviousWaitToDumpWatchdog):
        (onEcoreEvasResize):
        (onCloseWindow):
        (useLongRunningServerMode):
        (parseCommandLineOptions):
        (getFinalTestURL):
        (getExpectedPixelHash):
        (createLayoutTestController):
        (runTest):
        (runTestingServerLoop):
        (adjustOutputTypeByMimeType):
        (dumpFrameContentsAsText):
        (shouldDumpFrameScrollPosition):
        (shouldDumpPixelsAndCompareWithExpected):
        (shouldDumpBackForwardList):
        (initEfl):
        (shutdownEfl):
        (displayWebView):
        (dump):
        (initEcoreEvas):
        (main):

2011-10-03  Adam Barth  <abarth@webkit.org>

        garden-o-matic should remove builders from the failure grid once they start to pass
        https://bugs.webkit.org/show_bug.cgi?id=69309

        Unreviewed.  dglazkov is on vacation.  I need to interest someone else
        in reviewing these patches.

        This patch follows the update/purge model from UpdateTracker.  This
        patch is less awesome than it could be because it causes the UI to
        flash slightly.  In a future patch, we'll want to use these
        update/purge notifications to update the UI without flashing.  However,
        that's not such a big deal because this UI is hidden in the default
        view.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:

2011-10-03  David Levin  <levin@chromium.org>

        webkitpy: Expose cc_emails and comments from bug.py
        https://bugs.webkit.org/show_bug.cgi?id=69308

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/net/bugzilla/bug.py: Expose cc_emails and comments .
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py: Add parsing support for comments.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py: Fix the unit test due
        to comments being exposed.

2011-10-03  James Robinson  <jamesr@chromium.org>

        Add myself to the watchlist for platform/graphics/chromium
        https://bugs.webkit.org/show_bug.cgi?id=69297

        Reviewed by David Levin.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-03  Anders Carlsson  <andersca@apple.com>

        Remove custom scrollbar painting hooks
        https://bugs.webkit.org/show_bug.cgi?id=69163

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):
        No need to enable custom scrollbar painting.

2011-10-03  David Levin  <levin@chromium.org>

        watchlist: Make watchlist run on a bot.
        https://bugs.webkit.org/show_bug.cgi?id=68974

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/queues.py: Add the watchlist to the style bot.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        Change to log what is run so that we can see the style command
        and the watchlist command being run.

2011-10-03  David Levin  <levin@chromium.org>

        watchlist: Allow specified a bug to attach the watchlist info to.
        https://bugs.webkit.org/show_bug.cgi?id=69288

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/tool/commands/applywatchlistlocal.py: Add support for bugid.
        * Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py:
        Add tests and fix an existing test because the unit tests do not go through the
        normal command line processing (so the -g argument remained when we determined bug ids).
        * Scripts/webkitpy/tool/commands/commandtest.py: Change the derivation to
        get the assert raises regex method.
        * Scripts/webkitpy/tool/commands/download.py: Fix the command help to be more unixy.

2011-10-03  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] DRT: Add JSStringUtils.{cpp,h}
        https://bugs.webkit.org/show_bug.cgi?id=66397

        Reviewed by Ryosuke Niwa.
        
        Adds helper functions to compare the equality of C-style strings and
        JSStringRef objects.

        * DumpRenderTree/efl/JSStringUtils.cpp: Added.
        (equals):
        * DumpRenderTree/efl/JSStringUtils.h: Added.

2011-10-03  Adam Barth  <abarth@webkit.org>

        garden-o-matic should work in Safari 5.1
        https://bugs.webkit.org/show_bug.cgi?id=69290

        Reviewed by Sam Weinig.

        My old implementation of bind was too clever by half.  This one seems
        to work better, at least according to this test.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:

2011-09-29  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>

        Unreviewed: change my e-mail in commiters.py

        (I'm leaving the company and my @openbossa.org will be no more)

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css:

2011-10-01  Brent Fulgham  <bfulgham@webkit.org>

        Correct post-build step for WinCairo test runs.
        https://bugs.webkit.org/show_bug.cgi?id=69191 

        Reviewed by Brian Weinstein.

        * DumpRenderTree/win/DumpRenderTreePostBuild.cmd: Add additional
        shell case to handle the CFLite build.

2011-10-01  Filip Pizlo  <fpizlo@apple.com>

        Added myself to reviewers, because I'm now a reviewer.

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

2011-10-01  Filip Pizlo  <fpizlo@apple.com>

        Bencher script makes it difficult to do automated performance testing
        https://bugs.webkit.org/show_bug.cgi?id=69207

        Reviewed by Sam Weinig.
        
        This adds two new features:
        
        The ability to disable automatic VM detection, which is flaky if any
        profiling features are enabled in jsc.
        
        The ability to compute, and report, a scaled result for all benchmark
        suites. It is the geometric mean of three numbers: SunSpider's
        arithmetic mean, V8's geometric mean, and Kraken's arithmetic mean.
        It is also possible to turn off all other output from bencher and just
        get this number with the --brief option.

        * Scripts/bencher:

2011-10-01  Sam Weinig  <sam@webkit.org>

        WTR is not successfully changing the NSUserDefaults
        https://bugs.webkit.org/show_bug.cgi?id=69204

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):
        Use -setVolatileDomain:forName:NSArgumentDomain instead of registerDefaults to
        get our overrides picked up.

2011-09-30  Daniel Bates  <dbates@rim.com>

        Cleanup: Extract code to launch a Mac WebKit application into a common function
        https://bugs.webkit.org/show_bug.cgi?id=68662

        Reviewed by Adam Roben.

        Extracts common code to launch a WebKit application on Mac OS X into a function
        so that we can remove duplicate code.

        * Scripts/run-webkit-app: Modified to use webkitdirs::runMacWebKitApp().
        * Scripts/webkitdirs.pm: Sorted @EXPORT list and added constant USE_OPEN_COMMAND.
        (runMacWebKitApp): Added.
        (runSafari): Modified to use webkitdirs::runMacWebKitApp().
        (runMiniBrowser): Ditto.
        (runWebKitTestRunner): Ditto.
        (runTestWebKitAPI): Ditto.

2011-09-29  David Levin  <levin@chromium.org>

        watchlist: Add webkit-patch command to run watchlist.
        https://bugs.webkit.org/show_bug.cgi?id=68973

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/host.py: Exposed the watch_list.
        * Scripts/webkitpy/common/watchlist/watchlist.py: Changed to return
        the cc and messages as sorted lists. To allow for deterministic ordering.
        * Scripts/webkitpy/common/watchlist/watchlist_unittest.py: Ditto.
        * Scripts/webkitpy/tool/commands/__init__.py: Add ApplyWatchListLocal so
        that it will be exposed as a command by webkit-patch.
        * Scripts/webkitpy/tool/commands/applywatchlistlocal.py: Added.
        * Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py: Added.
        * Scripts/webkitpy/tool/commands/download.py: Added ApplyWatchList which mimics CheckStyle.
        * Scripts/webkitpy/tool/commands/download_unittest.py: Added an appropriate test.
        * Scripts/webkitpy/tool/mocktool.py: Mock out the watch list.
        * Scripts/webkitpy/tool/steps/__init__.py: Added ApplyWatchList.
        * Scripts/webkitpy/tool/steps/applywatchlist.py: Added.
        * Scripts/webkitpy/tool/steps/applywatchlist_unittest.py: Added.

2011-09-30  David Levin  <levin@chromium.org>

        watchlist: Add a way to detect a net increase or decrease of a pattern (in a file).
        https://bugs.webkit.org/show_bug.cgi?id=69031

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/watchlist: Added usage of the new pattern,
        a comment to explain something important about the email addresses, and
        a comment to let emacs know to treat the file as a python file.
        * Scripts/webkitpy/common/watchlist/amountchangedpattern.py: Added.
        Detects increases or decreases in a pattern.
        * Scripts/webkitpy/common/watchlist/amountchangedpattern_unittest.py: Added.
        * Scripts/webkitpy/common/watchlist/watchlist_unittest.py:
        Added unit tests for watchlist which has "more" or "less".
        * Scripts/webkitpy/common/watchlist/watchlistparser.py:
        Added support for "more" or "less".

2011-09-30  Sam Weinig  <sam@webkit.org>

        Add support for eventSender.mouseScrollBy in WTR
        https://bugs.webkit.org/show_bug.cgi?id=69189

        Add implementation of eventSender.mouseScrollBy for the mac.

        Reviewed by Simon Fraser.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::keyDown):
        (WTR::EventSendingController::mouseScrollBy):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseScrollBy):

2011-09-30  Simon Fraser  <simon.fraser@apple.com>

        fast/forms/text-control-intrinsic-widths.html fails on Mac if Word/Office fonts are installed
        https://bugs.webkit.org/show_bug.cgi?id=35273

        Reviewed by Dan Bernstein.
        
        There are two types of font issue that can cause layout test failure.
        First, the user may have non-standard fonts installed that affect the layout
        of some tests. For example, some tests use the MS Gothic font if installed.
        
        Secondly, the user may have duplicate fonts installed in ~/Library/Fonts,
        which override the system fonts (e.g. a copy of Arial from MS Office). For
        some tests, this can affect font metrics or fallback behavior.
        
        This change addresses the first problem only. It limits the set of fonts
        available through NSFontManager, by swizzling some methods to return
        a list of fonts or font families which only include fonts from a hardcoded
        whitelist.
        
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        (drt_NSFontManager_availableFontFamilies):
        (drt_NSFontManager_availableFonts):
        (swizzleNSFontManagerMethods):
        (activateTestingFonts):
        (adjustFonts):
        (createWebViewAndOffscreenWindow):
        (prepareConsistentTestingEnvironment):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::allowedFontFamilySet):
        (WTR::drt_NSFontManager_availableFontFamilies):
        (WTR::drt_NSFontManager_availableFonts):
        (WTR::swizzleNSFontManagerMethods):
        (WTR::InjectedBundle::platformInitialize):

2011-09-30  David Levin  <levin@chromium.org>

        Need to skip webkitpy.common.checkout.baselineoptimizer_unittest.BaselineOptimizerTest on Windows..
        https://bugs.webkit.org/show_bug.cgi?id=69039

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        Actually skip only one specific test that is failing on Windows.

2011-09-30  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Prevent qDebug() output from DRT and WTR unless --verbose

        For DRT we didn't install the message handler early enough to
        catch output while constructing the QApplication. For WTR we
        didn't even install a message handler.

        Since the UI process will forward any output from the web process
        we set an environment variable QT_WEBKIT_SUPPRESS_WEB_PROCESS_OUTPUT
        in WTR before the web process is started. This is picked up by the
        web process which installs its own message handler.

        The environment variable can be overriden on the command line if you
        want to see output from the web process, or you can pass --verbose to
        WTR to see output from both processes.

        https://bugs.webkit.org/show_bug.cgi?id=69132

        Reviewed by Andreas Kling.

        * DumpRenderTree/qt/main.cpp:
        * WebKitTestRunner/qt/main.cpp:

2011-09-30  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make sure WTR sizes the window and item correctly

        Revision 96345 changed the logic for how the view and
        window was created, but missed a vital part, setting
        the size.

        We now use a QSGView for the window, that has a simple
        item as its root object that is always resized to fit
        within the window. The webview is then parented to the
        root object and set to anchors.fill: parent. That way
        any window geometry changes will propagate to the web
        view.

        https://bugs.webkit.org/show_bug.cgi?id=69134

        Reviewed by Andreas Kling.

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:

2011-09-30  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Only save the current viewport in PixelDumpSupportEfl.
        https://bugs.webkit.org/show_bug.cgi?id=68450

        Reviewed by Antonio Gomes.

        The previous implementation saved the whole page contents in the final
        PNG, however the baselines and expectations in the tree only want the
        current viewport (with a scrollbar, if needed), so we now only save the
        currently visible contents.

        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:
        (createBitmapContextFromWebView): Use
        ewk_frame_visible_content_geometry_get instead of
        ewk_frame_contents_size_get.

2011-09-30  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Support and keep track of extra windows (views).
        https://bugs.webkit.org/show_bug.cgi?id=68454

        Reviewed by Antonio Gomes.

        So far, window.open and related JavaScript code would not work, as
        DRTView did not implementation
        Ewk_View_Smart_Class::window_{open,close}. The default implementation
        in ewk just returns the current window/view, which broke any
        layouttest which relied on window.open.

        We now properly create and remove these new views. Unfortunately, the
        current way ewk works (and due to the fact that we cannot pass class
        methods as function pointers to the EFL functions), DRTView needs to
        know that DRTChrome exists and call `browser' directly in some points.

        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onWindowCreate):
        (onWindowCloseDelayed):
        (onWindowClose):
        (drtViewTiledAdd):

2011-09-30  Qi Zhang  <qi.2.zhang@nokia.com>

        WebKitTestRunner needs layoutTestController.setAppCacheMaximumSize
        https://bugs.webkit.org/show_bug.cgi?id=42698

        Reviewed by Andreas Kling.

        Implemented layoutTestController.setAppCacheMaximumSize and layoutTestController.clearApplicationCache,
        and call clearApplicationCache when layoutTest start up.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::clearAllApplicationCaches):
        (WTR::LayoutTestController::setAppCacheMaximumSize):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-09-30  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] Change WebKitTestRunner to use QMouseEvents instead of QGraphicsSceneMouseEvents
        https://bugs.webkit.org/show_bug.cgi?id=69145

        This is a follow up to https://bugs.webkit.org/show_bug.cgi?id=69105
        Due to refactorings in Qt5, QMouseEvent now supports floating point coordinates
        and is perfectly suitable for SceneGraph as well. GraphicsScene events
        will not be available in QtGui anymore in future. Therefore we also have to change
        QtWebKit to use QMouseEvents instead of QGraphicsSceneMouseEvents.

        Reviewed by Chang Shu.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::createMouseEvent):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):

2011-09-30  James Robinson  <jamesr@chromium.org>

        [chromium] Add WebKit API for sending input events to the compositor thread
        https://bugs.webkit.org/show_bug.cgi?id=69117

        Reviewed by Darin Fisher.

        Adds support for creating and setting a compositor thread in DRT.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::WebViewHost):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-09-29  David Levin  <levin@chromium.org>

        watchlist: Add cross-checks for WatchList once it is filled.
        https://bugs.webkit.org/show_bug.cgi?id=68975

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/watchlist/watchlist.py: Made the data members public
        instead of having trivial getter and setters.
        * Scripts/webkitpy/common/watchlist/watchlist_unittest.py: Fix the unit tests to
        pass the validation checks.
        * Scripts/webkitpy/common/watchlist/watchlistparser.py: Add validation checks
        and fix a few style nits.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py: Add tests for the
        validation checks.
        * Scripts/webkitpy/common/watchlist/watchlistrule.py: Make definitions_to_match public.

2011-09-29  Xianzhu Wang  <wangxianzhu@chromium.org>

        run-api-tests fails on chromium-win bot
        https://bugs.webkit.org/show_bug.cgi?id=69121

        On Windows running a perl script needs the interpreter.

        Reviewed by Adam Barth.

        * Scripts/run-api-tests:
        (buildTestTool):

2011-09-29  Adam Barth  <abarth@webkit.org>

        Attempt to make this tool work on Windows.

        * Scripts/run-api-tests:
        (buildTestTool):

2011-09-29  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Try to fix the minial build

        * QtTestBrowser/launcherwindow.cpp:
        * QtTestBrowser/webpage.cpp:

2011-09-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix build against Qt5 after refactor of widgets out of QtGUi

        QWidget and friends now live in the QtWidgets library. We update
        includes in implementation files and private headers to us the
        non-module-prefixed path, and leave the lookup for the include
        path. For public headers we have to ifdef the includes as the
        user might now have the modules we need in his QT config.

        Finally, QSGCanvas is no longer a QWidget but a QWindow, so we
        have to update our code and use windowHandle() for setting the
        parent relationships.

        https://bugs.webkit.org/show_bug.cgi?id=68687

        Reviewed by Andreas Kling.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/ImageDiff.pro:
        * MiniBrowser/qt/BrowserView.cpp:
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.h:
        * MiniBrowser/qt/main.cpp:
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.cpp:
        * QtTestBrowser/launcherwindow.h:
        * QtTestBrowser/locationedit.h:
        * QtTestBrowser/main.cpp:
        * QtTestBrowser/mainwindow.cpp:
        * QtTestBrowser/mainwindow.h:
        * QtTestBrowser/webinspector.h:
        * QtTestBrowser/webpage.cpp:
        * QtTestBrowser/webview.cpp:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:

2011-09-29  Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>

        Initial implementation of WebInspector for WebKit2 GTK port.
        https://bugs.webkit.org/show_bug.cgi?id=68235

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowConstructed): Set the developer extra flags to true to enable inspect element.

2011-09-29  Adam Barth  <abarth@webkit.org>

        Unbreak the "update expectatations" button by using the existing
        machinery to create the failureInfo objects.

        Unbreak the "close" button on the progress dialog by using |this|
        instead of the old name of the object.

        Teach the controllers unit test not to talk to the actual network.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:

2011-09-29  Hans Wennborg  <hans@chromium.org>

        IndexedDB: Use LevelDB also for in-memory databases
        https://bugs.webkit.org/show_bug.cgi?id=68903

        Reviewed by Steve Block.

        Remove the temporary dir that was necessary before LevelDB supported
        in-memory databases.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/TestShell.h:

2011-09-28  Xianzhu Wang  <wangxianzhu@chromium.org>

        Run TestWebKitAPI on Chromium buildbots
        https://bugs.webkit.org/show_bug.cgi?id=68678

        Reviewed by Tony Chang.

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

2011-09-28  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic results should anticipate 0 unexpected failures.
        https://bugs.webkit.org/show_bug.cgi?id=69036

        Also fixes controllers: UnexpectedFailures test.

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js: Tweaked.

2011-09-28  Dirk Pranke  <dpranke@chromium.org>

        Modify new-run-webkit-tests to return the percentage difference in image diffs where possible.

        https://bugs.webkit.org/show_bug.cgi?id=67253

        Reviewed by Eric Seidel.

        Nearly all of the work in this was done by Simon Fraser; I'm
        just repackaging it and cleaning it up a bit. This change
        modifies port.diff_image() to return a tuple of (pass/fail,
        %age), adds the value to the FailureImageHashMismatch, and
        writes the value into the full_results.json files to be
        displayed in the results page.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-09-25  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Adding myself to committers.py.

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

2011-09-28  Adam Barth  <abarth@webkit.org>

        garden-o-matic shouldn't depend on test-results.appspot.com
        https://bugs.webkit.org/show_bug.cgi?id=69019

        Reviewed by Dimitri Glazkov.

        This patch moves garden-o-matic from getting full_results.json from
        test-results.appspot.com to getting that information directly from the
        buildbot.  This patch improve the load time and accuracy of
        garden-o-matic because test-results.appspot.com is slow and is dropping
        a significant number of writes (see
        https://bugs.webkit.org/show_bug.cgi?id=68748).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/net.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js:

2011-09-28  David Levin  <levin@chromium.org>

        watchlist: Add a way to load the watchlist from config.
        https://bugs.webkit.org/show_bug.cgi?id=68991

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/config/watchlist: Added.
        * Scripts/webkitpy/common/watchlist/watchlistloader.py: Added.
        Support for loading the watch list.
        * Scripts/webkitpy/common/watchlist/watchlistloader_unittest.py: Added.
        Tests for the loading.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py:
        Adjusted to use the common base class.
        * Scripts/webkitpy/common/webkitunittest.py: Added.
        Made a common base class for functionality used in more than one.

2011-09-28  David Levin  <levin@chromium.org>

        Attempt fix for Leopard python unit test run.

        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py:

2011-09-27  Dimitri Glazkov  <dglazkov@chromium.org>

        REGRESSION(r95573): Crash when loading SVG documents in a flattened frame or any SVG document in Chromium/Mac.
        https://bugs.webkit.org/show_bug.cgi?id=68938

        Made Chromium/Mac DRT better match how Chromium/Mac queries WebKit.

        Reviewed by David Hyatt.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didUpdateLayout): Added width/height queries.
        * DumpRenderTree/chromium/WebViewHost.h: Updated defs.

2011-09-28  Mihai Parparita  <mihaip@chromium.org>

        Get rebaseline server running again
        https://bugs.webkit.org/show_bug.cgi?id=69020

        Reviewed by Adam Barth.

        Make rebaseline server run again after r90337 (missing format_date_time
        import, results_json wasn't outputting anything).

        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:

2011-09-28  David Grogan  <dgrogan@chromium.org>

        Move dgrogan from contributor to committer
        https://bugs.webkit.org/show_bug.cgi?id=69021

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

2011-09-28  Mihai Parparita  <mihaip@chromium.org>

        Add Mac Skia GPU bots to builders.py
        https://bugs.webkit.org/show_bug.cgi?id=69016

        Reviewed by Eric Seidel.

        This allows wwebkit-patch rebaseline-expectations to work with Mac Skia
        GPU tests.

        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:

2011-09-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        Second try at fixing the GTK+ build.

        * GNUmakefile.am:

2011-09-28  Xianzhu Wang  <wangxianzhu@chromium.org>

        Let TestWebKitAPI and webkit_unit_tests work for chromium-win
        https://bugs.webkit.org/show_bug.cgi?id=68680

        Reviewed by Tony Chang.

        * Scripts/run-chromium-webkit-unit-tests:
        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):

2011-09-28  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        [Gtk] Implement textInputController.doCommand
        https://bugs.webkit.org/show_bug.cgi?id=66496

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/TextInputController.cpp:
        (doCommandCallback): Callback function for textInputController.doCommand

2011-09-28  David Levin  <levin@chromium.org>

        watchlist: Suggest corrections for typos and improve error message consistency.
        https://bugs.webkit.org/show_bug.cgi?id=68976

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/watchlist/watchlistparser.py: Add suggestions
        for typos and improve consistency of the error messages.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py: Add tests
        and improve the regex that were already present.

2011-09-28  David Levin  <levin@chromium.org>

        watchlist: Add support for matching added or deleted lines.
        https://bugs.webkit.org/show_bug.cgi?id=68972

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/watchlist/changedlinepattern.py: Added.
        * Scripts/webkitpy/common/watchlist/changedlinepattern_unittest.py: Added.
        * Scripts/webkitpy/common/watchlist/watchlist.py: Comment fix up and fix input
        to the pattern match to only have the diff lines instead of the DiffFile.
        * Scripts/webkitpy/common/watchlist/watchlist_unittest.py:
        Add tests for the new patterns and combinations of the patterns.
        * Scripts/webkitpy/common/watchlist/watchlistparser.py:
        Sort imports. Add changeline support.

2011-09-28  Carlos Garcia Campos  <cgarcia@igalia.com>

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

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Add path to webkitgtk derived sources to the
        include path.

2011-09-28  Philippe Normand  <pnormand@igalia.com>

        [GTK] missing WebKit2 support in run-gtk-tests
        https://bugs.webkit.org/show_bug.cgi?id=68992

        Rubber-stamped by Andreas Kling.

        * Scripts/run-gtk-tests: Get the WebKit2 tests to run from the
        webkit2 directory.

2011-09-27  Philippe Normand  <pnormand@igalia.com>

        [GTK] build-webkit --no-webkit2 still builds WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=68892

        Reviewed by Martin Robinson.

        Take the --no-webkit2 option in account when building WebKitGTK+.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject):
        (buildGtkProject):

2011-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        Make Chromium Win Release (Tests) a core builder
        https://bugs.webkit.org/show_bug.cgi?id=68906

        Reviewed by Adam Barth.

        Add Chromium Win Release (Tests) to the list of core builders.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-09-27  Adam Barth  <abarth@webkit.org>

        garden-o-matic should load faster and inform the user what is happening
        https://bugs.webkit.org/show_bug.cgi?id=68954

        Reviewed by Dimitri Glazkov.

        This test disables the expected failures tab.  The web inspector showed
        that loading the data for this tab was slowing down the loading time
        for the whole app.  We need to find a way to load that data lazily.

        This patch also improves the update message to better describe the
        progress the app is making analyzing data from the buildbot.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:

2011-09-27  Adam Barth  <abarth@webkit.org>

        garden-o-matic should show the first result when examining results
        https://bugs.webkit.org/show_bug.cgi?id=68960

        Reviewed by Dimitri Glazkov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:

2011-09-27  David Levin  <levin@chromium.org>

        watchlist: Add support for cc and message rules.
        https://bugs.webkit.org/show_bug.cgi?id=68950

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/watchlist/watchlist.py: Added support to get
        the cc's and messages for a patch.
        * Scripts/webkitpy/common/watchlist/watchlist_unittest.py: Tests for the above.
        * Scripts/webkitpy/common/watchlist/watchlistparser.py: Parsing support
        for the rules.
        * Scripts/webkitpy/common/watchlist/watchlistrule.py: Copied from Tools/Scripts/webkitpy/common/watchlist/watchlist.py.
        A generic encapsulation of either a message list or a cc list.
        * Scripts/webkitpy/common/watchlist/watchlistrule_unittest.py: Copied from Tools/Scripts/webkitpy/common/watchlist/watchlist.py.

2011-09-27  Tom Zakrajsek  <tomz@codeaurora.org>

        webkit-patch doesn't like UTF-8 characters in reviewers names
        https://bugs.webkit.org/show_bug.cgi?id=63452

        Reviewed by Eric Seidel.

        * Scripts/webkit-patch:

2011-09-27  Adam Barth  <abarth@webkit.org>

        garden-o-matic examine buttons shows both expected and unexpected failures
        https://bugs.webkit.org/show_bug.cgi?id=68918

        Reviewed by Dimitri Glazkov.

        This was a copy/paste error when I refactored this classes to share
        more code.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:

2011-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        Add Kaustubh Atrawalkar to the list of contributors.

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

2011-09-27  Mihai Parparita  <mihaip@chromium.org>

        [Chromium] Fixed layout mode tests break subsequent tests
        https://bugs.webkit.org/show_bug.cgi?id=68923
        
        Reviewed by Adam Barth.        

        Reset fixed layout mode between tests, so that tests that run after
        platform/chromium/fast/repaint/fixed-layout-360x240.html still have the
        regular 800x600 non-fixed layout.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):

2011-09-27  David Levin  <levin@chromium.org>

        watchlist: Add the filename pattern for definitions.
        https://bugs.webkit.org/show_bug.cgi?id=68917

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/watchlist/filenamepattern.py: Added.
        * Scripts/webkitpy/common/watchlist/filenamepattern_unittest.py: Added.
        * Scripts/webkitpy/common/watchlist/watchlist.py: Added the filename pattern
        for definitions.
        * Scripts/webkitpy/common/watchlist/watchlist_unittest.py: Added tests.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py: Typo fix.

2011-09-27  Adam Barth  <abarth@webkit.org>

        garden-o-matic results view should sort test and builder names
        https://bugs.webkit.org/show_bug.cgi?id=68488

        Reviewed by Andy Estes.

        Previously, the test and builder names were displayed in an arbitrary
        order that changed from time to time.  That confused one user study
        participant.  This patch sorts the lists so that they occur in a
        predictable order.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:

2011-09-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r96108, r96111, r96113, and r96116.
        http://trac.webkit.org/changeset/96108
        http://trac.webkit.org/changeset/96111
        http://trac.webkit.org/changeset/96113
        http://trac.webkit.org/changeset/96116
        https://bugs.webkit.org/show_bug.cgi?id=68913

        Wait for working Qt5 (Requested by ossy on #webkit).

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/ImageDiff.pro:
        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::BrowserView):
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::urlChanged):
        (BrowserWindow::~BrowserWindow):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.h:
        * MiniBrowser/qt/main.cpp:
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.cpp:
        * QtTestBrowser/launcherwindow.h:
        * QtTestBrowser/locationedit.h:
        * QtTestBrowser/main.cpp:
        * QtTestBrowser/mainwindow.cpp:
        * QtTestBrowser/mainwindow.h:
        * QtTestBrowser/webinspector.h:
        * QtTestBrowser/webpage.cpp:
        * QtTestBrowser/webview.cpp:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WebView::wkView):
        (WTR::WebView::pageRef):
        (WTR::WebView::~WebView):
        (WTR::WebView::WebView):
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::sendEvent):
        (WTR::PlatformWebView::postEvent):
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-09-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Rename WebKit2 GTK+ API main header as webkit2.h
        https://bugs.webkit.org/show_bug.cgi?id=65178

        Reviewed by Martin Robinson.

        * GNUmakefile.am:
        * GtkLauncher/main.c: Include <webkit2/webkit2.h>.

2011-09-27  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Buildfix after r96108.

        Rubber-stamped by Andreas Kling.

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-09-27  David Levin  <levin@chromium.org>

        watchlist: Change watchlistparser.py to be class based.
        https://bugs.webkit.org/show_bug.cgi?id=68869

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/watchlist/watchlistparser.py:
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py:

2011-09-27  David Levin  <levin@chromium.org>

        watchlist: Break out the diff boilerplate to allow for re-use.
        https://bugs.webkit.org/show_bug.cgi?id=68871

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/diff_parser_unittest.py:
        Break out the diff into a new file.
        * Scripts/webkitpy/common/checkout/diff_test_data.py: Added.

2011-09-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: UI performance: introduce heap size tracking stats.
        https://bugs.webkit.org/show_bug.cgi?id=68901

        It is interesting how much the heap memory is used by Inspector in order of running the test.

        Reviewed by Yury Semikhatsky.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::showDevTools):
        (TestShell::closeDevTools):

2011-09-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix build against Qt5 after refactor of widgets out of QtGUi

        QWidget and friends now live in the QtWidgets library. We update
        includes in implementation files and private headers to us the
        non-module-prefixed path, and leave the lookup for the include
        path. For public headers we have to ifdef the includes as the
        user might now have the modules we need in his QT config.

        Finally, QSGCanvas is no longer a QWidget but a QWindow, so we
        have to update our code and use windowHandle() for setting the
        parent relationships.

        https://bugs.webkit.org/show_bug.cgi?id=68687

        Reviewed by Andreas Kling.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/ImageDiff.pro:
        * MiniBrowser/qt/BrowserView.cpp:
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.h:
        * MiniBrowser/qt/main.cpp:
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.cpp:
        * QtTestBrowser/launcherwindow.h:
        * QtTestBrowser/locationedit.h:
        * QtTestBrowser/main.cpp:
        * QtTestBrowser/mainwindow.cpp:
        * QtTestBrowser/mainwindow.h:
        * QtTestBrowser/webinspector.h:
        * QtTestBrowser/webpage.cpp:
        * QtTestBrowser/webview.cpp:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:

2011-09-26  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt][WK2] Add support for hover API in Qt WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=68369

        Reviewed by Andreas Kling.

        Change the statusbar to show the link URL when hovering links in
        MiniBrowser using QDesktopWebView.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::onLinkHovered):
        * MiniBrowser/qt/BrowserWindow.h:

2011-09-26  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic's commit data on summary page should not crowd itself or twitch when hovered over.
        https://bugs.webkit.org/show_bug.cgi?id=68864

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary-mock.js: Updated mocks to work.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Changed the structure of commit data to keep commit revision apart from the rest of details.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Adjusted unit tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css: Made things look shiny.

2011-09-26  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] One more unreviewed buildfix after r96005.

        * WebKitTestRunner/qt/TestInvocationQt.cpp: Missing include added.

2011-09-26  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Unreviewed buildfix after r96005.

        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2011-09-26  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic should be pretty in Open Sans.
        https://bugs.webkit.org/show_bug.cgi?id=68845

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/common.css: Tweaked to bring back teh fonts.

2011-09-26  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic should not say "Just now" when it doesn't actually know when an event happened.
        https://bugs.webkit.org/show_bug.cgi?id=68841

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js: Changed ui.RelativeTime to not initialize with current time.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Adjusted unit tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js: Ditto.

2011-09-26  David Levin  <levin@chromium.org>

        watchlist: Add parsing for definition section.
        https://bugs.webkit.org/show_bug.cgi?id=68850

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/watchlist/watchlist.py:
        * Scripts/webkitpy/common/watchlist/watchlistparser.py:
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py:

2011-09-26  Simon Fraser  <simon.fraser@apple.com>

        Fix WebKitTestRunner builds for Cairo, Windows and Qt.

        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/win/TestInvocationWin.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2011-09-26  Simon Fraser  <simon.fraser@apple.com>

        Repaint tests don't work in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=68453

        Reviewed by Sam Weinig.
        
        Convert DumpRenderTree to use use the repaint rects
        exposed via WebKit API when generating the repaint test
        overlay.
        
        Fix WebKitTestRunner to work with repaint tests, again
        using the repaint rects exposed from WK2.
        
        In both cases, layoutTestController.display() now just
        forces a display of the web view, and turns on repaint
        rect tracking on the main FrameView.
        
        Later, when pixel results are requested, the alpha overlay
        that shows the repaint rects is generated using the list
        of rects supplied by WebCore.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        (resetWebViewToConsistentStateBeforeTesting):
        (displayWebView):
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (paintRepaintRectOverlay):
        (createBitmapContextFromWebView):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::setRepaintRects):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):
        (WTR::InjectedBundlePage::dump):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::display):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::paintRepaintRectOverlay):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2011-09-26  Nayan Kumar K  <nayankk@motorola.com>

        Get hover'ed element URL from HitTest.

        mouseDidMoveOverElement now gets the hover'ed element link using
        WKHitTestResult API's.
        https://bugs.webkit.org/show_bug.cgi?id=68426 

        Reviewed by Anders Carlsson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (mouseDidMoveOverElement):

2011-09-26  David Levin  <levin@chromium.org>

        Add skeleton parsing for a WatchList.
        https://bugs.webkit.org/show_bug.cgi?id=68823

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/watchlist/watchlistparser.py: Added.
        Parses the top level watch list sections -- none are defined yet -- and
        throws an exception if an invalid one is listed.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py: Added.
        Verify the exception for an invalid section in a watch list.
        * Scripts/webkitpy/common/watchlist/watchlist.py: Added.

2011-09-26  Adam Roben  <aroben@apple.com>

        Clean up code imported from WebKitAPITest

        Fixes <http://webkit.org/b/68799> WebViewDestruction tests and related code don't match
        TestWebKitAPI conventions

        Reviewed by David Levin.

        * TestWebKitAPI/Tests/WebKit/win/WebViewDestruction.cpp: Changed tests to use gtest macros
        and to share functionality via test fixtures. Prefixed Win32 API calls with ::. Updated
        namespace name.

        (TestWebKitAPI::WebViewDestruction::SetUp):
        (TestWebKitAPI::WebViewDestruction::webViewCount):
        (TestWebKitAPI::WebViewDestructionWithHostWindow::SetUp):
        (TestWebKitAPI::WebViewDestruction::runMessagePump):
        (TestWebKitAPI::WebViewDestruction::TearDown):
        (TestWebKitAPI::WebViewDestructionWithHostWindow::TearDown):
        Moved functionality from free functions into these new test fixtures.

        * TestWebKitAPI/win/HostWindow.cpp:
        * TestWebKitAPI/win/HostWindow.h:
        Prefixed Win32 API calls with ::. Updated namespace name.

2011-09-23  Adam Roben  <aroben@apple.com>

        Merge WebKitAPITest into TestWebKitAPI

        This also means that our formerly-WebKitAPITest tests will be run on the bots!

        I made the minimal changes necessary to get the tests to run in TestWebKitAPI. I'll make
        them more idiomatic in a separate pass.

        Fixes <http://webkit.org/b/66560> WebKitAPITest and TestWebKitAPI have duplicate
        functionality (and names!)

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit/win/WebViewDestruction.cpp: Renamed from Tools/WebKitAPITest/tests/WebViewDestruction.cpp.
        * TestWebKitAPI/win/HostWindow.cpp: Renamed from Tools/WebKitAPITest/HostWindow.cpp.
        * TestWebKitAPI/win/HostWindow.h: Renamed from Tools/WebKitAPITest/HostWindow.h.

        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added new files.

        * TestWebKitAPI/win/main.cpp:
        (main): Added a call to ::OleInitialize to make WebKit1 work. This came from WebKitAPITest.

        * WebKitAPITest: Removed this directory and its contents.

2011-09-23  Adam Roben  <aroben@apple.com>

        Remove two failing WebKitAPITest tests

        The failures are covered by <http://webkit.org/b/33162> and <http://webkit.org/b/32868>.

        Reviewed by Anders Carlsson.

        * WebKitAPITest/tests/WebViewDestruction.cpp: Removed the NoCloseOrDestroyViewWindow and
        MainFrameAfterClose tests.

2011-09-25  Adam Barth  <abarth@webkit.org>

        Finish removing PLATFORM(BREWMP) by removing associated code
        https://bugs.webkit.org/show_bug.cgi?id=68779

        Reviewed by Sam Weinig.

        * Scripts/webkitpy/common/config/build.py:
        * waf/build/settings.py:

2011-09-21  Ai Makabi  <makabi@google.com>

        Provides a simple LRU cache class in Python.

        https://bugs.webkit.org/show_bug.cgi?id=67823

        Reviewed by Tony Chang.

        * Scripts/webkitpy/common/lru_cache.py:
        * Scripts/webkitpy/common/lru_cache_unittest.py:

2011-09-25  Adam Barth  <abarth@webkit.org>

        Remove PLATFORM(HAIKU) and associated code
        https://bugs.webkit.org/show_bug.cgi?id=68774

        Reviewed by Sam Weinig.

        * Scripts/webkitpy/common/config/build.py:
        * waf/build/settings.py:

2011-09-24  Adam Barth  <abarth@webkit.org>

        Always enable ENABLE(OFFLINE_WEB_APPLICATIONS)
        https://bugs.webkit.org/show_bug.cgi?id=68767

        Reviewed by Eric Seidel.

        * Scripts/build-webkit:

2011-09-24  Adam Barth  <abarth@webkit.org>

        Remove ENABLE(WCSS) and associated code
        https://bugs.webkit.org/show_bug.cgi?id=68759

        Reviewed by Darin Adler.

        * Scripts/build-webkit:
        * Scripts/old-run-webkit-tests:
        * Scripts/webkitperl/features.pm:
        (hasFeature):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-09-24  Alejandro G. Castro  <alex@igalia.com>

        Fixed GTK compilation after r95878, the operator== was defined
        twice when USE_WEBPROCESS_EVENT_SIMULATION is defined.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:

2011-09-23  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [DRT] Include the right config file for EFL's DRT.
        https://bugs.webkit.org/show_bug.cgi?id=67042

        Reviewed by Martin Robinson.

        Ports which use CMake as their buildsystem (such as the EFL one) also
        have config.h files, but they are named differently, so include the
        right one depending on the buildsystem being used.

        * DumpRenderTree/config.h:

2011-09-23  Adam Klein  <adamk@chromium.org>

        Add ENABLE_MUTATION_OBSERVERS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=68732

        Reviewed by Ojan Vafai.

        This flag will guard an implementation of the "Mutation Observers" proposed in
        http://lists.w3.org/Archives/Public/public-webapps/2011JulSep/1622.html

        * Scripts/build-webkit:

2011-09-23  Chang Shu  <cshu@webkit.org>

        [WK2] [Qt] Implement MouseDown/MouseUp/MouseMoveTo functions for WebKit2 EventSender
        https://bugs.webkit.org/show_bug.cgi?id=68556

        Implement the MouseDown/MouseUp/MouseMoveTo functions on Qt platform.

        Reviewed by Darin Adler.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::leapForward):
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::getMouseButton):
        (WTR::getModifiers):
        (WTR::EventSenderProxy::updateClickCountForButton):
        (WTR::EventSenderProxy::createGraphicsSceneMouseEvent):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::leapForward):
        (WTR::EventSenderProxy::sendOrQueueEvent):
        (WTR::EventSenderProxy::replaySavedEvents):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::postEvent):
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-09-23  Lei Zhang  <thestig@chromium.org>

        [chromium] Make the layout test script's kill timeout proportional to --time-out-ms
        https://bugs.webkit.org/show_bug.cgi?id=68026

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-09-23  Elliot Poger  <epoger@google.com>

        update layout_tests to account for new default of use_skia=1
        https://bugs.webkit.org/show_bug.cgi?id=68698

        Rolls Source/WebKit/chromium/DEPS to pick up new default use_skia=1
        from http://src.chromium.org/viewvc/chrome?view=rev&revision=102532
        (Chromium-on-Mac now uses the Skia graphics library instead of
        Core Graphics).

        Also updates layout_test code to work with that change.

        Reviewed by Mihai Parparita.

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:

2011-09-23  Mark Rowe  <mrowe@apple.com>

        Fix the build.
        
        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp: Define operator<<(std::ostream&, const WTF::String&) inside
        the WTF namespace.

2011-09-22  Dirk Pranke  <dpranke@chromium.org>

        enable NRWT for run-webkit-tests on Lion
        https://bugs.webkit.org/show_bug.cgi?id=68673

        Reviewed by Eric Seidel.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-09-22  Xianzhu Wang  <wangxianzhu@chromium.org>

        Add unit test for existing StringBuilder
        https://bugs.webkit.org/show_bug.cgi?id=67080

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp: Added.
        (operator<<):
        (TestWebKitAPI::expectBuilderContent):
        (TestWebKitAPI::expectEmpty):
        (TestWebKitAPI::TEST):

2011-09-22  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Use ewk_view to navigate in history instead of ewk_history.
        https://bugs.webkit.org/show_bug.cgi?id=68455

        Reviewed by Antonio Gomes.

        BackForwardItem::invoke() was using ewk_history functions to navigate
        in history; however, this will only call WebCore::BackForwardListImpl
        and not move between pages at all. We now call ewk_view_navigate and
        its siblings to make sure the navigation actually happens.

        This should make tests like fast/dom/navigation-type-back-forward.html
        stop timing out.

        * DumpRenderTree/efl/WorkQueueItemEfl.cpp:
        (BackForwardItem::invoke):

2011-09-22  Dean Jackson  <dino@apple.com>

        Add ENABLE_CSS_FILTERS
        https://bugs.webkit.org/show_bug.cgi?id=68652

        Reviewed by Simon Fraser.

        * Scripts/build-webkit:

2011-09-22  Anders Carlsson  <andersca@apple.com>

        EventSenderProxy::mouseUp should call -[WKView mouseUp:] instead of -[WKView mouseDown:]
        https://bugs.webkit.org/show_bug.cgi?id=68660

        Reviewed by Adam Barth.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseUp):

2011-09-22  Adam Roben  <aroben@apple.com>

        Remove FindSafari

        It isn't used or built anymore.

        Fixes <http://webkit.org/b/68628>

        Reviewed by Darin Adler.

        * FindSafari: Removed this directory and its contents.

2011-09-22  Adam Roben  <aroben@apple.com>

        Remove FindSafari from all our .sln files

        It isn't used anymore, so there's no point in building it.

        Part of <http://webkit.org/b/68628> Remove FindSafari

        Reviewed by Steve Falkenburg.

        * DumpRenderTree/DumpRenderTree.sln:
        * WebKitTestRunner/WebKitTestRunner.sln:

2011-09-22  Adam Roben  <aroben@apple.com>

        Remove all uses of FindSafari

        It isn't really needed anymore.

        Fixes <http://webkit.org/b/68626>.

        Reviewed by Darin Adler.

        * Scripts/old-run-webkit-tests: Moved read/writeRegistryString from here to webkitdirs.pm.

        * Scripts/run-webkit-nightly.cmd: Removed. This used to be used to launch nightly builds of
        WebKit, but now we use WebKit.exe for that.

        * Scripts/webkitdirs.pm:
        (installedSafariPath): Changed to use readRegistryString instead of invoking FindSafari to
        do the same thing.

        (readRegistryString):
        (writeRegistryString):
        Moved here from old-run-webkit-tests.

2011-09-22  Adam Roben  <aroben@apple.com>

        Use the "direct object" form of system() to run WebKit.exe

        This prevents the shell from parsing (and possibly splitting, if it contains spaces) the
        path to WebKit.exe.

        Fixes <http://webkit.org/b/68623> run-safari doesn't work if there are spaces in the path to
        %WEBKITOUTPUTDIR%

        Reviewed by Steve Falkenburg.

        * Scripts/webkitdirs.pm:
        (runSafari):

2011-09-22  Adam Roben  <aroben@apple.com>

        Quote the WEBKITLIBRARIESDIR path before passing it to the shell/cygpath

        Fixes <http://webkit.org/b/68621> build-webkit goes totally haywire on Windows if there are
        spaces in the path to the WebKit source tree

        Reviewed by John Sullivan.

        * Scripts/webkitdirs.pm:
        (setupCygwinEnv):

2011-09-22  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use same DPI for application font as rest of app in DRT and WTR

        QApplication will initialize the default application font based
        on the application DPI at construction time, but we then override
        the application DPI using QX11Info (hard-coding it to 96 for
        consistency). This hard-coding is not reflected in the application
        font, so we explicitly have update the font ourselves.

        The 6 test results that are updated were originally produced with
        a DPI of 75, as this is the default fallback DPI when a QFont is
        constructed before QApplication. This was wrong, and the results
        are updated to match a DPI of 96.

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/qt/main.cpp:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:

2011-09-21  Anna Cavender  <annacc@chromium.org>

        Update committers.py with a new contributor contact        
        https://bugs.webkit.org/show_bug.cgi?id=68565

        Reviewed by Eric Carlson.

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

2011-09-21  Chang Shu  <cshu@webkit.org>

        [WK2] [Mac] Implement a more-complete MouseDown/MouseUp/MouseMoveTo functions for WebKit2 EventSender
        https://bugs.webkit.org/show_bug.cgi?id=68108

        This patch implements the event sender mouse events through WebKit2 UIProcess which is
        closer to the real simulation than a WebProcess-only approach. The patch only supports Mac
        platform as the first step so the existing code is still kept for other platforms.

        Reviewed by Darin Adler.

        * WebKitTestRunner/EventSenderProxy.h:
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::leapForward):
        (WTR::EventSenderProxy::currentEventTime):
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::EventSendingController):
        (WTR::EventSendingController::mouseDown):
        (WTR::EventSendingController::mouseUp):
        (WTR::EventSendingController::mouseMoveTo):
        (WTR::EventSendingController::leapForward):
        (WTR::EventSendingController::keyDown):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::eventTypeForMouseButtonAndAction):
        (WTR::operator==):
        (WTR::EventSenderProxy::updateClickCountForButton):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::keyDown):
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::keyDown):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):

2011-09-21  Dan Bernstein  <mitz@apple.com>

        Tools part of: Prevent the WebKit frameworks from defining inappropriately-named Objective-C classes
        https://bugs.webkit.org/show_bug.cgi?id=68451

        Reviewed by Darin Adler.

        * Scripts/check-for-inappropriate-objc-class-names: Added. Checks for
        Objective-C classes with names not having one of a list of prefixes
        passed on the command line.

2011-09-21  Xianzhu Wang  <wangxianzhu@chromium.org>

        Ensure TestWebKitAPI works on mac, win, chromium-mac and chromium-linux
        https://bugs.webkit.org/show_bug.cgi?id=68206

        Reviewed by Tony Chang.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir): add support for chromium-mac
        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:
        * TestWebKitAPI/Tests/WTF/RedBlackTree.cpp:

2011-09-21  Adam Barth  <abarth@webkit.org>

        garden-o-matic command should explain that it is starting a local server
        https://bugs.webkit.org/show_bug.cgi?id=68486

        Reviewed by Dimitri Glazkov.

        In the user study, both participants didn't understand why the
        garden-o-matic command appeared to hang.  This patch adds an
        explaination of what's going on.  It also adds a confirmation prompt
        before launching the browser to give the user a chance to read the
        text.  If that's too much of a speed bump, we can iterate.

        * Scripts/webkitpy/tool/commands/gardenomatic.py:

2011-09-21  Chang Shu  <cshu@webkit.org>

        [Qt] Implement KeyDown function for WebKit2 EventSender.
        https://bugs.webkit.org/show_bug.cgi?id=56485

        Implement the KeyDown function on Qt platform.

        Reviewed by Andreas Kling.

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp: Added.
        (WTR::getModifiers):
        (WTR::EventSenderProxy::keyDown):
        (buildModifierFlags):
        (EventSenderProxy::keyDown):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::sendEvent):
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-09-20  Adam Barth  <abarth@webkit.org>

        garden-o-matic unit test fail because Safari 5.1 doesn't enumerate dictionaries in the same order as V8
        https://bugs.webkit.org/show_bug.cgi?id=68496

        Reviewed by Dimitri Glazkov.

        This patch adds a bunch of sorting to make sure things happen in a
        predictable order in both JavaScriptCore and V8.  We've talked before
        about whether these two JavaScript engines should enumerate
        dictionaries in the same order, but the consensus has been that they
        shouldn't.  Personally, I disagree with that consensus, but such is life.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:

2011-09-20  Adam Barth  <abarth@webkit.org>

        garden-o-matic doesn't work in Safari 5.1 because Safari 5.1 lacks Function.prototype.bind
        https://bugs.webkit.org/show_bug.cgi?id=68495

        Reviewed by Dimitri Glazkov.

        This patch adds an implementation of Function.prototype.bind if the browser lacks one.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:

2011-09-20  Eric Seidel  <eric@webkit.org>

        [NRWT] REGRESSION: Local loader tests are failing on machines that lost /tmp/LayoutTests symlink
        https://bugs.webkit.org/show_bug.cgi?id=65781

        Reviewed by Ryosuke Niwa.

        Instead of making NRWT create the symlink, I made DumpRenderTree smart enough
        to resolve the passed in url relative to the absolute url for the test.
        For http tests, since the test url is an http url, we can't resolve relative
        to the test path, and thus use a new LOCAL_RESOURCE_ROOT environment variable
        for resolving.

        I believe this is a better approach than the on used in the Qt and Chromium DRT's
        (which resolves the path relative to the built location of the DRT executable)
        and we should move this new code into a shared location in a follow-up patch.

        It turns out that there was a second use for pathToLocalResource, used by one
        test (http/tests/plugins/post-url-file.html) used for getting a path to /tmp.
        To support this test I made the new pathToLocalResource smart enough to map
        /tmp to DUMPRENDERTREE_TEMP (which is already defined for all ports).

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::pathToLocalResource):
        * Scripts/webkitpy/layout_tests/port/webkit.py: Set LOCAL_RESOURCE_ROOT for use by DRT.

2011-09-20  Tom Zakrajsek  <tomz@codeaurora.org>

        Need to specify a django version, instead of using default
        https://bugs.webkit.org/show_bug.cgi?id=68398

        Reviewed by Eric Seidel.

        * QueueStatusServer/__init__.py:
        * QueueStatusServer/main.py:

2011-09-20  Tom Zakrajsek  <tomz@codeaurora.org>

        Update committers.py with a few more contributor contacts
        https://bugs.webkit.org/show_bug.cgi?id=68487

        Reviewed by Eric Seidel.

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

2011-09-20  Leandro Pereira  <leandro@profusion.mobi>

        Fix webkitpy unit tests after 95547 and 95549
        https://bugs.webkit.org/show_bug.cgi?id=68483

        Reviewed by Adam Barth.
        
        Fix tests for ChangeLog.touched_files() and ChangeLog.parse_entries_from_file().

        * Scripts/webkitpy/common/checkout/changelog_unittest.py: While testing
        parse_entries_from_file(), use StringIO and entry.reviewer_text().
        While testing parse_latest_entry_from_file(), expect the correct
        touched_files() list.

2011-09-20  Adam Barth  <abarth@webkit.org>

        garden-o-matic makes it hard to compare images when scroll bars appear
        https://bugs.webkit.org/show_bug.cgi?id=68482

        Reviewed by Eric Seidel.

        Because we autoscale image width, the images rescale if we overflow
        vertically and get a scrollbar.  That makes it hard to compare two sets
        of images.  This patch reserves space for the scrollbar so we won't
        have the layout change.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/common.css:

2011-09-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r95565.
        http://trac.webkit.org/changeset/95565
        https://bugs.webkit.org/show_bug.cgi?id=68470

        Broke builds (Requested by andersca on #webkit).

        * MiniBrowser/gtk/BrowserWindow.c:
        (mouseDidMoveOverElement):

2011-09-20  Nayan Kumar K  <nayankk@motorola.com>

        Get hover'ed element URL from HitTest.
        
        mouseDidMoveOverElement now gets the hover'ed element link using
        WKHitTestResult API's.
        https://bugs.webkit.org/show_bug.cgi?id=68426

        Reviewed by Anders Carlsson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (mouseDidMoveOverElement):

2011-09-20  Leandro Pereira  <leandro@profusion.mobi>

        Changelog class should have a method to return all entries
        https://bugs.webkit.org/show_bug.cgi?id=68399
        
        Implement ChangeLog.parse_entries_from_file(). This method returns a generator
        of ChangeLogEntry objects, ordered from the latest to the oldest entry in the file.

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/checkout/changelog.py: Copy parse_latest_entry_from_file()
        and adapt it to become a generator.
        * Scripts/webkitpy/common/checkout/changelog_unittest.py: Add test case.

2011-09-20  Jarred Nicholls  <jarred@sencha.com>

        [Qt] Permit qrc resources to load in QWebSettings::setUserStyleSheetUrl()
        https://bugs.webkit.org/show_bug.cgi?id=51159

        Permit any URL with a local scheme to set a user style sheet. Allow qrc
        resource URLs as arguments to QWebSettings::setUserStyleSheetUrl().
        
        Add DRT/WKTR qrc resource to test loading user style sheets from a qrc URL.

        Reviewed by Kenneth Rohde Christiansen.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTree.qrc: Added.
        * DumpRenderTree/qt/resources/user.css: Added.
        (body):
        * WebKitTestRunner/qt/WebKitTestRunner.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.qrc: Added.
        * WebKitTestRunner/qt/resources/user.css: Added.
        (body):

2011-09-20  Leandro Pereira  <leandro@profusion.mobi>

        ChangeLogEntry class should contain a list of touched files
        https://bugs.webkit.org/show_bug.cgi?id=68115

        Reviewed by Eric Seidel.
        
        Add method to return the list of files touched in a ChangeLog entry.

        * Scripts/webkitpy/common/checkout/changelog.py: Add
        touched_files_regexp and touched_files() method.
        * Scripts/webkitpy/common/checkout/changelog_unittest.py: Implement
        unit tests for touched_files() method.

2011-09-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r95526 and r95541.
        http://trac.webkit.org/changeset/95526
        http://trac.webkit.org/changeset/95541
        https://bugs.webkit.org/show_bug.cgi?id=68443

        It broke 6 tests (Requested by ossy_ on #webkit).

        * DumpRenderTree/qt/main.cpp:
        (main):
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):

2011-09-20  Tom Zakrajsek  <tomz@codeaurora.org>

        Fix patch and bug numbering in the mocktool simulation code
        https://bugs.webkit.org/show_bug.cgi?id=68374

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/feeders_unittest.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py:

2011-09-20  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't override default QApplication font for DRT and WTR

        Revision 95526 moved the relevant code below the QApplication
        constructor, to fix a potential crash, and that made the code
        take effect, breaking 6 tests.

        We should rely on the QWebSettings to set default fonts, and
        this QApplication::setFont() is a relic from when we didn't
        have that option, so we remove the code.

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/qt/main.cpp:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:

2011-09-20  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        WebKitTestRunner: Provide usage if run without arguments

        If WTR is run without either one or more filenames, or
        a '-' to indicate server mode, we don't need to start
        up the test machinery. Doing so might actually crash,
        as we'll exit the application immedeatly after anyways.

        Reviewed by Simon Hausmann.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2011-09-20  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't use QFont before initializing QApplication

        Could potentially result in crash.

        Reviewed by Simon Hausmann.

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

2011-09-19  Adam Barth  <abarth@webkit.org>

        Always enable ENABLE(EVENTSOURCE)
        https://bugs.webkit.org/show_bug.cgi?id=68414

        Reviewed by Eric Seidel.

        * Scripts/build-webkit:

2011-09-19  David Levin  <levin@chromium.org>

        Sheriffbot rollout should be more intuitive.
        https://bugs.webkit.org/show_bug.cgi?id=68415

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/bot/irc_command.py: Add support for revert and comma separated args.
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py: Add parsing tests for comma separated args
          and a few others cases.
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py: Verify that revert works.

2011-09-19  David Levin  <levin@chromium.org>

        check-webkit-style generates bogus warning for StructuredExceptionHandlerSupressor.h
        https://bugs.webkit.org/show_bug.cgi?id=68391

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py: Skip __asm lines when doing style checks on a line.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added a test for this.

2011-09-19  Alexis Menard  <alexis.menard@openbossa.org>

        Style checker should not check public Qt WK2 API for parameter_name.
        https://bugs.webkit.org/show_bug.cgi?id=68359

        Reviewed by Andreas Kling.

        The public Qt WK2 APIs have different rules than WebKit for parameters of methods in h files.
        Add an exception in the style checker to disable the check. Also added the test for it.

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:

2011-09-19  Leandro Pereira  <leandro@profusion.mobi>

        GTK DRT leaks memory while comparing history items
        https://bugs.webkit.org/show_bug.cgi?id=68086

        Reviewed by Martin Robinson.
        
        webkit_web_history_item_get_target() returns a g_strdup()'d string,
        so memory must be freed before compareHistoryItems() returns.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (compareHistoryItems): Use GOwnPtr to manage memory automatically.

2011-09-19  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        Buildbot marks a nrwt bot red when tests are missing results
        https://bugs.webkit.org/show_bug.cgi?id=64812

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-09-19  Jessie Berlin  <jberlin@apple.com>

        Sites that use history pushState or replaceState are recorded in history in Private Browsing
        mode.
        https://bugs.webkit.org/show_bug.cgi?id=68208

        Reviewed by Brady Eidson.

        Add a test that the WKContextDidNavigateWithNavigationDataCallback (which is invoked by
        updateGlobalHistory) is not called in Private Browsing when the page does history.pushState.

        * TestWebKitAPI/Tests/WebKit2/PrivateBrowsingPushStateNoHistoryCallback.cpp: Added.
        (TestWebKitAPI::didNavigateWithNavigationData):
        This is a context history client callback, so it should not be called when in Private
        Browsing. Add a call to FAIL().
        (TestWebKitAPI::didSameDocumentNavigationForFrame):
        This is a page load client callback that happens after the didNavigateWithNavigationData
        callback. End the test.
        (TestWebKitAPI::TEST):
        Enable Private Browsing and load a page that uses history.pushState.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add PrivateBrowsingPushStateNoHistoryCallback.cpp and push-state.html.
        * TestWebKitAPI/Tests/WebKit2/push-state.html: Added.
        Ditto.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Ditto.
        * TestWebKitAPI/win/copy-resources.cmd:
        Ditto.

2011-09-16  Elliot Poger  <epoger@google.com>

        add non-CG Webkit-Mac builds to flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=68265

        Reviewed by Adam Barth.

        As Chromium-on-Mac approaches the switchover from Core Graphics to
        Skia, we need to add the Skia version to the flakiness dashboard.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-09-16  Jochen Eisinger  <jochen@chromium.org>

        Rename FrameLoaderClient::allowImages to FrameLoaderClient::allowImage and include the image URL as parameter
        https://bugs.webkit.org/show_bug.cgi?id=68071

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/WebPermissions.cpp:
        (WebPermissions::allowImage):
        * DumpRenderTree/chromium/WebPermissions.h:

2011-09-16  Tom Zakrajsek  <tomz@codeaurora.org>

        update-webkit-chromium should retry the gclient call if it fails once
        https://bugs.webkit.org/show_bug.cgi?id=68252

        Reviewed by Adam Barth.

        * Scripts/update-webkit-chromium:

2011-09-16  Rob Buis  <rbuis@rim.com>

        Add Eli's rim address and change the nick.

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

2011-09-16  Anders Carlsson  <andersca@apple.com>

        Add back the WKHitTestResultRef parameter to mouseDidMoveOverElement in an ABI preserving way
        https://bugs.webkit.org/show_bug.cgi?id=68269

        Reviewed by Geoffrey Garen.

        Update client function signatures.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowUIClientInit):
        * MiniBrowser/mac/BrowserWindowController.m:
        (mouseDidMoveOverElement):
        (-[BrowserWindowController awakeFromNib]):
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):

2011-09-16  Anders Carlsson  <andersca@apple.com>

        Temporarily remove the WKHitTestResultRef parameter to avoid breaking the WK2 ABI/API
        https://bugs.webkit.org/show_bug.cgi?id=68266

        Reviewed by John Sullivan.

        * MiniBrowser/mac/BrowserWindowController.m:
        (mouseDidMoveOverElement):

2011-09-16  Vincent Scheib  <scheib@chromium.org>

        Add Vincent Scheib to the committers list.

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

2011-09-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r95285.
        http://trac.webkit.org/changeset/95285
        https://bugs.webkit.org/show_bug.cgi?id=68247

        It broke a webkitpy test (Requested by ossy on #webkit).

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2011-09-16  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        Buildbot marks a nrwt bot red when tests are missing results
        https://bugs.webkit.org/show_bug.cgi?id=64812

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2011-09-16  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Disable WebKit2 by default in configure.ac, but enable it with build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=68178

        Reviewed by Xan Lopez.

        Add a work-around to enable WebKit2 when using build-webkit.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject): 

2011-09-15  James Robinson  <jamesr@chromium.org>

        Add Antoine Labour and Shawn Singh to the contributors-but-not-committers list.

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

2011-09-15  Tom Zakrajsek  <tomz@codeaurora.org>

        UpdateChangeLogsWithReviewer should be able to determine reviewer of latest reviewed patch in a bug
        https://bugs.webkit.org/show_bug.cgi?id=68003

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:

2011-09-15  Tom Zakrajsek  <tomz@codeaurora.org>

        Python version check is confusing in test-webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=68004

        Reviewed by Adam Barth.

        * Scripts/test-webkitpy:

2011-09-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch should be able to find users and add them to bugzilla groups
        https://bugs.webkit.org/show_bug.cgi?id=63351

        These are both very basic commands.  But it's now possible to find
        all users matching a regexp, as well as add all users matching a regexp
        to a set of groups.

        bugzilla.py already knew how to find users (for validate-committer-lists)
        but now it has the ability to modify the user records.

        I split some of the logic out into a new EditUsersParser class
        to try and reduce the amount of code in Bugzilla/BugzillaQueries.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/adduserstogroups.py: Added.
        * Scripts/webkitpy/tool/commands/findusers.py: Added.

2011-09-15  Eric Seidel  <eric@webkit.org>

        Remove ENABLE(SVG_AS_IMAGE) since all major ports have it on by default
        https://bugs.webkit.org/show_bug.cgi?id=68182

        Reviewed by Adam Barth.

        * Scripts/build-webkit:
        * waf/build/settings.py:

2011-09-15  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Make contributor email look-up case-insensitive.

        validate-committer-list was incorrectly reporting that "chang.shu@nokia.com"
        was missing from committers.py due to case sensitivity.

        This also includes a test expectations update to committers_unittest.py
        after my previous change.

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/committers_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:

2011-09-15  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Updated this based on webkit-patch suggest-nominations and validate-committer-list output.

        Add a bunch of email aliases to committers.py for regular contributors
        who are committing using other email addresses than they have listed in the file.

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

2011-09-15  Eric Seidel  <eric@webkit.org>

        Remove ENABLE_SVG_ANIMATION as all major ports have it on by default
        https://bugs.webkit.org/show_bug.cgi?id=68022

        Reviewed by Ryosuke Niwa.

        * Scripts/build-webkit:
        * waf/build/settings.py:

2011-09-15  Anders Carlsson  <andersca@apple.com>

        Fix Mac build by including config.h where needed.

        * TestWebKitAPI/Tests/TestWebKitAPI/mac/InstanceMethodSwizzler.mm:
        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:
        * TestWebKitAPI/Tests/WTF/RedBlackTree.cpp:
        * TestWebKitAPI/Tests/WebKit2/WebArchive.cpp:
        * TestWebKitAPI/Tests/WebKit2/WebArchive_Bundle.cpp:
        * TestWebKitAPI/Tests/mac/DOMRangeOfString.mm:
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorOnBack.mm:
        * TestWebKitAPI/Tests/mac/DynamicDeviceScaleFactor.mm:
        * TestWebKitAPI/Tests/mac/StringByEvaluatingJavaScriptFromString.mm:
        * TestWebKitAPI/mac/InstanceMethodSwizzler.mm:
        * TestWebKitAPI/mac/JavaScriptTestMac.mm:
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        * TestWebKitAPI/mac/SyntheticBackingScaleFactorWindow.m:
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        * TestWebKitAPI/mac/main.mm:

2011-09-15  Xianzhu Wang  <wangxianzhu@chromium.org>

        Let TestWebKitAPI work for chromium
        https://bugs.webkit.org/show_bug.cgi?id=67756

        Reviewed by Sam Weinig.

        * Scripts/build-api-tests:
        * Scripts/run-api-tests:
        (isSupportedPlatform):
        (runTest):
        (populateTests):
        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        * TestWebKitAPI/Configurations/InjectedBundle.xcconfig:
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops:
        * TestWebKitAPI/InjectedBundleController.cpp:
        * TestWebKitAPI/InjectedBundleMain.cpp:
        * TestWebKitAPI/JavaScriptTest.cpp:
        * TestWebKitAPI/PlatformUtilities.cpp:
        * TestWebKitAPI/TestWebKitAPI.gypi: Added.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/TestWebKitAPIPrefix.h: Removed.
        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
        * TestWebKitAPI/Tests/WTF/VectorBasic.cpp:
        * TestWebKitAPI/Tests/WTF/VectorReverse.cpp:
        * TestWebKitAPI/Tests/WebKit2/AboutBlankLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest.cpp:
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/CookieManager.cpp:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/DownloadDecideDestinationCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/EvaluateJavaScript.cpp:
        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/Find.cpp:
        * TestWebKitAPI/Tests/WebKit2/ForceRepaint.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypeHTML.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypePNG.cpp:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle.cpp:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback.cpp:
        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/PreventEmptyUserAgent.cpp:
        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly.cpp:
        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp:
        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKString.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKStringJSString.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/AltKeyGeneratesWMSysCommand.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/DoNotCopyANullCFURLResponse.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/HideFindIndicator.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/TranslateMessageGeneratesWMChar.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/WMCloseCallsUIClientClose.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/WMPrint.cpp:
        * TestWebKitAPI/TestsController.cpp:
        * TestWebKitAPI/config.h: Copied from TestWebKitAPI/TestWebKitAPIPrefix.h.
        * TestWebKitAPI/win/InjectedBundleControllerWin.cpp:
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/main.cpp:

2011-09-15  Jochen Eisinger  <jochen@chromium.org>

        [chromium] extract normalization of LayoutTests URLs to a method of TestShell
        https://bugs.webkit.org/show_bug.cgi?id=68145

        This will allow for other classes in DumpRenderTree to reuse this functionality

        Reviewed by David Levin.

        * DumpRenderTree/chromium/TestShell.cpp:
        (normalizeLayoutTestURLInternal):
        (dumpHistoryItem):
        (TestShell::normalizeLayoutTestURL):
        * DumpRenderTree/chromium/TestShell.h:

2011-09-14  Ada Chan  <adachan@apple.com>

        Add test for WKBundleFrameCopyWebArchive().
        https://bugs.webkit.org/show_bug.cgi?id=67857

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2/WebArchive.cpp: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle): Do some basic sanity checks to make sure
        the returned data is a valid webarchive.
        (TestWebKitAPI::setInjectedBundleClient):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST): Load simple.html in a WebView.  Wait for it to finish loading, and then ask the
        injected bundle for the webarchive and check the returned webarchive.
        * TestWebKitAPI/Tests/WebKit2/WebArchive_Bundle.cpp: Added.
        (TestWebKitAPI::WebArchiveTest::WebArchiveTest):
        (TestWebKitAPI::WebArchiveTest::didReceiveMessage): Handle the "GetWebArchive" message and return
        the web archive.

        Add files to project.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Also let Visual Studio reorder a file.
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2011-09-14  Ryosuke Niwa  <rniwa@webkit.org>

        committers.py should support multiple IRC nicknames
        https://bugs.webkit.org/show_bug.cgi?id=68110

        Reviewed by Eric Seidel.

        Add multiple IRC nickname support to committers.py

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/committers_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:

2011-09-14  Jon Lee  <jonlee@apple.com>

        Implement globalFlag for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=68033
        <rdar://problem/10119204>

        Reviewed by Sam Weinig.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Porting globalFlag from DRT
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): initialize m_globalFlag to false
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: add m_globalFlag
        (WTR::LayoutTestController::globalFlag): simple getter
        (WTR::LayoutTestController::setGlobalFlag): simple setter

2011-09-13  Eric Seidel  <eric@webkit.org>

        Remove ENABLE_SVG_USE as <use> is required by HTML5
        https://bugs.webkit.org/show_bug.cgi?id=68019

        Reviewed by Ryosuke Niwa.

        * Scripts/build-webkit:
        * waf/build/settings.py:

2011-09-14  Ryosuke Niwa  <rniwa@webkit.org>

        Remove Jan Erik Hanssen (added in my r95078) from the list for now
        since I can't confirm acceptable his committership.

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

2011-09-14  Jochen Eisinger  <jochen@chromium.org>

        [chromium] Remove obsolete WebViewClient methods from DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=68066

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:

2011-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        committers.py is missing some contributors
        https://bugs.webkit.org/show_bug.cgi?id=68059

        Reviewed by Adam Barth.

        Add David Barr, Jan Erik Hanssen, and Kim Grönholm.

        Also add nicks of Alejandro G. Castro, Collin Jackson, and Matt Lilek.

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

2011-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        Fix webkit python test after r95061.

        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:

2011-09-13  Xianzhu Wang  <wangxianzhu@chromium.org>

        Add myself as a contributor. No review needed.

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

2011-09-13  Adam Barth  <abarth@webkit.org>

        garden-o-matic has unfriendly error messages when the local server is not available
        https://bugs.webkit.org/show_bug.cgi?id=68042

        Reviewed by Dimitri Glazkov.

        This patch moves us from using alert to showing the error inline in the
        progress dialog.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:

2011-09-13  Adam Barth  <abarth@webkit.org>

        FailureGrid in garden-o-matic should link to the builder's waterfall page
        https://bugs.webkit.org/show_bug.cgi?id=68036

        Reviewed by Dimitri Glazkov.

        One of the users in the user study thought the configurations names in
        the failure grid would link to the underlying bots.  That makes sense,
        so this patch adds the behavior.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css:

2011-09-13  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to mark failures as expected
        https://bugs.webkit.org/show_bug.cgi?id=68027

        Reviewed by Dimitri Glazkov.

        All the back-end infrastructure exists for this operation.  This patch
        just adds some UI to the front-end and wires that UI up to the back
        end.  This exact UI will likely need some more polish, but this should
        be a reasonable first cut.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.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:

2011-09-13  Adam Barth  <abarth@webkit.org>

        garden-o-matic should tell you about the progress of your rebaseline
        https://bugs.webkit.org/show_bug.cgi?id=67967

        Reviewed by Dimitri Glazkov.

        This patch adds ui.MessageBox, which is a light wrapper around jQuery
        UI's dialog widget.  We then use ui.MessageBox to show status messages
        about in-progress rebaselines.  As each baseline is downloaded, the
        MessageBox updates.  This UI replaces our temporary "alert"-based UI.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:

2011-09-13  Leandro Pereira  <leandro@profusion.mobi>

        GTK DumpRenderTree uses inefficient idioms to iterate over G[S]Lists
        https://bugs.webkit.org/show_bug.cgi?id=68024

        Reviewed by Gustavo Noronha Silva.
        
        Using g_list_count() and g_list_nth_data() together on a loop is
        inneficient since they're both O(n). Iterate over lists in a saner
        way.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dumpHistoryItem): Reduce the scope for the 'kids' variable, and
        iterate on it using g_list_next(). Free the list after done with it.
        (dumpBackForwardListForWebView): Instead of appending (which is
        expensive in GLists) history items and then iterating from the tail
        of the itemsToPrint list, prepend items and walk forwards as usual.
        (dumpBackForwardListForAllWebViews): Walk the list in a saner way,
        remove the (unneeded) viewList variable.

2011-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        Add Eric's IRC nick.

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

2011-09-13  Anders Carlsson  <andersca@apple.com>

        Disable C++ exceptions when building with clang
        https://bugs.webkit.org/show_bug.cgi?id=68031
        <rdar://problem/9556880>

        Reviewed by Mark Rowe.

        * MiniBrowser/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2011-09-13  Ojan Vafai  <ojan@chromium.org>

        [chromium] fix flakiness dashboard for chromium interactive tests
        https://bugs.webkit.org/show_bug.cgi?id=68029

        Reviewed by Tony Chang.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        Add Alice and Aryeh to the list of contributors.

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

2011-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        sheriffbot whois should also tell us email addresses
        https://bugs.webkit.org/show_bug.cgi?id=67975

        Reviewed by Eric Seidel and David Levin.

        Taught sheriffbot how to tell us contributor's email addresses.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:

2011-09-13  Eric Seidel  <eric@webkit.org>

        Remove ENABLE_SVG_FOREIGN_OBJECT as it is a required part of HTML5
        https://bugs.webkit.org/show_bug.cgi?id=68018

        Reviewed by Ryosuke Niwa.

        * Scripts/build-webkit:
        * waf/build/settings.py:

2011-09-13  Chang Shu  <cshu@webkit.org>

        [WK2] [Mac] Implement KeyDown function for WebKit2 EventSender.
        https://bugs.webkit.org/show_bug.cgi?id=57515

        The code change in WebKitTestRunner first sends keydown event from InjectedBundle to
        TestController synchronously. The latter then sends simulated event to WebKit2 module,
        which is synchronous, too.

        Reviewed by Darin Adler.

        * WebKitTestRunner/EventSenderProxy.h: Added.
        (WTR::EventSenderProxy::EventSenderProxy):
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::keyDown):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/PlatformWebView.h:
        (WTR::PlatformWebView::platformWindow):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/mac/EventSenderProxy.mm: Added.
        (WTR::buildModifierFlags):
        (WTR::EventSenderProxy::keyDown):

2011-09-12  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] DRT: Add DumpRenderTreeEfl.h
        https://bugs.webkit.org/show_bug.cgi?id=63993

        Reviewed by Eric Seidel.
        
        This header contains some global variables used by EFL's
        DumpRenderTree implementation.

        * DumpRenderTree/DumpRenderTree.h: Include DumpRenderTreeEfl.h when
        appropriate.
        * DumpRenderTree/efl/DumpRenderTreeEfl.h: Added.

2011-09-12  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Send the right key names for PageUp and PageDown.
        https://bugs.webkit.org/show_bug.cgi?id=67044

        Reviewed by Kenneth Rohde Christiansen.

        PlatformKeyboardEventEfl uses "Prior" and "Next" to refer to PageUp and
        PageDown (which is close to the defines in WindowsKeyboardCodes.h).
        However, EventSender was sending "Page_Up" and "Page_Down", so tests
        such as editing/input/page-up-down-scrolls.html were timing out due to
        the right key down events not being sent.

        * DumpRenderTree/efl/EventSender.cpp:
        (keyPadNameFromJSValue):
        (keyNameFromJSValue):

2011-09-12  Eric Seidel  <eric@webkit.org>

        sheriffbot whois is case sensitive
        https://bugs.webkit.org/show_bug.cgi?id=67972

        Reviewed by Adam Barth.

        I also fixed a typo in the "More than 5 contributors" message
        from my previous commit.

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/committers_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:

2011-09-12  Eric Seidel  <eric@webkit.org>

        sheriffbot whois should be smarter
        https://bugs.webkit.org/show_bug.cgi?id=67971

        Reviewed by Adam Barth.

        This makes sheriffbot whois basically grep the committers list
        making it much easier to find a contributor by name.

        Unfortunately the current unittests depend on the real committers.py
        file, so as we add more eric's to the project, this unittest result will
        change.  I think that's OK for now.  We'll fix it when it breaks.

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:

2011-09-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94976.
        http://trac.webkit.org/changeset/94976
        https://bugs.webkit.org/show_bug.cgi?id=67953

        Broke a bunch of security/load& tests (Requested by rniwa on
        #webkit).

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::pathToLocalResource):

2011-09-12  Eric Seidel  <eric@webkit.org>

        Rubber-stamped by Adam Barth.

        Remove the "the tree is burning!" warning previously shown
        when landing patches.  It was a dream.  But it's just noise now.

        Some bots will require a restart to notice the removal of the option
        so I've left the --ignore-builders option in for now.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/commit.py:
        * Scripts/webkitpy/tool/steps/ensurebuildersaregreen.py: Removed.
        * Scripts/webkitpy/tool/steps/postdiffforrevert.py:

2011-09-12  Eric Seidel  <eric@webkit.org>

        [NRWT] REGRESSION: Local loader tests are failing on machines that lost /tmp/LayoutTests symlink
        https://bugs.webkit.org/show_bug.cgi?id=65781

        Reviewed by Ryosuke Niwa.

        Instead of making NRWT create the symlink, I just made DumpRenderTree smart enough
        to resolve the passed in url relative to the absolute url for the test.

        I believe this is a better approach than the on used in the Qt and Chromium DRT's
        (which resolves the path relative to the built location of the DRT executable)
        and we should move this new code into a shared location in a follow-up patch.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::pathToLocalResource):

2011-09-12  Eric Seidel  <eric@webkit.org>

        Reshuffle some code in WebKitDriver._read_block in preparation for reading stderr/stdout separately
        https://bugs.webkit.org/show_bug.cgi?id=67530

        Reviewed by Adam Barth.

        I believe I've fixed the bug in the original patch which prompted the rollout.
        The previous patch was using the wrong deadline for the initial read,
        subtracting time.time() twice from the deadline value.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-09-12  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] WebKitTestRunner does not produce crash logs
        https://bugs.webkit.org/show_bug.cgi?id=67714

        Reviewed by Chang Shu.

        Added a simple way of generating backtrace on crash
        to the web process. The implementation is similar what
        we have in DRT. It depends on GNU libc functionality
        so it is only enabled where we are running in such an environment.

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WTR::printBacktrace):
        (WTR::crashHandler):
        (WTR::InjectedBundle::platformInitialize):

2011-09-11  Filip Pizlo  <fpizlo@apple.com>

        Added my IRC nick to the committers file.

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

2011-09-01  Filip Pizlo  <fpizlo@apple.com>

        The executable allocator makes it difficult to free individual
        chunks of executable memory
        https://bugs.webkit.org/show_bug.cgi?id=66363

        Reviewed by Oliver Hunt.
        
        Introduced a best-fit, balanced-tree based allocator. The allocator
        required a balanced tree that does not allocate memory and that
        permits the removal of individual nodes directly (as opposed to by
        key); neither AVLTree nor WebCore's PODRedBlackTree supported this.
        Changed all references to executable code to use a reference counted
        handle.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp: Added.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WTF/RedBlackTree.cpp: Added.
        (TestWebKitAPI::Pair::findExact):
        (TestWebKitAPI::Pair::remove):
        (TestWebKitAPI::Pair::findLeastGreaterThanOrEqual):
        (TestWebKitAPI::Pair::assertFoundAndRemove):
        (TestWebKitAPI::Pair::assertEqual):
        (TestWebKitAPI::Pair::assertSameValuesForKey):
        (TestWebKitAPI::Pair::testDriver):
        (TestWebKitAPI::TEST_F):

2011-09-10  Andy Estes  <aestes@apple.com>

        Move myself from committers_unable_to_review to reviewers_list.

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

2011-09-10  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. MSW build fixes.

        * DumpRenderTree/config.h:
        * waf/build/wxpresets.py:

2011-09-10  Andreas Kling  <kling@webkit.org>

        Crash beneath WKURLIsEqual() when reloading in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=59328

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController updateProvisionalURLForFrame:]): Add missing null check.

2011-09-10  Adam Barth  <abarth@webkit.org>

        Build fix for Android.  DumpRenderTree is a client of the WebKit API
        and does not have access to notImplemented().

        * DumpRenderTree/chromium/TestShellAndroid.cpp:
        (openStartupDialog):

2011-09-09  Alexey Proskuryakov  <ap@apple.com>

        Add a script to create a monolithic script-test
        https://bugs.webkit.org/show_bug.cgi?id=67747

        Reviewed by Darin Adler.

        * Scripts/make-new-script-test: Added.

2011-09-09  Luiz Agostini  <luiz@webkit.org>

        Adding myself to the reviewers list.

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

2011-09-09  Ryosuke Niwa  <rniwa@webkit.org>

        Buildbot may use RunWebKitTest's evaluateCommand on bots that run nrwt
        https://bugs.webkit.org/show_bug.cgi?id=67855

        Reviewed by Dirk Pranke.

        The bug was caused by the fact some ports use RunWebKitTests instead of NewRunWebKitTests to run tests,
        and using RunWebKitTests.evaluateCommand after calling _parseNewRunWebKitTestsOutput.

        Fixed the bug by merging evaluateCommand of RunWebKitTests and NewRunWebKitTests.

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

2011-09-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add myself to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=67853

        Reviewed by Darin Adler.

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

2011-09-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        [Qt] Remove common.pri
        https://bugs.webkit.org/show_bug.cgi?id=67814

        Reviewed by Andreas Kling.

        * Tools.pro:

2011-09-09  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [NRWT] the nrwt check httpd with --no-http option
        https://bugs.webkit.org/show_bug.cgi?id=67835

        Reviewed by Tony Chang.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:

2011-09-09  Hao Zheng  <zhenghao@chromium.org>

        [chromium] Implement DRT support for Android.
        https://bugs.webkit.org/show_bug.cgi?id=67590

        Reviewed by Tony Chang.

        Add 2 mechanism to make DRT interaction more robust on Android:
        - Send 'QUIT' to DRT to make it stop.
        - Wait until receiving '#READY' from DRT, so that DRT won't miss any
        input commands before it starts.
        And LayoutTestController.cpp needs to include <cctype> for 'tolower'
        and <clocale> for 'LC_ALL' to compile on Android.

        Also change to use sigaction instead of signal for TestShellGtk.cpp,
        as signal() man page recommends using sigaction().

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        * DumpRenderTree/chromium/TestShellAndroid.cpp: Added.
        (AlarmHandler):
        (TestShell::waitTestFinished):
        (platformInit):
        (openStartupDialog):
        (checkLayoutTestSystemDependencies):
        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (AlarmHandler):
        (TestShell::waitTestFinished):

2011-09-09  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Add Source/JavaScriptCore/dfg directory to the build.

        * waf/build/settings.py:

2011-09-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94851.
        http://trac.webkit.org/changeset/94851
        https://bugs.webkit.org/show_bug.cgi?id=67847

        It broke a webkitpy test (Requested by ossy on #webkit).

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2011-09-09  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [NRWT] the nrwt check httpd with --no-http option
        https://bugs.webkit.org/show_bug.cgi?id=67835

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2011-09-08  Brian Weinstein  <bweinstein@apple.com>

        WebKit2: Assertion when calling didPerform*Redirect on null source/destination URL string
        https://bugs.webkit.org/show_bug.cgi?id=67794
        <rdar://problem/9892024>
        
        Add a test that we don't send a didPerformServerRedirect when a load is cancelled from willSendRequest.

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame): Set flags on whether we've loaded the main frame, iframe, or both.
        (TestWebKitAPI::didPerformServerRedirect): Set a flag for whether we've performed a server redirect.
        (TestWebKitAPI::TEST): Set up a WKPageLoaderClient and WKContextHistoryClient, and load simple-iframe.html.
            Once both frames have loaded (main frame and blocked iframe), make sure that we have never called
            didPerformServerRedirect.

        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback_Bundle.cpp: Added.
        (TestWebKitAPI::LoadCanceledNoServerRedirectCallbackTest::LoadCanceledNoServerRedirectCallbackTest): Initialize
            our InjectedBundleTest.
        (TestWebKitAPI::LoadCanceledNoServerRedirectCallbackTest::willSendRequestForFrame): If we are dealing with a request
            from the main frame (the main resource in simple-iframe.html), allow it. If not (dealing with the iframe), block
            the request.
        (TestWebKitAPI::LoadCanceledNoServerRedirectCallbackTest::didCreatePage): Set up the WKBundlePageResourceLoadClient.

        * TestWebKitAPI/Tests/WebKit2/simple-iframe.html: Added.
        
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add new files.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Ditto.
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj: Ditto.
        * TestWebKitAPI/win/copy-resources.cmd: Ditto.

2011-09-08  David Levin  <levin@chromium.org>

        check-webkit-style: Ref|Own Ptr& should be allowed as a parameter.
        https://bugs.webkit.org/show_bug.cgi?id=67797

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/style/checkers/cpp.py: Allow Ref/Own Ptr when it ends with &.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added test cases for this.

2011-09-08  Fady Samuel  <fsamuel@chromium.org>

        Fixed Layout Mode should be adjustable from layoutTestController for testing on Chromium platforms
        https://bugs.webkit.org/show_bug.cgi?id=67723

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/EventSender.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::enableFixedLayoutMode):
        (LayoutTestController::setFixedLayoutSize):
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-09-07  Matthew Delaney  <mdelaney@apple.com>

        Add standalone script that filters the output of build-webkit to be more human-readable
        https://bugs.webkit.org/show_bug.cgi?id=44081

        Reviewed by Daniel Bates.

        * Scripts/filter-build-webkit: Added. Just need to feed it the output of
        a build script (e.g. build-webkit) and it spits out a prettier version.
        * Scripts/VCSUtils.pm: Refactored "possiblyColored" out of run-api-tests into VCSUtils.
        * Scripts/run-api-tests: Now includes VCSUtils to use "possiblyColored"

2011-09-07  Noel Gordon  <noel.gordon@gmail.com>

        Add myself to committers.py                 
        https://bugs.webkit.org/show_bug.cgi?id=67696

        Reviewed by Kent Tamura.

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

2011-09-07  Adam Barth  <abarth@webkit.org>

        rebaseline button in garden-o-matic details view should work
        https://bugs.webkit.org/show_bug.cgi?id=67738

        Reviewed by Dimitri Glazkov.

        This patch wires up the rebaseline button in garden-o-matic results
        details view.  The button is current per-test, so there isn't a way to
        rebaseline individual bots.  This is a place to start.  If we decide we
        want per-bot rebaselining, we'll need to think of some better UI.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:

2011-09-07  Eric Seidel  <eric@webkit.org>

        Teach the PortFactory object how to pass along executive/user/filesystem to port objects (which fixes the failing rebaseline_test on bots)
        https://bugs.webkit.org/show_bug.cgi?id=67737

        Reviewed by Adam Barth.

        I got a little over-eager when deprecating host.port_factory in the previous commit.
        Turns out that Host.port_factory was already the "modern" port/factory.py
        it was just the Module object.  I un-deprecated the variable, and changed it from
        being the module to being an actual PortFactory, passing it a host object.
        I also taught PortFactory how to set user/executive/filesystem in the kwargs
        when instantiating a new Port object.
        This magically fixed the test_rebaseline test, since its now no longer talking
        to the real filesystem.

        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/mocktool.py:

2011-09-07  Eric Seidel  <eric@webkit.org>

        Add a new PortFactory class for creating new-style ports and deprecate the old PortFactory
        https://bugs.webkit.org/show_bug.cgi?id=67734

        Reviewed by Adam Barth.

        Right now every place that creates a Port object has to be very careful
        to pass in a MockSCM/MockUser/MockFilesystem when appropriate.
        The correct fix is for port/factory.py (which creates most port objects)
        to know how to pass these in automatically.  However, currently all port/factory.py
        functions are free functions instead of being on an object.  This patch
        adds a new PortFactory object and deprecates the PortFactory for the old-style Port objects.

        In a follow-up patch I will add PortFactory to the Host object and teach PortFactory how to
        pass along the proper scm/user/filesystem to the Port object.

        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/mocktool.py:

2011-09-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94441.
        http://trac.webkit.org/changeset/94441
        https://bugs.webkit.org/show_bug.cgi?id=67731

        "MacEWSes are backed up due to new machines not able to reach
        git.webkit.org.  Disabling tests for now" (Requested by
        eseidel2 on #webkit).

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:

2011-09-07  Elliot Poger  <epoger@google.com>

        filter test_expectations properly for chromium-mac vs chromium-cg-mac
        https://bugs.webkit.org/show_bug.cgi?id=67324

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:

2011-09-07  Eric Boren  <borenet@gmail.com>

        [Chromium] Modify WebTouchEvent structure to match WebCore::TouchEvent
        https://bugs.webkit.org/show_bug.cgi?id=66800

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::sendCurrentTouchEvent):

2011-09-07  Jarred Nicholls  <jarred@sencha.com>

        [Qt][DRT] Normalize file:///tmp/LayoutTests in LayoutTestController::pathToLocalResource()
        https://bugs.webkit.org/show_bug.cgi?id=67254

        Reviewed by Csaba Osztrogonác.

        Translate file:///tmp/LayoutTests/* urls into the repository LayoutTests directory, which is
        derived from the running location of DumpRenderTree binary.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::pathToLocalResource):
        (LayoutTestController::setUserStyleSheetLocation): pass the url through pathToLocalResource

2011-09-07  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r94288) build-webkit doesn't work on Symbian
        https://bugs.webkit.org/show_bug.cgi?id=67706

        * Scripts/webkitdirs.pm: Disable automatic clean build on Symbian, because it doesn't support shadow build.
        (buildQMakeProject):

2011-09-07  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r94288) build-webkit doesn't work on Windows
        https://bugs.webkit.org/show_bug.cgi?id=67646

        Roll back r94655 with a small fix.

        * Scripts/webkitdirs.pm:
        (buildQMakeProject):

2011-09-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94635.
        http://trac.webkit.org/changeset/94635
        https://bugs.webkit.org/show_bug.cgi?id=67704

        Linux Touch build is failing to compile this change.
        (Requested by loislo on #webkit).

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::sendCurrentTouchEvent):

2011-09-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94655.
        http://trac.webkit.org/changeset/94655
        https://bugs.webkit.org/show_bug.cgi?id=67703

        It broke Leopard debug bot (Requested by ossy on #webkit).

        * Scripts/webkitdirs.pm:

2011-09-07  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        REGRESSION(r94288) build-webkit doesn't work on Windows
        https://bugs.webkit.org/show_bug.cgi?id=67646

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:

2011-09-06  Eric Boren  <borenet@gmail.com>

        [Chromium] Modify WebTouchEvent structure to match WebCore::TouchEvent
        https://bugs.webkit.org/show_bug.cgi?id=66800

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::sendCurrentTouchEvent):

2011-09-06  Adam Barth  <abarth@webkit.org>

        garden-o-matic details view should having working rebaseline and next/previous buttons
        https://bugs.webkit.org/show_bug.cgi?id=67659

        Reviewed by Dimitri Glazkov.

        This patch wires up basic back/forward buttons that let you traverse
        through the results we're examining in the details view.  This ended up
        being more code than I expected, but I wanted to keep all the state
        information in the DOM itself.

        * 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:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:

2011-09-01  Dirk Pranke  <dpranke@chromium.org>

        fix MockFileSystem.glob(), refactor filesystem tests
        https://bugs.webkit.org/show_bug.cgi?id=67462

        Reviewed by Eric Seidel.

        In debugging why my proposed change for MockFileSystem.glob()
        in bug 66228 didn't work, I stumbled across two real bugs
        that cancelled each other out for the unit tests. I fixed those
        (glob shouldn't recurse into subdirs, and we weren't populating
        self.dirs from self.files properly).

        I have also created a "mixin" class for tests that can be shared
        between the real filesystem and the mock filesystem - MockFileSystem
        is being used enough it needs its own tests.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/common/system/filesystem_mock_unittest.py: Added.
        * Scripts/webkitpy/common/system/filesystem_unittest.py:

2011-09-06  Anders Carlsson  <andersca@apple.com>

        Move NPAPI headers in bridge to plugins
        https://bugs.webkit.org/show_bug.cgi?id=67661

        Update forwarding headers.

        * DumpRenderTree/unix/TestNetscapePlugin/ForwardingHeaders/WebKit/npapi.h:
        * DumpRenderTree/unix/TestNetscapePlugin/ForwardingHeaders/WebKit/npruntime.h:

2011-09-06  Tony Chang  <tony@chromium.org>

        [chromium] Check in 'build' for compiled binaries first
        https://bugs.webkit.org/show_bug.cgi?id=67549

        Reviewed by Dirk Pranke.

        I'm working on moving the windows build output to a common location
        rather than relative to the sln file.  Because of that, we need to
        check those build locations first for DumpRenderTree.exe.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

2011-09-06  Adam Barth  <abarth@webkit.org>

        Use a hierarchial structure for the garden-o-matic results view
        https://bugs.webkit.org/show_bug.cgi?id=67620

        Reviewed by Dimitri Glazkov.

        This patch re-organizes the results view to use a hierachial structure
        for selection.  At the top-level are sections for each test.  Expanding
        the test section shows a tab selector for builders.

        This structure prepares us for wiring up various actions to this view.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.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:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:
        (.results-view>.toolbar):
        (.results-view>.toolbar ul.actions):
        (.results-view>.toolbar ul.actions li):
        (.results-grid table):
        (.results-grid table td, .results-view table th):
        (.results-grid table th):
        (.results-grid .text-result):
        (.results-grid .image-result):

2011-09-06  Adam Barth  <abarth@webkit.org>

        garden-o-matic's base.probe generates spam in the JavaScript console
        https://bugs.webkit.org/show_bug.cgi?id=67622

        Reviewed by Dimitri Glazkov.

        Now that we have CORS set up on the buildbot, we can use XMLHttpRequest
        instead of HTMLScriptElement to test whether results exist.  This
        reduces the console.log spam and saves bandwidth because we can use a
        HEAD request instead of a GET request.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/net.js:

2011-09-05  Adam Barth  <abarth@webkit.org>

        Add a tab to garden-o-matic for viewing expected failures
        https://bugs.webkit.org/show_bug.cgi?id=67619

        Reviewed by Dimitri Glazkov.

        This patch adds a basic tab to garden-o-matic that shows all the tests
        failing on the bots, including the expected failures.  This patch
        mostly involves refactoring existing classes to allow new subclasses.

        This view is useful for when gardeners mark tests as expected to fail
        and then rebaseline them later.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary-mock.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:

2011-09-05  Adam Barth  <abarth@webkit.org>

        Fix global variable leak in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=67617

        Reviewed by Dimitri Glazkov.

        Caught by running the unit tests with noglobals turned on.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:

2011-09-05  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Add pixel test support
        https://bugs.webkit.org/show_bug.cgi?id=66283

        Reviewed by Andreas Kling.

        Implemented pixel result generation by reusing the logic
        that we have in DumpRenderTree.
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::dumpImage):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2011-09-04  Robin Dunn  <robin@alldunn.com>

        [wx] Enable wxWebKit to run using the wxGC Cairo backend on platforms other than GTK.
        https://bugs.webkit.org/show_bug.cgi?id=67577

        Reviewed by Kevin Ollivier.

        * waf/build/settings.py:

2011-09-03  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Add wtf/dtoa directory to build.

        * waf/build/settings.py:

2011-09-03  Dan Bernstein  <mitz@apple.com>

        32-bit build fix.

        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::toSTD):

2011-09-03  Dan Bernstein  <mitz@apple.com>

        Move testStringByEvaluatingJavaScriptFromString() from DumpRenderTree to TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=67559

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree): Moved testStringByEvaluatingJavaScriptFromString() from here and removed
        the call to it.
        * TestWebKitAPI/PlatformUtilities.h: Declared Util::toSTD(NSString *)
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added StringByEvaluatingJavaScriptFromString.mm.
        * TestWebKitAPI/Tests/mac/StringByEvaluatingJavaScriptFromString.mm: Added.
        (TestWebKitAPI::TEST): Added. Moved testStringByEvaluatingJavaScriptFromString() to here.
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::toSTD): Added.

2011-09-03  Adam Barth  <abarth@webkit.org>

        garden-o-matic results view should have a better results selector
        https://bugs.webkit.org/show_bug.cgi?id=67542

        Reviewed by Dimitri Glazkov.

        This patch adds a basic grid-based results selector to the results
        view.  Currently, this grid just shows how the tests fail on the
        various bots.  A future patch will let you select which failure to view
        and to mark the failures for rebaselining.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:
          - Add some more basic functions for manipulating dictionaries.
        * 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:

2011-09-03  Adam Barth  <abarth@webkit.org>

        garden-o-matic results view should show Actual and Expected results for text failures
        https://bugs.webkit.org/show_bug.cgi?id=67536

        Reviewed by Eric Seidel.

        In the past, we didn't show actual and expected text results (we just
        showed the diff) because we didn't have the awesome six-by-two results
        grid.  Now that we do, we can move show these results.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:
          - Fixed some typos that were preventing these unit tests from running.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js:
          - Report -actual.txt and -expected.txt as possible results URLs.

2011-09-03  Adam Barth  <abarth@webkit.org>

        garden-o-matic shows "ghost" failures that are already fixed
        https://bugs.webkit.org/show_bug.cgi?id=67535

        Reviewed by Eric Seidel.

        About 10% of writes fail to stick on test-results.appspot.com.  This
        patch causes us to fetch the full_results.json blob directly from
        build.chromium.org rather than relying upon AppEngine.

        Unforuntately, we still need to get historical information from
        AppEngine.  That will take several patches to fix becuase I need to
        change the bots to write the full_results.json file to the
        build-specific directory in addition to the zip file.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:

2011-09-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94458.
        http://trac.webkit.org/changeset/94458
        https://bugs.webkit.org/show_bug.cgi?id=67558

        Caused appcache test to fail on various bots (Requested by
        rniwa on #webkit).

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-09-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94453.
        http://trac.webkit.org/changeset/94453
        https://bugs.webkit.org/show_bug.cgi?id=67557

        Caused appcache test to fail on various bots (Requested by
        rniwa on #webkit).

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-09-02  Michael Saboff  <msaboff@apple.com>

        Add JSC:RegExp functional tests
        https://bugs.webkit.org/show_bug.cgi?id=67339

        New perl script to build JavaScriptCore and run the RegExp tests.

        Reviewed by Gavin Barraclough.

        * Scripts/run-regexp-tests: Added.

2011-09-02  Michael Saboff  <msaboff@apple.com>

        Add JSC:RegExp functional tests
        https://bugs.webkit.org/show_bug.cgi?id=67339

        New perl script to build JavaScriptCore and run the RegExp tests.

        Reviewed by Gavin Barraclough.

        * Scripts/run-regexp-tests: Added.

2011-09-02  Eric Seidel  <eric@webkit.org>

        Reshuffle some code in WebKitDriver._read_block in preparation for reading stderr/stdout separately
        https://bugs.webkit.org/show_bug.cgi?id=67530

        Unreviewed.  Fixing typo from previous commit.

        Turns out there was *no* unittesting of WebKitDriver.  Added a basic test of _read_block
        which exercises the code I previously made a typo in.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-09-02  Eric Seidel  <eric@webkit.org>

        Reshuffle some code in WebKitDriver._read_block in preparation for reading stderr/stdout separately
        https://bugs.webkit.org/show_bug.cgi?id=67530

        Reviewed by Adam Barth.

        No functional change, just reshuffling code.

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-09-02  Darin Adler  <darin@apple.com>

        Added Subversion ignore for .pyc generated files.

        * Scripts/webkitpy/layout_tests/models: Added property svn:ignore.
        * Scripts/webkitpy/layout_tests/servers: Added property svn:ignore.
        * Scripts/webkitpy/tool/servers: Added property svn:ignore.

2011-09-02  Adam Barth  <abarth@webkit.org>

        Enable testing on mac-ews
        https://bugs.webkit.org/show_bug.cgi?id=67505

        Reviewed by Eric Seidel.

        This patch enables testing on the Mac EWS, which should help
        contributors not turn the Mac bots red.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:

2011-09-01  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=67451
        Add a test for going back to a cached page after changing the device scale factor

        Reviewed by Adam Roben.

        New test DeviceScaleFactorOnBack.mm inherits from WebKitAgnosticTest.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorOnBack.mm: Added.
        (TestWebKitAPI::DeviceScaleFactorOnBack::url):
        (TestWebKitAPI::DeviceScaleFactorOnBack::didLoadURL):
        (TestWebKitAPI::DeviceScaleFactorOnBack::createWindow):
        (TestWebKitAPI::DeviceScaleFactorOnBack::initializeView):
        (TestWebKitAPI::DeviceScaleFactorOnBack::runTest):
        (TestWebKitAPI::TEST_F):

        Added new function to WebKitAgnosticTest to goBack. Separated 
        waitForLoadToFinish() into its own function (instead of being a part of 
        loadAndWaitUntilFinished()) so that it can be called from goBack as 
        well. Also added initializeView() so we can set the cache model.
        * TestWebKitAPI/mac/WebKitAgnosticTest.h:
        (TestWebKitAPI::WebKitAgnosticTest::initializeView):
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        (TestWebKitAPI::WebKitAgnosticTest::WebKitAgnosticTest):
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit1Test):
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit2Test):
        (TestWebKitAPI::WebKitAgnosticTest::loadURL):
        (TestWebKitAPI::WebKitAgnosticTest::goBack):
        (TestWebKitAPI::WebKitAgnosticTest::waitForLoadToFinish):

2011-09-02  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * DumpRenderTree/TestNetscapePlugIn/Tests/PrivateBrowsing.cpp:
        (PrivateBrowsing::ScriptableObject::pluginTest):

2011-09-02  Anders Carlsson  <andersca@apple.com>

        Move private browsing test to a PluginTest subclass
        https://bugs.webkit.org/show_bug.cgi?id=67498

        Reviewed by Darin Adler.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginGetProperty):
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPP_SetValue):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        * DumpRenderTree/TestNetscapePlugIn/Tests/PrivateBrowsing.cpp: Added.
        (PrivateBrowsing::PrivateBrowsing):
        (PrivateBrowsing::privateBrowsingEnabled):
        (PrivateBrowsing::cachedPrivateBrowsingEnabled):
        (PrivateBrowsing::ScriptableObject::hasProperty):
        (PrivateBrowsing::ScriptableObject::getProperty):
        (PrivateBrowsing::ScriptableObject::pluginTest):
        (PrivateBrowsing::NPP_New):
        (PrivateBrowsing::NPP_GetValue):
        (PrivateBrowsing::NPP_SetValue):
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        (NPP_SetValue):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:

2011-09-02  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Build dependency problems
        https://bugs.webkit.org/show_bug.cgi?id=38054

        Trivial fix after r94288.

        Rubber-stamped by Andras Becsi.

        * Scripts/webkitdirs.pm: We should read the whole defaults.txt, not only the first two lines.
        (buildQMakeProject):

2011-09-02  Andras Becsi  <andras.becsi@nokia.com>

        Remove my old e-mail address and add my new one.

        Rubber-stamped by Tor Arne Vestbø.

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

2011-09-02  Philippe Normand  <pnormand@igalia.com>

        [GTK] run-gtk-tests leaves a zombie Xvfb process
        https://bugs.webkit.org/show_bug.cgi?id=67389

        Reviewed by Martin Robinson.

        * Scripts/run-gtk-tests: Properly close STDIN and STDERR on the
        child process instead of doing shell redirection.

2011-09-01  Mark Rowe  <mrowe@apple.com>

        Fix the build by adding some more missing return types.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):

2011-09-01  Eric Seidel  <eric@webkit.org>

        REGRESSION (NRWT): Leaks Viewer can't load leaks from test runs that used NRWT
        https://bugs.webkit.org/show_bug.cgi?id=66228

        Reviewed by Dirk Pranke.

        ORWT used $(PROCESS)$(NUMBER)-leaks.txt for leaks filenames.
        The LeaksViewer tool globs for all *-leaks.txt files.
        This patch makes NRWT output $(PROCESS)-$(PID)-leaks.txt which should match.

        In order to test this I had to fix a limitation in our MockFileSystem.glob
        method.  However, doing so uncovered a typo and bug in the integration tests.
        I've disabled the offending integration tests.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py:

2011-09-01  Dominic Mazzoni  <dmazzoni@google.com>

        Adds a LayoutTestController method to make it possible to test
        starting speech input via an API call.
        https://bugs.webkit.org/show_bug.cgi?id=60170

        Reviewed by Dimitri Glazkov.

        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::startSpeechInput):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::startSpeechInput):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::startSpeechInput):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::startSpeechInput):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::startSpeechInput):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::startSpeechInput):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::startSpeechInput):

2011-09-01  Tim Horton  <hortont424@gmail.com>

        Fix TestWebKitAPI build on clang-2.0

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:

2011-09-01  Adam Barth  <abarth@webkit.org>

        Remove unused "extension" parameter from rebaseline gardeningserver handler
        https://bugs.webkit.org/show_bug.cgi?id=67384

        Reviewed by James Robinson.

        This parameter hasn't done anything in a while.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:

2011-09-01  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        Fix a typo in unittests.  Unfortunately fixing it
        caused several assertions.  Just disabling the test
        instead, since it was providing no value before due to the typo.

        * Scripts/webkitpy/layout_tests/port/test.py:

2011-09-01  Adam Barth  <abarth@webkit.org>

        Add a "rebaseline" button to the garden-o-matic summary page
        https://bugs.webkit.org/show_bug.cgi?id=67382

        Reviewed by Dimitri Glazkov.

        As much as we might wish folks to not rebaseline entire test groups at
        once, the truth is that doing so is a common operation.  Adding a
        button for this operation is likely to make folks happy.

        This patch also cleans up a bunch of plumbing surrounding failureInfo
        objects.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:

2011-09-01  Adam Barth  <abarth@webkit.org>

        garden-o-matic should let the gardener assign blame for a group of test failures
        https://bugs.webkit.org/show_bug.cgi?id=67379

        Reviewed by Dimitri Glazkov.

        If a group of test failures has a large revision range, the gardener
        might wish to blame a specific revision for the failure.  Currently,
        this only effect of assigning blame in this way is to hide the other
        suspect commits.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:

2011-09-01  Adam Barth  <abarth@webkit.org>

        Hide garden-o-matic failure table until hover
        https://bugs.webkit.org/show_bug.cgi?id=67376

        Reviewed by Dimitri Glazkov.

        This patch removes the failure table for build failures (because it
        does not make sense) and hides the failure table for test groups until
        the user hovers over the test failure block, reducing visual noise.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css:

2011-09-01  Adam Barth  <abarth@webkit.org>

        Switch garden-o-matic from commitData.title to commitData.summary
        https://bugs.webkit.org/show_bug.cgi?id=67375

        Reviewed by Dimitri Glazkov.

        commitData.title is a string provided by Trac, which isn't great in all
        cases.  commitData.summary is my attempt to find the most important
        one-line summary of the commit.  This patch switches garden-o-matic
        over to summary.

        Also, this patch tweaks a bunch of CSS to tighten up the summary page
        and reduce visual noise.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css:

2011-09-01  Adam Barth  <abarth@webkit.org>

        Group failing tests in garden-o-matic if there are more than three in a folder
        https://bugs.webkit.org/show_bug.cgi?id=67373

        Reviewed by Dimitri Glazkov.

        Sometimes a failure will cause many tests in a given directory to fail.
        When that happens, it's better to list the directory as a single item
        (with a count) rather than spamming all the test names.

        (This patch also updates a bunch of unit test expected results after my last commit.)

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:

2011-09-01  Adam Barth  <abarth@webkit.org>

        Lower the visual noise from the failing builders display
        https://bugs.webkit.org/show_bug.cgi?id=67369

        Reviewed by Dimitri Glazkov.

        This patch ensures that the "Building" row in the failing builders
        display is always last and dims it by 50% to reduce visual noise.  This
        lets the gardener focus on the actual failures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/failures.css: Added.

2011-09-01  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [Qt] Build dependency problems
        https://bugs.webkit.org/show_bug.cgi?id=38054

        Make clean build after the defines are changed.

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:
        (buildQMakeProject):

2011-08-31  Adam Barth  <abarth@webkit.org>

        Move DumpRenderTree to WebKitPlatformSupport
        https://bugs.webkit.org/show_bug.cgi?id=67331

        Reviewed by Darin Fisher.

        This patch update DumpRenderTree to account for the WebKitClient =>
        WebKitPlatformSupport rename.

        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::show):
        * DumpRenderTree/chromium/Task.cpp:
        (postTask):

2011-08-31  Eric Seidel  <eric@webkit.org>

        Add queues.webkit.org/active-bots page to make it easy to see which bots are down
        https://bugs.webkit.org/show_bug.cgi?id=67314

        Reviewed by Adam Barth.

        Very simple page.  Just lists all the bots, what queue they belong to and what we last heard from them.
        If we haven't heard from a bot in the last 500 messages (last day or so), then it won't show up here.
        This makes it very easy for me to see which of my cr-jail bots might be down at any one time.

        I also moved a bunch of code into dashboard.css which belonged there.

        * QueueStatusServer/handlers/activebots.py: Added.
        * QueueStatusServer/main.py:
        * QueueStatusServer/stylesheets/dashboard.css:
        (.queue_bubble):
        (.queue_name):
        (.last_heard_from):
        (.status_text):
        (.alive):
        (.behind):
        (.dead):
        * QueueStatusServer/templates/activebots.html: Added.
        * QueueStatusServer/templates/dashboard.html:
        * QueueStatusServer/templates/recentstatus.html:

2011-08-31  Oliver Hunt  <oliver@apple.com>

        Move CheckedArithmeticOperations.cpp to the intended location

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp: Renamed from Tools/TestWebKitAPI/Tests/CheckedArithmeticOperations.cpp.

2011-08-31  Elliot Poger  <epoger@google.com>

        add unittest to validate the complete set of Chromium configurations
        https://bugs.webkit.org/show_bug.cgi?id=67211

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2011-08-31  Nico Weber  <thakis@chromium.org>

        Make ScrollAnimator(Chromium)?Mac check scrollAnimatorEnabled()
        https://bugs.webkit.org/show_bug.cgi?id=67297

        Reviewed by Tony Chang.

        Explicitly disable smooth scrolling in chromium's DRT.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):

2011-08-31  Oliver Hunt  <oliver@apple.com>

        Add Checked<> tests to windows build

        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2011-08-30  Oliver Hunt  <oliver@apple.com>

        Add support for checked arithmetic
        https://bugs.webkit.org/show_bug.cgi?id=67095

        Reviewed by Sam Weinig.

        Add test cases for Checked<>

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/CheckedArithmeticOperations.cpp: Added.

2011-08-31  Adam Barth  <abarth@webkit.org>

        Move summary.html to garden-o-matic.html.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html: Removed.

2011-08-31  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] DRT linux should pass nativeKeyCode to plugins
        https://bugs.webkit.org/show_bug.cgi?id=66679

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::keyDown):  Call a Chromium Linux GTK helper routine that returns the
        (simulated) nativeKeyCode for the given input keyboard code.

2011-08-31  Adam Barth  <abarth@webkit.org>

        Tighen up UI for garden-o-matic tab strip
        https://bugs.webkit.org/show_bug.cgi?id=67266

        Reviewed by Dimitri Glazkov.

        This patch add CSS to move the tab strip to the edges of the page and
        to remove some gratuitous border-radius.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/common.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html:

2011-08-31  Adam Barth  <abarth@webkit.org>

        garden-o-matic results view shouldn't be horrifically ugly
        https://bugs.webkit.org/show_bug.cgi?id=67264

        Reviewed by Dimitri Glazkov.

        Minor tweak to the results view CSS to make it fit in better with the new tabbed UI.

        * 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/styles/results.css:

2011-08-31  Adam Barth  <abarth@webkit.org>

        garden-o-matic needs a tabstrip
        https://bugs.webkit.org/show_bug.cgi?id=67263

        Reviewed by Dimitri Glazkov.

        This patch adds a basic tabstrip to garden-o-matic.  The results
        details view now opens in the "Results" tab, and the user can flip back
        and forth between the Summary and the Results tab quickly.  There's
        also a stub for a "Commits" tab, which is disabled.

        This patch isn't the most beautiful in the world, but it gets the ball
        rolling on a multi-modal UI.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/common.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html:

2011-08-31  Ai Makabi  <makabi@google.com>

        Extract reference links from reftest test file.
        https://bugs.webkit.org/show_bug.cgi?id=66838

        Reviewed by Shinichiro Hamaji.

        * Scripts/webkitpy/layout_tests/reftests/__init__.py: Added.
        * Scripts/webkitpy/layout_tests/reftests/extract_reference_link.py: Added.
        * Scripts/webkitpy/layout_tests/reftests/extract_reference_link_unittest.py: Added.

2011-08-03  Philippe Normand  <pnormand@igalia.com>

        [webkitpy] missing log import in common/net/resultsjsonparser.py
        https://bugs.webkit.org/show_bug.cgi?id=65606

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/common/net/resultsjsonparser.py: Import the logging module.

2011-08-30  Philippe Normand  <pnormand@igalia.com>

        [stylechecker] complains about NULL usage in some gst_structure_ calls
        https://bugs.webkit.org/show_bug.cgi?id=67194

        Reviewed by Martin Robinson.

        Don't warn about NULL in some gst_structure_ calls. 0 can't be
        used for these, a proper sentinel is required.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-08-30  Adam Barth  <abarth@webkit.org>

        Remove old-style UI from garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=67257

        Reviewed by Dimitri Glazkov.

        This code is nowhere near as awesome as the new hotness.  Let's remove
        it so it doesn't weigh us down.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/main.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/unexpected-passes.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.html: Removed.

2011-08-30  Takashi Toyoshima  <toyoshim@chromium.org>

        [WebSocket] update pywebsocket to 0.6b5.
        https://bugs.webkit.org/show_bug.cgi?id=66924

        Reviewed by Kent Tamura.

        pywebsocket 0.6b2 supported minimum features of Hybi-08 specification.
        Now, pywebsocket 0.6b5 supports full features of Hybi-10 specification.
        0.6b3 or later supports a closing handshake handler and it is useful to
        verify client's closing handshake implementation.
        0.6b4 supports AbortedByUserException. It is useful to eliminate
        unnecessary server warning messages on intended abnormal closures.
        0.6b5 supports Python 2.5.1 or Mac 10.5.

        * Scripts/webkitpy/thirdparty/__init__.py:
        Update download URL and directory path.

2011-08-30  Dan Bernstein  <mitz@apple.com>

        Test for <rdar://problem/9281695> Add text search API for getting the DOM range of a text match
        https://bugs.webkit.org/show_bug.cgi?id=67230

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/DOMRangeOfString.html: Added.
        * TestWebKitAPI/Tests/mac/DOMRangeOfString.mm: Added.
        (-[DOMRangeOfStringFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::TEST):

2011-08-30  Aaron Colwell  <acolwell@chromium.org>

        Add MediaSource API to HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=64731

        Reviewed by Eric Carlson.

        * Scripts/build-webkit:

2011-08-30  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Emit last progress notification before calling dispatchDidFinishLoad
        https://bugs.webkit.org/show_bug.cgi?id=28851

        Reviewed by Adam Barth.

        Implement dumpProgressFinishedCallback() in the layoutTestController for Qt,
        Chromium and GTK ports. The first two were simple changes.

        Some refactoring was needed in GTK port to assure that the dumps are emitted
        correctly and the processing after the page load finished is in the right place.

        To detect the load finished, we use the callback for the "load-status" notifier
        signal of the top loading frame. And we use the deprecated "load-finished" signal
        for dumping (if enabled) the progress finished expected output.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpProgressFinishedCallbackCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpProgressFinishedCallback):
        (LayoutTestController::setDumpProgressFinishedCallback):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::dumpProgressFinishedCallback):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::shouldDumpProgressFinishedCallback):
        (LayoutTestController::setShouldDumpProgressFinishedCallback):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didStopLoading):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewLoadFinished):
        (topLoadingFrameLoadFinished):
        (webFrameLoadStatusNotified):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::dumpProgressFinishedCallback):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-08-30  Filip Pizlo  <fpizlo@apple.com>

        JavaScriptCore does not have a good mechanism for performance
        regression testing
        https://bugs.webkit.org/show_bug.cgi?id=67177

        Reviewed by Darin Adler.
        
        Added a new script, which allows for testing one, two, or more VMs
        at once on SunSpider, V8, and Kraken benchmarks.  Benchmark/VM runs
        are interleaved at random to minimize systematics.  The results
        that bencher prints includes all possible relevant information about
        how bencher was invoked.  Bencher can be easily used to measure
        performance changes down to fractions of a percent.
        
        Bencher also includes experimental support for running benchmarks in
        a DumpRenderTree release build.  This works in SunSpider and V8, but
        not yet in Kraken.  Running benchmarks in DumpRenderTree more
        closely mimics the performance when running in browser.

        * Scripts/bencher: Added.

2011-08-29  Alexey Proskuryakov  <ap@apple.com>

        DumpRenderTree should begin each test with an empty cookie store
        https://bugs.webkit.org/show_bug.cgi?id=63545
        <rdar://problem/5666907>

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        (setDefaultsToConsistentValuesForTesting):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setAlwaysAcceptCookies):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        Use new SPIs to manipulate sessions.

2011-08-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94055 and r94057.
        http://trac.webkit.org/changeset/94055
        http://trac.webkit.org/changeset/94057
        https://bugs.webkit.org/show_bug.cgi?id=67191

        Many failures on Mac 10.5 (Requested by toyoshim on #webkit).

        * Scripts/webkitpy/thirdparty/__init__.py:

2011-08-30  Adam Barth  <abarth@webkit.org>

        Chromium Android should not be a core builder
        https://bugs.webkit.org/show_bug.cgi?id=67184

        Reviewed by Ryosuke Niwa.

        This bot hasn't been consistently green yet because it has never actually run!

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-08-30  Takashi Toyoshima  <toyoshim@chromium.org>

        [WebSocket] update pywebsocket to 0.6b4.
        https://bugs.webkit.org/show_bug.cgi?id=66924

        Reviewed by Kent Tamura.

        pywebsocket 0.6b2 supported minimum features of Hybi-08 specification.
        Now, pywebsocket 0.6b4 supports full features of Hybi-10 specification.
        0.6b3 or later supports a closing handshake handler and it is useful to
        verify client's closing handshake implementation.
        0.6b4 supports AbortedByUserException. It is useful to eliminate
        unnecessary server warning messages on intended abnormal closures.

        * Scripts/webkitpy/thirdparty/__init__.py:
        Update download URL and directory path.

2011-08-29  Tom Zakrajsek  <tomz@codeaurora.org>

        sheriffbot "usage" help statements are wrong
        https://bugs.webkit.org/show_bug.cgi?id=67170

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-08-29  Adam Barth  <abarth@webkit.org>

        Add support for chomium-mac (non-CoreGraphics) baselines
        https://bugs.webkit.org/show_bug.cgi?id=67163

        Reviewed by Eric Seidel.

        This patch teaches the non-CG chromium-mac bots to look at non-CG
        baselines.  However, the patch still leaves CG as the default set of
        baselines.

        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        * Scripts/webkitpy/common/config/build.py:
        * Scripts/webkitpy/common/config/build_unittest.py:
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:

2011-08-29  Shawn Singh  <shawnsingh@chromium.org>

        Small fix in chromium port of new-run-webkit-tests.
        https://bugs.webkit.org/show_bug.cgi?id=67078

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-08-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r93987, r93992, r93995, r93998, and
        r93999.
        http://trac.webkit.org/changeset/93987
        http://trac.webkit.org/changeset/93992
        http://trac.webkit.org/changeset/93995
        http://trac.webkit.org/changeset/93998
        http://trac.webkit.org/changeset/93999
        https://bugs.webkit.org/show_bug.cgi?id=67147

        Many failing tests (Requested by ap on #webkit).

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):

2011-08-26  Alexey Proskuryakov  <ap@apple.com>

        DumpRenderTree should begin each test with an empty cookie store
        https://bugs.webkit.org/show_bug.cgi?id=63545
        <rdar://problem/5666907>

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        Tell WebCore to use a temporary session, starting with a clean cookie store.

2011-08-23  Chris Marrin  <cmarrin@apple.com>

        [mac] requestAnimationFrame support for mac port
        https://bugs.webkit.org/show_bug.cgi?id=59146

        Reviewed by Simon Fraser.

        Add support for request-animation-callback flag

        * Scripts/build-webkit:

2011-08-27  Peter Beverloo  <peter@chromium.org>

        Add a build bot for Chromium with OS(ANDROID)
        https://bugs.webkit.org/show_bug.cgi?id=66687

        Reviewed by Adam Barth.

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

2011-08-27  Peter Beverloo  <peter@chromium.org>

        Update the master build bot configuration script to properly
        deal with the --chromium-android switch.
        https://bugs.webkit.org/show_bug.cgi?id=66687

        The --chromium-android switch is needed when running
        update-webkit-chromium and build-webkit, as it'll tell the
        scripts to pull in the right dependencies and cross-compile
        WebKit using the Android NDK.

        Reviewed by Adam Barth.

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

2011-08-27  Peter Beverloo  <peter@chromium.org>

        Teach the update and build scripts how to handle dependencies
        and cross-compiling rules for the Chromium port on OS(ANDROID).
        https://bugs.webkit.org/show_bug.cgi?id=66687

        Reviewed by Adam Barth.

        * Scripts/build-webkit:
        * Scripts/update-webkit:
        * Scripts/update-webkit-chromium:
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        (isChromium):
        (isChromiumAndroid):
        (determineIsChromiumAndroid):
        (buildChromium):

2011-08-26  Adam Barth  <abarth@webkit.org>

        garden-o-matic should let me know that I need to run the local server
        https://bugs.webkit.org/show_bug.cgi?id=66985

        Reviewed by Dimitri Glazkov.

        The patch triggers an alert dialog whenever the user tries to use a
        feature that requires the local server.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js:

2011-08-26  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic summary view should have pretty commit data information.
        https://bugs.webkit.org/show_bug.cgi?id=67069

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Added support for styling commit data.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Changed tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/common.css: Defined global anchor color.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css: Styled commit data.

2011-08-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Tweak the use of Open Sans in garden-o-matic summary view to make it look decent on Windows and Linux.
        https://bugs.webkit.org/show_bug.cgi?id=67066

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary-mock.html: Tweaked.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html: Ditto.

2011-08-26  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [DRT] Include cairo.h in PixelDumpSupportCairo.h for EFL too.
        https://bugs.webkit.org/show_bug.cgi?id=67041

        Reviewed by Martin Robinson.

        This is a follow-up to r89053: EFL's PixelDumpSupportEfl.cpp includes
        PixelDumpSupportCairo.h, but the latter was #including cairo.h only
        when the GTK+ port was being built.

        * DumpRenderTree/cairo/PixelDumpSupportCairo.h:

2011-08-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Clean up and line up layout in garden-o-matic summary view.
        https://bugs.webkit.org/show_bug.cgi?id=67057

        1) Renamed ui.notifications.TestFailures to ui.notifications.TestsFailing to match BuildersFailing;
        2) Rearranged DOM structure a bit to accommodate recent changes;
        3) Added minimal CSS to line things up.

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js: Renamed TestFailures to TestsFailing.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary-mock.js: Added mocks for BuildersFailing.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js: Renamed TestFailures to TestsFailing.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js: Updated tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Changed DOM structure.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Updated tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/common.css: Tweaked common appearance.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css: Added minimal layout/style.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary-mock.html: Added Google Web Fonts hook.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html: Ditto.

2011-08-26  Alice Liu  <alice.liu@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=66823
        Add the request info to the WebPageProxy::CreateNewPage message

        Reviewed by Anders Carlsson.

        Update function declarations with additional parameter:
        * MiniBrowser/gtk/BrowserWindow.c:
        (createNewPage):
        * MiniBrowser/mac/BrowserWindowController.m:
        (createNewPage):
        * MiniBrowser/win/BrowserView.cpp:
        (createNewPage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        * WebKitTestRunner/TestController.h:

2011-08-26  Noel Gordon  <noel.gordon@gmail.com>

        Make show-pretty-diff work on linux
        https://bugs.webkit.org/show_bug.cgi?id=67017

        Reviewed by Adam Barth.

        * Scripts/show-pretty-diff:

2011-08-25  Dimitri Glazkov  <dglazkov@chromium.org>

        Reorganize garden-o-matic CSS files to match JS-built views.
        https://bugs.webkit.org/show_bug.cgi?id=66998

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/common.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/summary.css: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary-mock.html: Changed to use new CSS files.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html: Ditto.

2011-08-25  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to roll out patches
        https://bugs.webkit.org/show_bug.cgi?id=66982

        Reviewed by Dimitri Glazkov.

        This patch just wires the rollout event through the controller to the
        local server, which is already set up to perform rollouts.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:

2011-08-25  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt] [WK2] Assert in computeViewportAttributes when MiniBrowser started with -touch
        https://bugs.webkit.org/show_bug.cgi?id=66951

        Reviewed by Andreas Kling.

        Function computeViewportAttributes() gets called when height is still 0 because MiniBrowser sets
        width and height one by one and setWidth cause geometryChange event in QTouchWebView. 

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::resizeEvent):

2011-08-25  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic summary view should provide information on builders still in flight.
        https://bugs.webkit.org/show_bug.cgi?id=66992

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js: Added grabbing the list of in-flight builders.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js: Added buildersInFlightForRevision.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model_unittests.js: Added tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Split off updating builder results to own method.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Added tests.

2011-08-25  Adam Barth  <abarth@webkit.org>

        webkit-patch rebaseline-expectations don't work when run outside the root
        https://bugs.webkit.org/show_bug.cgi?id=66966

        Reviewed by Eric Seidel.

        Turns out tool.path() used to be relative, which caused problems when
        running webkit-patch outside the root directory.  This patch makes it
        absolute.  I checked all callers, and they all appear to want this
        behavior.

        It was unclear to me how to test this change because we only really
        have a testing strategy for webkitpy, not for the main script.

        * Scripts/webkit-patch:

2011-08-25  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic summary needs a mock view that could be used for working on styling
        https://bugs.webkit.org/show_bug.cgi?id=66971

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary-mock.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary-mock.html: Added.

2011-08-25  Anders Carlsson  <andersca@apple.com>

        Return the correct value for NPNVsupportsCarbonBool
        https://bugs.webkit.org/show_bug.cgi?id=66964

        Add a test.

        Reviewed by Adam Roben.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/SupportsCarbonEventModel.cpp: Added.
        (SupportsCarbonEventModel::SupportsCarbonEventModel):
        (SupportsCarbonEventModel::testConvert):
        (SupportsCarbonEventModel::runTest):
        (SupportsCarbonEventModel::NPP_New):

2011-08-25  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic summary view should not be broken.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/summary.css:
        (table.comparison): Added more specificity.

2011-08-25  Adam Barth  <abarth@webkit.org>

        This command has been broken for a while.  This patch updates the
        callsite to the new API.

        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-08-25  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic needs a way to report where and how tests are failing in the summary view.
        https://bugs.webkit.org/show_bug.cgi?id=66955

        Introduce FailureGrid, your one-stop failure-indicating destination. 

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html: Added new scripts.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Updated to use FailureGrid.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Updated tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html: Added new scripts.

2011-08-25  Igor Oliveira  <igor.oliveira@openbossa.org>

        Add myself to the committers list
        https://bugs.webkit.org/show_bug.cgi?id=66941

        Reviewed by Andreas Kling.

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

2011-08-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r93767.
        http://trac.webkit.org/changeset/93767
        https://bugs.webkit.org/show_bug.cgi?id=66931

        Broke Qt bot. (Requested by yutak on #webkit).

        * Scripts/webkitpy/thirdparty/__init__.py:

2011-08-25  Takashi Toyoshima  <toyoshim@chromium.org>

        [WebSocket] update pywebsocket to 0.6b3 which supports closing handshake test
        https://bugs.webkit.org/show_bug.cgi?id=66924

        Reviewed by Kent Tamura.

        * Scripts/webkitpy/thirdparty/__init__.py:

2011-08-24  Adam Barth  <abarth@webkit.org>

        The user can't close the details view in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=66911

        Reviewed by Dimitri Glazkov.

        In addition to adding a close button, this patch changes the test
        selector to use a <select> element and refactors the test selector to
        share code with the builder selector.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:

2011-08-24  James Robinson  <jamesr@chromium.org>

        [chromium] Stacktrace not in test output when a test crashes
        https://bugs.webkit.org/show_bug.cgi?id=66806

        Reviewed by Dirk Pranke.

        Appends the .error and .text output when a test crashes since on chromium the .text contains the actual stack
        trace.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-08-24  Adam Barth  <abarth@webkit.org>

        Remove empty directory.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui: Removed.

2011-08-24  Adam Barth  <abarth@webkit.org>

        Finish writing up details-view in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=66891

        Reviewed by Dimitri Glazkov.

        This patch mostly just copies a bunch of CSS from main.css to
        summary.css.  Presumably we'll delete main.css soon.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/summary.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html:

2011-08-24  James Robinson  <jamesr@chromium.org>

        Some compositing LayoutTests flakily crashing on Mac 10.6
        https://bugs.webkit.org/show_bug.cgi?id=66740

        Reviewed by Adam Barth.

        Null-check obj->pluginTest before dereferencing it. This can be null in chromium if the plugin load fails, for
        example if the test attempts to load a PDF plugin the load will fail since we don't have such a thing in the
        chromium configuration.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_Destroy):

2011-08-24  Anton D'Auria  <adauria@apple.com>

        No review necessary.

        Adding myself to list of committers.

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

2011-08-24  Avi Drissman  <avi@google.com>

        Crash when restoring NSGraphicsContext when running the Chromium GPU layout tests on Mac
        https://bugs.webkit.org/show_bug.cgi?id=66875

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm:
        (WebThemeEngineDRTMac::paintNSScrollerScrollbarThumb):

2011-08-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Make notifications appear in time order again.
        https://bugs.webkit.org/show_bug.cgi?id=66815

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Added setting index of the notification.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Updated the test.

2011-08-23  James Robinson  <jamesr@chromium.org>

        [chromium] Need a way to test lost compositor context recovery
        https://bugs.webkit.org/show_bug.cgi?id=66820

        Reviewed by Kenneth Russell.

        Exposes a LayoutTestController interface in chromium to simulate a
        lost compositor context.

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

2011-08-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Change garden-o-matic frontend builder array to be a configuration map.
        https://bugs.webkit.org/show_bug.cgi?id=66816

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js: Made kBuilders a map, with value being a configuration object.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js: Adjusted callsites to expect a map.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/main.js: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js: Ditto.

2011-08-23  Cary Clark  <caryclark@google.com>

        Turn WebCanvas into CGContext before drawing scrollbar (DRT using Skia on Mac)
        https://bugs.webkit.org/show_bug.cgi?id=66803

        This fixes the WebKit Canaries, in particular avoids a crash on tests
        like css1/basic/comments.html.

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm:
        (WebThemeEngineDRTMac::paintNSScrollerScrollbarThumb):
        The NSGraphicsContext call graphicsContextWithGraphicsPort takes a void*
        parameter, so it took a WebCanvas* (mapped to SkCanvas* in Skia-land)
        and treated it as if it were a CGContextRef.

2011-08-23  Patrick Gansterer  <paroga@webkit.org>

        Fix mergeChangeLogs test on native windows
        https://bugs.webkit.org/show_bug.cgi?id=66797

        Reviewed by Adam Roben.

        Windows has no /tmp/ directory and the "TMPDIR" environment variable isn't set in the default setup.
        Add the "TEMP" environment variable as additional source for the temporary directory used in writeTempFile.

        * Scripts/webkitperl/VCSUtils_unittest/mergeChangeLogs.pl:
        (writeTempFile):

2011-08-23  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic relative time is wrong and updates too frequently.
        https://bugs.webkit.org/show_bug.cgi?id=66802

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js: Changed to account for rounding correctly.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js: Updated tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js: Upped the interval to 1 minute.

2011-08-23  Patrick Gansterer  <paroga@webkit.org>

        Add missing quotes around filenames in mergeChangeLogs
        https://bugs.webkit.org/show_bug.cgi?id=66794

        Reviewed by Adam Roben.

        * Scripts/VCSUtils.pm:
        (mergeChangeLogs):

2011-08-23  Patrick Gansterer  <paroga@webkit.org>

        webkit-perl tests fail on win32 Perl due to lack of list form of pipe open implementation
        https://bugs.webkit.org/show_bug.cgi?id=49080

        Reviewed by Adam Roben.

        Use the string form of pipe open instead (like we do at all other places).

        * Scripts/VCSUtils.pm:
        (mergeChangeLogs):

2011-08-23  Adam Barth  <abarth@webkit.org>

        garden-o-matic summary should be able to examine failures
        https://bugs.webkit.org/show_bug.cgi?id=66748

        Reviewed by Dimitri Glazkov.

        This patch refactors a bunch of code from summary.js to independent
        controllers in controllers.js.  This patch also contains the first
        iteration of binding the "examine" event to a the behavior showing the
        details view for the tests.  There's more work to do here to make this
        work properly (and elegantly), but this patch is a start.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers/rebaseline.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.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_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html:

2011-08-23  Adam Barth  <abarth@webkit.org>

        webkitpy/common/config/build.py shouldn't mention non-existant Android directory
        https://bugs.webkit.org/show_bug.cgi?id=66737

        Reviewed by Steve Block.

        This directory doesn't exist anymore now that the Android port shares
        more code with Chromium.

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

2011-08-22  Eric Seidel  <eric@webkit.org>

        Hack start-queue.sh in an attempt to resurrect the cr-jail-1 cr-mac-ews bot.
        I won't have ssh access to the bot again for a couple days, so
        attempting to fix by changing this script.  If this doesn't
        work we'll just live with the it hung for now.

        Unreviewed.

        * EWSTools/start-queue.sh:

2011-08-22  Dimitri Glazkov  <dglazkov@chromium.org>

        webkit-patch rebaseline-expectations command should not rearrange the entire test_expectations.txt file.
        https://bugs.webkit.org/show_bug.cgi?id=66727

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Made it possible to run TestExpectationSerializer without a TestConfigurationConverter,
            in which case the serializer treats all expectations as unparsed.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Added unit tests.

2011-08-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Update unit test expectations after r93530.

        * Scripts/webkitpy/layout_tests/port/factory_unittest.py: Updated.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py: Ditto.

2011-08-22  Dimitri Glazkov  <dglazkov@chromium.org>

        [Chromium] Expand CPU/GPU/Skia/CG into a matrix in graphics_type.
        https://bugs.webkit.org/show_bug.cgi?id=66705

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium.py: Added plumbing for CG graphics types.
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py: Adjusted unit test.

2011-08-22  James Robinson  <jamesr@chromium.org>

        [chromium] Update builder names for chromium gpu bots due to CG switchover
        https://bugs.webkit.org/show_bug.cgi?id=66693

        Reviewed by Dirk Pranke.

        Update the port and builder names for the chromium mac gpu bots to
        account for the CG transition.

        * Scripts/webkitpy/layout_tests/port/builders.py:

2011-08-22  Dirk Pranke  <dpranke@chromium.org>

        fix the GPU bot names on the layout test dashboard
        https://bugs.webkit.org/show_bug.cgi?id=66697

        Reviewed by Dimitri Glazkov.

        * TestResultServer/static-dashboards/builders.js:

2011-08-22  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic's relative time display should be updated regularly.
        https://bugs.webkit.org/show_bug.cgi?id=66682

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js: Moved Time to ui.Time, added code for regular updates.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Changed to use ui.Time.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js: Added tests.

2011-08-22  Xianzhu Wang  <wangxianzhu@chromium.org>

        Pass --makeargs of build-webkit to chromium linux builder
        https://bugs.webkit.org/show_bug.cgi?id=66361

        Reviewed by Tony Chang.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (buildChromiumMakefile):
        (buildChromium):

2011-08-22  Peter Beverloo  <peter@chromium.org>

        Add myself to the contributor list.
        https://bugs.webkit.org/show_bug.cgi?id=66674

        Reviewed by Tony Gentilcore.

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

2011-08-22  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] ImageDiff does not consider --tolerance
        https://bugs.webkit.org/show_bug.cgi?id=66299

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/qt/ImageDiff.cpp:
        (main):

2011-08-22  Csaba Osztrogonác  <ossy@webkit.org>

        Update contributor list.

        Reviewed by Zoltan Herczeg.

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

2011-08-22  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>

        [ORWT] Fix --reset-results --add-platform-exceptions combo
        https://bugs.webkit.org/show_bug.cgi?id=65464

        Reviewed by Csaba Osztrogonác.

        * Scripts/old-run-webkit-tests:

2011-08-20  Adam Barth  <abarth@webkit.org>

        garden-o-matic summary.html should have UI for examining failures
        https://bugs.webkit.org/show_bug.cgi?id=66625

        Reviewed by Dimitri Glazkov.

        This patch introduces the notion of UI actions and converts our
        existing manual <button> manipulation with this new abstraction.  The
        patch also adds an Examine button to failure notifications.  In a
        future patch, I'll add a controller that wires this button up to
        something useful.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions_unittests.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.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:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html:

2011-08-20  Adam Barth  <abarth@webkit.org>

        garden-o-matic summary page should indiciate compile failures
        https://bugs.webkit.org/show_bug.cgi?id=66624

        Reviewed by Dimitri Glazkov.

        This patch creates a notification-based UI for build failures.  The new
        UI displays the same information that used to be displayed in the
        infobar.  There's lots of room for improvement in surfacing more
        information, but this is a start.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:

2011-08-19  James Robinson  <jamesr@chromium.org>

        [chromium] Default to experimental-fully-parallel mode for chromium gpu port
        https://bugs.webkit.org/show_bug.cgi?id=66606

        Reviewed by Dirk Pranke.

        The chromium GPU configuration does not (currently) contain any tests
        incompatible with --experimental-fully-parallel, and this flag is a
        significan speedup because of the directory canvas/philip/tests which
        contains 802 tests in the same directory. Setting this option by
        default on this configuration is a 2x speed in release, 44s to 22s,
        and a 3x speedup in debug, 223s to 77s, on linux on a 16 core machine.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-08-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r93426.
        http://trac.webkit.org/changeset/93426
        https://bugs.webkit.org/show_bug.cgi?id=66607

        Broke the Mac build by not building gtest.framework anymore
        (Requested by andersca on #webkit).

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:

2011-08-19  James Robinson  <jamesr@chromium.org>

        [chromium] Chromium GPU layout tests should use the normal process number selection, not force 1 worker
        https://bugs.webkit.org/show_bug.cgi?id=66603

        Reviewed by Dirk Pranke.

        The various ChromiumGpu ports should use the same child worker
        selection logic as other ports so they can run with full
        parallelization on multicore systems.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:

2011-08-19  Alok Priyadarshi  <alokp@chromium.org>

        [chromium] Remove dependency of WebThemeControlDRTWin on skia::PlatformCanvas
        https://bugs.webkit.org/show_bug.cgi?id=66570

        Reviewed by Mihai Parparita.

        * DumpRenderTree/chromium/WebThemeControlDRTWin.cpp:
        (WebThemeControlDRTWin::draw):
        (WebThemeControlDRTWin::drawTextField):
        (WebThemeControlDRTWin::drawProgressBar):
        * DumpRenderTree/chromium/WebThemeControlDRTWin.h:

2011-08-18  Dmitry Lomov  <dslomov@google.com>

        TestWebKitAPI breaks on Windows due to fast malloc incompatibility.
        https://bugs.webkit.org/show_bug.cgi?id=66521

        This patch ensures that gtest uses new and delete operators that are defined in JavaScriptCore.

        Reviewed by David Levin.

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp: Removed redefinition of JS_EXPORTDATA.

2011-08-19  Adam Roben  <aroben@apple.com>

        Add project file changes I left out in r93417

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2011-08-19  Adam Roben  <aroben@apple.com>

        Add a helper class for swizzling ObjC instance methods to TestWebKitAPI

        Fixes <http://webkit.org/b/66565> TestWebKitAPI needs a way to override instance methods of
        NSScreen

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added new files.

        * TestWebKitAPI/Tests/TestWebKitAPI/mac/InstanceMethodSwizzler.mm: Added.
        (-[SimpleObject setValue:]): Original implementation.

        (TestWebKitAPI::setValue2):
        (TestWebKitAPI::setValue3):
        Swizzled implementations.

        (TestWebKitAPI::TEST): Test that we can swizzle and re-swizzle and un-swizzle an ObjC
        instance method.

        * TestWebKitAPI/mac/InstanceMethodSwizzler.h: Added.
        * TestWebKitAPI/mac/InstanceMethodSwizzler.mm: Added.
        (TestWebKitAPI::InstanceMethodSwizzler::InstanceMethodSwizzler): Swizzle the method.
        (TestWebKitAPI::InstanceMethodSwizzler::~InstanceMethodSwizzler): Unswizzle the method.

2011-08-19  Tom Zakrajsek  <tomz@codeaurora.org>

        Fix _path_to_apache() error reporting
        https://bugs.webkit.org/show_bug.cgi?id=66486

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-08-19  Adam Roben  <aroben@apple.com>

        Windows build fix after r93404

        * TestWebKitAPI/Tests/WebKit2/win/HideFindIndicator.cpp: Added missing #include.

2011-08-19  Tony Gentilcore  <tonyg@chromium.org>

        Add leandrogracia to the committers list
        https://bugs.webkit.org/show_bug.cgi?id=66552

        Also fix line endings in file.

        No reviewed required.

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

2011-08-19  Amruth Raj  <amruthraj@motorola.com>

        Fix compilation issue in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=66554

        Reviewed by Martin Robinson.

        * WebKitTestRunner/PixelDumpSupport.cpp:

2011-08-19  Adam Roben  <aroben@apple.com>

        Pull some of DynamicDeviceScaleFactor's code up into a shareable base class

        This will make it easier to write other WebKit-agnostic tests

        Fixes <http://webkit.org/b/66558> Would like to be able to reuse DynamicDeviceScaleFactor's
        code in other WebKit-agnostic tests

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added new files.

        * TestWebKitAPI/Tests/mac/DynamicDeviceScaleFactor.mm: Fixed copyright. Moved a bunch of
        code to WebKitAgnosticTest.h/mm. Changed to inherit from WebKitAgnosticTest.
        (TestWebKitAPI::DynamicDeviceScaleFactor::url): Simple getter.
        (TestWebKitAPI::DynamicDeviceScaleFactor::didLoadURL): Calls through to runTest.
        (TestWebKitAPI::DynamicDeviceScaleFactor::runTest): Removed loading code which
        WebKitAgnosticTest handles for us.
        (TestWebKitAPI::TEST_F): Removed view-creation code which WebKitAgnosticTest handles for us.

        * TestWebKitAPI/mac/WebKitAgnosticTest.h: Added. Code came from DynamicDeviceScaleFactor.
        (TestWebKitAPI::WebKitAgnosticTest::loadAndWaitUntilDone): Code came from
        DynamicDeviceScaleFactor::runTest.

        * TestWebKitAPI/mac/WebKitAgnosticTest.mm: Copied from Tools/TestWebKitAPI/Tests/mac/DynamicDeviceScaleFactor.mm.
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit1Test): Code came from
        DynamicDeviceScaleFactor.WebKit.
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit2Test): Code came from
        DynamicDeviceScaleFactor.WebKit2.

2011-08-19  Adam Roben  <aroben@apple.com>

        Clean up #includes in TestWebKitAPI

        Fixes <http://webkit.org/b/66556> TestWebKitAPI's prefix header isn't very helpful

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPIPrefix.h: Added wtf/Platform.h. Added gtest/gtest.h for C++
        files and WebKit/WebKit.h for ObjC files.

        * TestWebKitAPI/InjectedBundleController.cpp:
        * TestWebKitAPI/JavaScriptTest.h:
        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/Test.h:
        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
        * TestWebKitAPI/Tests/WTF/VectorBasic.cpp:
        * TestWebKitAPI/Tests/WTF/VectorReverse.cpp:
        * TestWebKitAPI/Tests/WebKit2/AboutBlankLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest.cpp:
        * TestWebKitAPI/Tests/WebKit2/CookieManager.cpp:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/DownloadDecideDestinationCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/EvaluateJavaScript.cpp:
        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/Find.cpp:
        * TestWebKitAPI/Tests/WebKit2/ForceRepaint.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypeHTML.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypePNG.cpp:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle.cpp:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/PreventEmptyUserAgent.cpp:
        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly.cpp:
        * TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp:
        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKString.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKStringJSString.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/AltKeyGeneratesWMSysCommand.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/DoNotCopyANullCFURLResponse.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/HideFindIndicator.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/TranslateMessageGeneratesWMChar.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/WMCloseCallsUIClientClose.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/WMPrint.cpp:
        * TestWebKitAPI/Tests/mac/DynamicDeviceScaleFactor.mm:
        * TestWebKitAPI/TestsController.cpp:
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        Removed now-unnecessary #includes. Moved #includes of Test.h in with the rest of the
        #includes since it is no longer a special header.

2011-08-18  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests hung while acquiring http lock on snow leopard bots
        https://bugs.webkit.org/show_bug.cgi?id=64886

        Temporarily disable the http locking to work around the issue.
        I'm not actually sure if this is going to work or improve things
        much.

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/layout_tests/port/mac.py:

2011-08-18  Tony Chang  <tony@chromium.org>

        add embedded png checksums to WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=66494

        Looks like WebKitTestRunner has never supported embedded checksums.  This copies
        some code from DRT and adds it to the WebKitTestRunner.

        Reviewed by Darin Adler.

        * WebKitTestRunner/CyclicRedundancyCheck.cpp: Copied from Tools/DumpRenderTree
        * WebKitTestRunner/CyclicRedundancyCheck.h: Copied from Tools/DumpRenderTree
        * WebKitTestRunner/GNUmakefile.am: Add new files
        * WebKitTestRunner/PixelDumpSupport.cpp: Copied from Tools/DumpRenderTree
        * WebKitTestRunner/PixelDumpSupport.h: Copied from Tools/DumpRenderTree
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Add new files
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::dumpBitmap): Refactor to use PixelDumpSupport.
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::dumpBitmap): Refactor to use PixelDumpSupport.
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/win/WebKitTestRunner.vcproj: Add new files

2011-08-18  Shawn Singh  <shawnsingh@chromium.org>

        https://bugs.webkit.org/show_bug.cgi?id=47240

        Fixed a cygwin path problem in the chromium port of diff_image;
        Also made the return values of the diff_image function more consistent.

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-08-17  Alejandro G. Castro  <alex@igalia.com>

        [GTK] Fix compilation problems with deprecations in gtk+
        https://bugs.webkit.org/show_bug.cgi?id=66073

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (main): G_CONST_RETURN was deprecated
        * GtkLauncher/main.c:
        (createWindow): Added gtk_box_new conditional compilation for
        gtk+-3.
        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_init): Replaced gtk_vbox_new with gtk_box_new, we
        are just supporting gtk+-3 for WebKit2.

2011-08-18  Anders Carlsson  <andersca@apple.com>

        Fix libc++ C++0x build
        https://bugs.webkit.org/show_bug.cgi?id=66479

        Reviewed by Adam Roben.

        Add missing includes.

        * DumpRenderTree/LayoutTestController.cpp:
        * DumpRenderTree/mac/CheckedMalloc.cpp:

2011-08-18  Adam Roben  <aroben@apple.com>

        Test that WebKit updates style when a WebView is moved between differently-scaled windows

        Test for <http://webkit.org/b/66412> <rdar://problem/9971958> WebKit doesn't react when a
        WebView is moved between windows with different backing scale factors

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/JavaScriptTest.cpp:
        (TestWebKitAPI::runJSTest): Moved a little bit of code from here...
        (TestWebKitAPI::compareJSResult): ...to here. Also made the error message more similar to
        gtest's built-in error messages.

        * TestWebKitAPI/JavaScriptTest.h: Added overloads of runJSTest that take a WebView * and
        WKView * for convenience on Mac. Added compareJSResult helper function for implementing
        those overloads.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added new files.

        * TestWebKitAPI/Tests/mac/DynamicDeviceScaleFactor.mm: Added.
        (-[FrameLoadDelegate initWithDidFinishLoadBoolean:]): Simple initializer.
        (-[FrameLoadDelegate webView:didFinishLoadForFrame:]): Record that the load finished.
        (TestWebKitAPI::didFinishLoadForFrame): Record that the load finished.
        (TestWebKitAPI::setPageLoaderClient): Set up the client.
        (TestWebKitAPI::DynamicDeviceScaleFactor::DynamicDeviceScaleFactor): Simple constructor.
        (TestWebKitAPI::DynamicDeviceScaleFactor::createWindow): Creates a
        SyntheticBackingScaleFactorWindow and returns it.
        (TestWebKitAPI::DynamicDeviceScaleFactor::runTest): Loads devicePixelRatio.html and checks
        that WebKit uses the correct scale factor when the WebView is not in a window, is put in a
        window, is moved to a differently-scaled window, and is taken out of the window.
        (TestWebKitAPI::DynamicDeviceScaleFactor::loadURL): Helper function with overloads for
        WebKit1 and WebKit2.
        (TestWebKitAPI::TEST_F): Runs the test, with overloads for WebKit1 and WebKit2.

        * TestWebKitAPI/Tests/mac/devicePixelRatio.html: Added.

        * TestWebKitAPI/mac/JavaScriptTestMac.mm: Added.
        (TestWebKitAPI::runJSTest): Fairly simple overloads for WebView * and WKView *.

        * TestWebKitAPI/mac/SyntheticBackingScaleFactorWindow.h: Added.
        * TestWebKitAPI/mac/SyntheticBackingScaleFactorWindow.m: Added.
        (-[SyntheticBackingScaleFactorWindow initWithContentRect:styleMask:backing:defer:]): Simple
        initializer.
        (-[SyntheticBackingScaleFactorWindow setBackingScaleFactor:]): Simple setter.

        (-[SyntheticBackingScaleFactorWindow backingScaleFactor]):
        (-[SyntheticBackingScaleFactorWindow userSpaceScaleFactor]):
        Overrides of NSWindow methods that WebKit uses to determine the device scale factor.

2011-08-18  Dmitry Lomov  <dslomov@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=66425
        check-webkit-style should detect incorrectly formatted file change descriptions.
        Description, if present, should be separated from colon with a space.

        Reviewed by David Levin.

        * Scripts/webkitpy/style/checkers/changelog.py: Fix.
        * Scripts/webkitpy/style/checkers/changelog_unittest.py: Unit tests.

2011-08-18  Adam Barth  <abarth@webkit.org>

        webkit-patch pretty-diff should be shown in main help
        https://bugs.webkit.org/show_bug.cgi?id=66404

        Reviewed by Dimitri Glazkov.

        As requested by dglazkov.

        * Scripts/webkitpy/tool/commands/prettydiff.py:

2011-08-17  Dmitry Lomov  <dslomov@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=66400
        Fix TestWebKitAPI build on Mac OS.

        Reviewed by David Levin.

        * TestWebKitAPI/Configurations/Base.xcconfig: Added ICU headers to the HEADER_SEARCH_PATH.

2011-08-17  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic spring cleaning: move scripts, styles, and images in the respective directories.
        https://bugs.webkit.org/show_bug.cgi?id=66427

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Bugzilla.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Buildbot.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Buildbot_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyTestBugForm.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyTestBugForm_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NRWTResultsParser.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ORWTResultsParser.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/PersistentCache.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestRelatedBugForm.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestRelatedBugForm_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/WebKitBugzilla.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/WebKitBuildbot.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/bugzilla_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/controllers: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/controllers.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/controllers/rebaseline.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/favicon-green.png: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/favicon-red.png: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/images: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/images/favicon-green.png: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/favicon-green.png.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/images/favicon-red.png: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/favicon-red.png.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/rebaseline.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Bugzilla.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Bugzilla.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Buildbot.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Buildbot.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Buildbot_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Buildbot_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Builder.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Builder_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/FailingTestsBugForm.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/FailingTestsBugForm_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/FlakyLayoutTestDetector.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/FlakyLayoutTestDetector_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/FlakyTestBugForm.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyTestBugForm.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/FlakyTestBugForm_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyTestBugForm_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/LayoutTestHistoryAnalyzer.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/LayoutTestResultsLoader.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/NRWTResultsParser.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NRWTResultsParser.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/NewBugForm.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/NewBugForm_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ORWTResultsParser.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ORWTResultsParser.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/PersistentCache.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/PersistentCache.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/TestRelatedBugForm.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestRelatedBugForm.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/TestRelatedBugForm_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestRelatedBugForm_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Trac.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Utilities.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Utilities_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ViewController.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/WebKitBugzilla.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/WebKitBugzilla.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/WebKitBuildbot.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/WebKitBuildbot.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/bugzilla_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/bugzilla_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/controllers.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/controllers.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/main.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js.
        ():
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/net.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/net_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/trac_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/trac_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/unexpected-passes.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/TestFailures.css: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/main.css: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/trac_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.js: Removed.

2011-08-17  Jochen Eisinger  <jochen@chromium.org>

        Make SVNTest.test_svn_apply use the same timezone logic as VCSUtils.pm
        https://bugs.webkit.org/show_bug.cgi?id=65877

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:

2011-08-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Remove base.keys and replace it with Object.keys.
        https://bugs.webkit.org/show_bug.cgi?id=66422

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js: Removed base.keys.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js: Removed unit tests for it.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js: Replaced with Object.keys

2011-08-17  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic Summary view should have items in descending chronological order.
        https://bugs.webkit.org/show_bug.cgi?id=66403

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js: Renamed "push" to "add" for clarity, cleaned up some stuff.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Rewrote add to insert DOM elements in order.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Added unit tests.

2011-08-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix a few errors in garden-o-matic frontend unit tests.
        https://bugs.webkit.org/show_bug.cgi?id=66421

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js: Changed my excellent test to view time as variable continuum.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders_unittests.js: Tweaked the test to accommodate new builder names.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Hurriedly covered up my prior sins.

2011-08-17  Adam Barth  <abarth@webkit.org>

        Update Tools to account for (CG) being added to Chromium builder names
        https://bugs.webkit.org/show_bug.cgi?id=66410

        Reviewed by Adam Barth.

        Some of these names will change back once we turn on Skia bots.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js:
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-08-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Wire up relative time to garden-o-matic summary view.
        https://bugs.webkit.org/show_bug.cgi?id=66343

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js: Add time to the commitData object. 
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model_unittests.js: Adjusted unit tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Wired up relative date.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Updated unit tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/trac_unittests.js: Adjusted unit tests.

2011-08-17  Adam Roben  <aroben@apple.com>

        Make run-api-tests run tests in alphabetical order

        Fixes <http://webkit.org/b/66401> run-api-tests runs tests in a semi-random order

        Reviewed by David Kilzer.

        * Scripts/run-api-tests:
        (runAllTests):
        (runAllTestsInSuite):
        Sort the lists of tests and suites before iterating over them.

2011-08-17  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to rebaseline expected failures
        https://bugs.webkit.org/show_bug.cgi?id=66204

        Reviewed by Dimitri Glazkov.

        This patch introduces a new view for displaying expect, actual, and
        differences between results.  The new view also has a fledgling
        controller that handles some basic operations.  The new view is
        exercised by rebaseline.html, which lets you rebaselines expected
        failures, but the new view is not fully integrated into
        garden-o-matic.html

        More patches will be required to make this stuff fully working, but
        this patch was already somewhat spiraling out of control.  Hopefully
        this patch will serve as a good starting point for further development.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/controllers: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/controllers.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/controllers/rebaseline.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/rebaseline.html: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results_unittests.js: Added.

2011-08-16  Chang Shu  <cshu@webkit.org>

        Support reset in WebCore::Internals
        https://bugs.webkit.org/show_bug.cgi?id=66307

        Reviewed by Dimitri Glazkov.

        Added call to resetInternalsObject in DRT.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):

2011-08-17  Alexis Menard  <alexis.menard@openbossa.org>

        Add a new build slave for the Qt port on Mac OS SnowLeopard.
        https://bugs.webkit.org/show_bug.cgi?id=66392

        Modify the config file to include the new build slave.

        Reviewed by Adam Roben.

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

2011-08-17  Sam White  <samuel.white@rochester.edu>

        AccessibilityObject levels are inconsistent
        https://bugs.webkit.org/show_bug.cgi?id=66180
        
        Added the ability to get numeric attribute values using numberAttributeValue. This
        function complements the existing stringAttributeValue and boolAttributeValue functions.
        The addition of numberAttributeValue was necessary because the stringAttributeValue
        function does a type check and will only return strings. This limitation made it
        impossible to get values for attributes that returned an NSNumber.

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (numberAttributeValueCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::numberAttributeValue):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::numberAttributeValue):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::numberAttributeValue):

2011-08-17  Adam Roben  <aroben@apple.com>

        Tell Trac logs always to display all specified revisions in a single page

        Trac imposes a default limit of 100 revisions per log page. We need to tell it to allow more
        revisions than that.

        Fixes <http://webkit.org/b/66373> Links to Trac from TestFailures page don't always show all
        relevant revisions

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        (trac.logURL): Add a limit parameter to the log URL that allows all revisions to be seen in
        a single page.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/trac_unittests.js:
        Updated tests for the above.

2011-08-17  Adam Roben  <aroben@apple.com>

        Fix TestFailures's link to file a bug about TestFailures itself

        Fixes <http://webkit.org/b/66387> REGRESSION (r92135): TestFailures page's link to file a
        bug about itself is broken

        Reviewed by Dan Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForAuxiliaryUIElements): Added a path separator to separate
        the host from the path.

2011-08-17  Adam Roben  <aroben@apple.com>

        Teach TestFailures to ignore unbelievably short test runs

        Fixes <http://webkit.org/b/66385> TestFailures page thinks all tests passed in
        http://build.webkit.org/builders/Windows%207%20Release%20(Tests)/builds/14956

        Reviewed by Dan Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): If it looks like all tests passed, but
        run-webkit-tests took less than 10 seconds to run, assume that some weird error occurred
        that caused it not to run any tests at all (as happened for a while due to
        <http://webkit.org/b/64988>). Bumped the cache version to evict old, buggy cached data.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js:
        Test for the above.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Bumped the cache version to evict old, buggy cached data.

2011-08-16  Adam Barth  <abarth@webkit.org>

        Add a CG qualifier similar to the GPU qualifier
        https://bugs.webkit.org/show_bug.cgi?id=66359

        Reviewed by Eric Seidel.

        Once we have a Skia configuration on Chromium Mac, we'll use this CG
        qualifier to note that expectations apply only to the CG configuration.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:

2011-08-16  Eric Seidel  <eric@webkit.org>

        REGRESSION(92717): WinPort needs to parse version information from port_name
        https://bugs.webkit.org/show_bug.cgi?id=66325

        Unreviewed.  Fixing an exception/typo seen on the bots (and testing to make sure it works).

        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:

2011-08-16  Adam Barth  <abarth@webkit.org>

        Change webkit-patch analyze-baselines to print in a more unix-friendly way
        https://bugs.webkit.org/show_bug.cgi?id=66349

        Reviewed by James Robinson.

        As requested by jamesr.

        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-08-16  Eric Seidel  <eric@webkit.org>

        REGRESSION(92717): WinPort needs to parse version information from port_name
        https://bugs.webkit.org/show_bug.cgi?id=66325

        Reviewed by Adam Barth.

        WinPort didn't have any port_name parsing logic.
        Seemed it was best to just share the logic from MacPort.
        Sharing the logic from MacPort seemed easiest with a shared superclass.
        Once I created ApplePort (the superclass) there was a bunch of logic to share.
        I found LeakDetector was just in the way when switching back and forth
        between win.py and mac.py so I moved it into its own file.

        The only logic change here is that WinPort should now be
        able to parse port_name values like MacPort (and other ports)
        can.  The fact that ports do this in their constructors is
        wrong and a source of many bugs.  But at least now WinPort
        matches the status-quo.

        * Scripts/webkitpy/layout_tests/port/apple.py: Added.
        * Scripts/webkitpy/layout_tests/port/leakdetector.py: Added.
        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:

2011-08-16  Adam Barth  <abarth@webkit.org>

        Add webkit-patch analyze-baselines, as requested by jamesr.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-08-16  Adam Barth  <abarth@webkit.org>

        Fold bulk-optimize-baselines into optimize-baselines
        https://bugs.webkit.org/show_bug.cgi?id=66345

        Reviewed by James Robinson.

        bulk-optimize-baselines is now a superset of optimize-baselines, so
        they can be combined.

        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-08-16  Adam Barth  <abarth@webkit.org>

        Move chromium-mac to chromium-cg-mac to prepare for Skia switchover
        https://bugs.webkit.org/show_bug.cgi?id=66334

        Reviewed by Tony Chang.

        This patch moves us closer to switching the Chromium port from
        CoreGraphics to Skia.  This patch teaches our tools that the current
        Chromium Mac configuration is actually chromium-cg-mac, which makes
        room for a future chromium-mac configuration that uses Skia.

        Shortly after this patch lands, I'll do a server-side move of the
        chromium-mac and chromium-mac-leopard directories to chromium-cg-mac
        and chromium-cg-mac-leopard.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        * Scripts/webkitpy/common/config/build.py:
        * Scripts/webkitpy/common/config/build_unittest.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_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-08-16  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic frontend needs a friendly relative time description method.
        https://bugs.webkit.org/show_bug.cgi?id=66324

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js: Added base.relativizeTime method.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js: Added unit tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Wired up Time widget to use it.

2011-08-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Summary view should not add multiple entries for the same test failure.
        https://bugs.webkit.org/show_bug.cgi?id=66318

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js: Added a simplistic updating button.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Added ways to check for
            equality of ui.notifications.FailingTest, and whether ui.notifications.TestFailures already contains a given failure analysis.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Added tests.

2011-08-16  Adam Roben  <aroben@apple.com>

        Teach TestFailures that tests that have failed or passed many times in a row are not flaky

        The basic strategy here is that once a test has failed or passed many times in a row we
        never again consider it as a possibly flaky test. It's a simple strategy but seems to result
        in many fewer false positives than our current behavior.

        Fixes <http://webkit.org/b/66327> TestFailures page considers far too many tests to be
        flaky, including tests that failed for a while but then were fixed

        Reviewed by Dan Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector.js:
        (FlakyLayoutTestDetector): Initialize new _buildCount property, which is used to track the
        number of non-too-many-failure builds we've seen.
        (FlakyLayoutTestDetector.prototype.incorporateTestResults): Don't track tests which haven't
        failed in the _maximumFailOrPassCount most recent builds. For other not-yet-considered-flaky
        tests, keep track of how many times they have passed or failed in a row. If they pass or
        fail more than _maximumFailOrPassCount times, consider them to be non-flaky. (Once a test is
        considered flaky it doesn't matter how many times it passes or fails.)

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector_unittests.js:
        Added tests for the above.

2011-08-16  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic needs a summary view with actions for each problem.
        https://bugs.webkit.org/show_bug.cgi?id=66144

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html: Added notifications tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/summary.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html: Added.

2011-08-16  Dean Jackson  <dino@apple.com>

        Adding Ted "hober" O'Connor as a non-committing contributor.

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

2011-08-16  Adam Roben  <aroben@apple.com>

        Teach TestFailures how to interpret unfinished test runs

        Fixes <http://webkit.org/b/66309> TestFailures thinks all tests passed in
        http://build.webkit.org/builders/Lion%20Intel%20Debug%20(Tests)/builds/136

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Look for "isFinished" in the layout-test step
        rather than "isStarted" so that we don't count builds for which the test run never finished.
        Bumped the cache version to evict old, buggy cached data.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js:
        Added a test for the above, and made a somewhat synthetic test more realistic by including
        more of the actual JSON data from build.webkit.org.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Bumped the cache version to evict old, buggy
        cached data.

2011-08-16  Adam Roben  <aroben@apple.com>

        Make Apple's Windows port fall back to Lion results instead of SnowLeopard

        Apple's Windows port now uses Lion-era versions of CoreFoundation, ICU, etc., so in theory
        should match Lion's behavior.

        Fixes <http://webkit.org/b/66302> Apple's Windows port matches Lion for some test results,
        but doesn't use Lion results

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
        (expectedDirectoryForTest):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest.test_baseline_search_path):
        Replaced mac-snowleopard with mac-lion.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build): Added an entry for the LayoutTests/platform/mac-lion
        directory, which all Apple Mac platforms and Apple Win platforms could potentially use
        results from. Removed Apple Win from being affected by mac-snowleopard changes, since it
        will no longer look there for results.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest.test_should_build): Tests for the above changes.

2011-08-16  Dean Jackson  <dino@apple.com>

        Move me from contributor to reviewer.

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

2011-08-15  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic frontend needs model.commitDataForRevisionRange function.
        https://bugs.webkit.org/show_bug.cgi?id=66252

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js: Added commitDataForRevisionRange method.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model_unittests.js: Added tests.

2011-08-15  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic frontend needs a generic way to track updates.
        https://bugs.webkit.org/show_bug.cgi?id=66245

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js: Added UpdateTracker.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js: Added tests.

2011-08-15  Adam Roben  <aroben@apple.com>

        Teach TestWebKitAPI/gtest how to print JavaScript failures nicely

        Failures now give output of the form: foo should be bar but is baz

        Fixes <http://webkit.org/b/66240> It's hard to tell what the actual result of a failed JS
        test is in TestWebKitAPI's output

        Reviewed by David Levin.

        * TestWebKitAPI/JavaScriptTest.cpp:
        (TestWebKitAPI::JavaScriptCallbackContext::JavaScriptCallbackContext): Removed now-unused
        members.
        (TestWebKitAPI::javaScriptCallback): Changed to just store the result string in the context
        object, rather than doing any testing of it here.
        (TestWebKitAPI::runJSTest): Made this function a gtest predicate-formatter. This allows us
        to use a pretty error message when the test fails.

        * TestWebKitAPI/JavaScriptTest.h: Changed runJSTest to a predicate-formatter, and added nice
        gtest-style macros that wrap it.

        * TestWebKitAPI/Test.h: Removed now-unused TEST_ASSERT_RETURN.

        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp:
        (TestWebKitAPI::TEST): Changed to use the new macros.

        * TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp:
        (TestWebKitAPI::createSessionStateContainingFormData): Ditto. Note that this function no
        longer returns 0 when the JS test fails. That shouldn't have any effect on whether or not
        the test passes, though. Returning early seems to have been an unnecessary optimization.

        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        (TestWebKitAPI::TEST): Changed to use the new macros.

2011-08-15  Eric Seidel  <eric@webkit.org>

        Move the Leaks bot back to ORWT until I can fix LeaksViewer regressions filed by Adam Roben in bug 66227 and 66228.

        Unreviewed.

        * Scripts/run-webkit-tests:
        (usingLeaks):
        (useNewRunWebKitTests):

2011-08-14  Adam Barth  <abarth@webkit.org>

        Switch results detail view over to new-style object-oriented UI widgets
        https://bugs.webkit.org/show_bug.cgi?id=66200

        Reviewed by Dimitri Glazkov.

        This patch replaces my goofy template-based UI for the results
        comparison screen with new object-oriented UI widgets.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js:

2011-08-13  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic's analyzeUnexpectedFailures needs a completion callback.
        https://bugs.webkit.org/show_bug.cgi?id=66166

        Also changed base.RequestTracker to:
        a) fire callback immediately if requestsInFlight is 0;
        b) not barf if callback is not supplied.

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js: Started using completion callback.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js: Added completion callback.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js: Changed RequestTracker.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittest.js: Added unit tests.

2011-08-12  Mark Rowe  <mrowe@apple.com>

        Be more forward-looking in the choice of compiler.

        Rubber-stamped by Jon Honeycutt.

        * DumpRenderTree/mac/Configurations/CompilerVersion.xcconfig:
        * MiniBrowser/Configurations/CompilerVersion.xcconfig:
        * TestWebKitAPI/Configurations/CompilerVersion.xcconfig:
        * WebKitTestRunner/Configurations/CompilerVersion.xcconfig:

2011-08-12  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        DRT: Add support for gesture events.
        https://bugs.webkit.org/show_bug.cgi?id=66105

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::gestureScrollBegin):
        (EventSender::gestureScrollEnd):
        (EventSender::gestureTap):
        (EventSender::gestureEvent):
        * DumpRenderTree/chromium/EventSender.h:

2011-08-12  Andy Estes  <aestes@apple.com>

        allowRoundingHacksCallback uses the wrong argument for 'thisObject'.
        https://bugs.webkit.org/show_bug.cgi?id=66158

        Reviewed by Dan Bernstein.

        * DumpRenderTree/LayoutTestController.cpp:
        (allowRoundingHacksCallback): The third argument is the 'this'
        JSObjectRef, not the second.

2011-08-12  Andy Estes  <aestes@apple.com>

        Cancel in onbeforeunload dialog sometime causes a button to stop working.
        https://bugs.webkit.org/show_bug.cgi?id=26211

        Reviewed by Alexey Proskuryakov.

        Implement a new LayoutTestController method that a test can call to set
        the return value of DumpRenderTree's beforeunload UI delegate.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): Initialize
        m_shouldStayOnPageAfterHandlingBeforeUnload.
        (setShouldStayOnPageAfterHandlingBeforeUnloadCallback): Call
        LayoutTestController::setShouldStayOnPageAfterHandlingBeforeUnload().
        (LayoutTestController::staticFunctions): Register
        'setShouldStayOnPageAfterHandlingBeforeUnload' as a static function.
        * DumpRenderTree/LayoutTestController.h: 
        (LayoutTestController::shouldStayOnPageAfterHandlingBeforeUnload):
        (LayoutTestController::setShouldStayOnPageAfterHandlingBeforeUnload):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): Initialize
        m_shouldStayOnPageAfterHandlingBeforeUnload and bind
        'setShouldStayOnPageAfterHandlingBeforeUnload' to its c++ setter.
        (LayoutTestController::reset): Reset
        m_shouldStayOnPageAfterHandlingBeforeUnload to false.
        (LayoutTestController::setShouldStayOnPageAfterHandlingBeforeUnload):
        Set m_shouldStayOnPageAfterHandlingBeforeUnload to the value passed in
        from JavaScript.
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::shouldStayOnPageAfterHandlingBeforeUnload):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::runModalBeforeUnloadDialog): Add the correct logging and
        return the inverse of
        LayoutTestController::shouldStayOnPageAfterHandlingBeforeUnload().
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:]): Ditto.
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::runBeforeUnloadConfirmPanelWithMessage): Ditto.
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Define setShouldStayOnPageAfterHandlingBeforeUnload().
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::postNewBeforeUnloadReturnValue): Post a message
        to the Test Controller telling it what value it should return in its
        onbeforeunload UI delegate.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setShouldStayOnPageAfterHandlingBeforeUnload):
        Call InjectedBundle::postNewBeforeUnloadReturnValue().
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController): Initialize
        m_beforeUnloadReturnValue to true.
        (WTR::runBeforeUnloadConfirmPanel): Add the correct logging and return
        the value of TestController::beforeUnloadReturnValue().
        (WTR::TestController::resetStateToConsistentValues): Reset
        m_beforeUnloadReturnValue to true.
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::beforeUnloadReturnValue):
        (WTR::TestController::setBeforeUnloadReturnValue):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): Handle the
        message posted from the injected bundle by retrieving the message body
        as a WKBoolean and calling TestController::setBeforeUnloadReturnValue().

2011-08-12  Sam Weinig  <sam@webkit.org>

        Move compiler specific macros to their own header
        https://bugs.webkit.org/show_bug.cgi?id=66119

        Reviewed by Anders Carlsson.

        * DumpRenderTree/ForwardingHeaders/wtf/Compiler.h: Added.

2011-08-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Add a way to extend DOM objects in garden-o-matic.
        https://bugs.webkit.org/show_bug.cgi?id=66096

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js: Added base.extends.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js: Added tests.

2011-08-11  MORITA Hajime  <morrita@google.com>

        [Chromium][DRT] editing/spelling/spelling-backspace-between-lines.html fails
        https://bugs.webkit.org/show_bug.cgi?id=45438

        Reviewed by Kent Tamura.

        MockSpellCheck was assuming the input of spellCheckWord() is a word.
        But it can be a series of word. This change made spellCheckWord()
        understand simple word boundary which appears in tests.
        
        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        (MockSpellCheck::spellCheckWord):

2011-08-11  Mark Rowe  <mrowe@apple.com>

        Rework some Makefile logic to remove a double-negative.

        Reviewed by Jon Honeycutt.

        * DumpRenderTree/mac/PerlSupport/Makefile:

2011-08-11  Anders Carlsson  <andersca@apple.com>

        Add a FIXME.

        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController):

2011-08-11  Anders Carlsson  <andersca@apple.com>

        Initialize threading before running any tests
        https://bugs.webkit.org/show_bug.cgi?id=66112

        Reviewed by Adam Barth.

        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController):

2011-08-11  Adam Barth  <abarth@webkit.org>

        Add unexpected-passes.html to TestFailures for marking tests as passing
        https://bugs.webkit.org/show_bug.cgi?id=66102

        Reviewed by Dimitri Glazkov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
            - Move some code into the library so it can be shared.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js:
            - Add round-trip unit tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.html: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.js: Added.
            - I'm not entirely sure this feature should remain a separate HTML
              file, but it seemed better than cluttering up the main HTML file
              with too much extra stuff.
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
            - The gardening server couldn't handle adding PASS expectations.  Now it can.

2011-08-11  Eric Seidel  <eric@webkit.org>

        NRWT has wrong fallback order for Mac now that Lion exists
        https://bugs.webkit.org/show_bug.cgi?id=66093

        Reviewed by Adam Barth.

        ORWT used a different system for fallback orders than NRWT did.
        I moved win.py to match ORWT fallback orders in bug 64486.
        This bug moves mac.py to match ORWT fallback order
        and adds 'lion' as a supported OS version.

        Because ChromiumMac shares OS version detection code with AppleMac
        this also added support for 'lion' to chromium mac.  Hopefully that's a good thing.

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2011-08-11  Adam Barth  <abarth@webkit.org>

        Update test results now that we use absolute URLs.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout_unittests.js:

2011-08-11  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to determine when tests unexpectedly pass
        https://bugs.webkit.org/show_bug.cgi?id=66092

        Reviewed by Dimitri Glazkov.

        This patch just contains the library methods for extracting this
        information.  I'll add some UI in a subsequent patch.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results_unittests.js:

2011-08-11  Dimitri Glazkov  <dglazkov@chromium.org>

        New expectation entries should be placed next to existing ones.
        https://bugs.webkit.org/show_bug.cgi?id=66066

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Added the notion of insertion point,
            which is computed as the last found reference to the same test.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Added and adjusted unit tests.

2011-08-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r92847.
        http://trac.webkit.org/changeset/92847
        https://bugs.webkit.org/show_bug.cgi?id=65986

        Broke check-webkit-style

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:

2011-08-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r92847.
        http://trac.webkit.org/changeset/92847
        https://bugs.webkit.org/show_bug.cgi?id=65986

        Broke check-webkit-style

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:

2011-08-11  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] autotests shouldn't require config.h in the style check
        https://bugs.webkit.org/show_bug.cgi?id=65986

        Remove the include rules from the style-check for Qt tests.
        Since for the most part it's just a matter of using the
        API provided by QtWebKit, enforcing the WebCore set of rules
        only seems to make sense in the case of MIMESniffing.

        Reviewed by Benjamin Poulain.

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:

2011-08-11  Zsolt Fehér  <h490267@stud.u-szeged.hu>

        [WK2] Implement waitForPolicyDelegate
        https://bugs.webkit.org/show_bug.cgi?id=42330

        Reviewed by Csaba Osztrogonác.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::navigationTypeToString):
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController):
        (WTR::LayoutTestController::setCustomPolicyDelegate):
        (WTR::LayoutTestController::waitForPolicyDelegate):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::isPolicyDelegateEnabled):
        (WTR::LayoutTestController::isPolicyDelegatePermissive):

2011-08-11  Adam Barth  <abarth@webkit.org>

        rebaseline-expectations should use the release bots, not the debug
        bots.  The debug bots don't all run all the tests.  Also, delay
        updating test_expectations a long as possible to avoid clearing out
        lines that we'll need for other ports.

        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:

2011-08-10  Ryosuke Niwa  <rniwa@webkit.org>

        r92792 inadvertently removed PlatformSpecificScheduler for all Snow Leopard bots.
        Revert it partially so that the remaining Snow Leopard bots can fulfill their duty.

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

2011-08-10  Eric Seidel  <eric@webkit.org>

        new-run-webkit-test's WinPort has no fallback logic
        https://bugs.webkit.org/show_bug.cgi?id=64486

        Unreviewed.

        Turns out that we've long had a subtle bug whereby if you didn't
        already have DumpRenderTree built, we might end up running unsupported tests
        because the DumpRenderTree --print-supported-features check would silently fail.

        When I moved the call from using popen to using Executive.run_command, this silent
        failure became noisy.  (Breaking some bots.)

        This re-orders our steps so that we always build DRT before collecting expectations,
        as well as adds a warning message when DumpRenderTree can't be found.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-08-10  Eric Seidel  <eric@webkit.org>

        new-run-webkit-test's WinPort has no fallback logic
        https://bugs.webkit.org/show_bug.cgi?id=64486

        Unreviewed.  Fix test-webkitpy under Python 2.5.

        * Scripts/webkitpy/layout_tests/port/win.py:

2011-08-10  Benjamin Poulain  <benjamin@webkit.org>

        [Qt][WK2] MiniBrowser is firing twice the QDesktopWebView::mousePressEvent method
        https://bugs.webkit.org/show_bug.cgi?id=65875

        Reviewed by Kenneth Rohde Christiansen.

        For some reason, QWidget send fake mouse event on some platform, under certains conditions.

        This causes mouse events to be sent twice in some cases. We work around the problem
        by defining the first touch point to be a primary touch point (case which hit some
        weird condition in QWidget, skipping the generation of fake mouse events).

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):

2011-08-10  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=66004

        Remove the regions and exclusions bots and also the flags in build-webkit, since I'm just turning
        the code on by default.

        Reviewed by Adam Roben.

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

2011-08-10  Oliver Hunt  <oliver@apple.com>

        JSEvaluteScript does not return the correct object when given JSONP data
        https://bugs.webkit.org/show_bug.cgi?id=66003

        Reviewed by Gavin Barraclough.

        Add a test case.

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

2011-08-10  Eric Seidel  <eric@webkit.org>

        WIN: NRWT runs compositing tests on configurations that don't support compositing
        https://bugs.webkit.org/show_bug.cgi?id=64472

        Reviewed by Adam Barth.

        I think the code was just wrong.  It was never splitting the string
        into list pieces before.
        I've now tested the supported_features code and theoretically it
        should now work with Windows DRT.

        I also made the list-lookup functions always return lists, to make
        it possible to clean up the list-transform code in the future
        (I opted not to do that cleanup in this patch, but at least now
        both types of feature lookup functions match return types.)

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-08-10  Eric Seidel  <eric@webkit.org>

        Clean up ChromiumDriver a little
        https://bugs.webkit.org/show_bug.cgi?id=65995

        Unreviewed.

        Fix NRWT for chromium.  Silly python.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-08-10  Eric Seidel  <eric@webkit.org>

        Clean up ChromiumDriver a little
        https://bugs.webkit.org/show_bug.cgi?id=65995

        Reviewed by Adam Barth.

        - We no longer support threading, so remove threading specific code.
        - Add FIXMEs about using ServerProcess instead.
        - Condense option-mapping if-cascade into a for loop.
        - Unindent long if blocks by using early return.
        - Unwrap lines which are needlessly wrapped.

        There should be no functional changes here, just code cleanup/dead-code removal.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-08-10  Dimitri Glazkov  <dglazkov@chromium.org>

        Unmuddle construction options for TestConfiguration.
        https://bugs.webkit.org/show_bug.cgi?id=65988

        The TestConfiguration instance is now constructed only using actual values.
        Port-based construction is split into a "from_port" class method.

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Added TestConfiguration.from_port
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Adjusted code to accommodate the change.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Ditto.
        * Scripts/webkitpy/layout_tests/port/base.py: Ditto.
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py: Ditto.

2011-08-10  Eric Seidel  <eric@webkit.org>

        Leaks bot shows python logging prefixes as part of summary display
        https://bugs.webkit.org/show_bug.cgi?id=65931

        Reviewed by Adam Barth.

        The big part of this change is adding a unittesting system for
        master.cfg, so mere-mortals can make changes to build.webkit.org
        with greatly-reduced risk of breaking the world.

        Turns out that in typing up my trival logging fix I made 2 typos,
        so hopefully the hour spent getting master.cfg to load was worth it. :)

        I also tried to make mastercfg_unittest run as part of test-webkitpy
        but right now test-webkitpy requires that unittest files be located in
        a module-name-compatible directory.  'build.webkit.org-config' is not
        a valid module name.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
         - Fixed _parseNewRunWebKitTestsOutput to strip NRWT's python formatter prefix
           by using a new _strip_python_logging_prefix function.
         - Also fixed this function to file to work with a more modern
           simplejson version (which returns unicode objects instead of str objects)
           and filed a related bug with buildbot.net due to their handling of unicode builder names.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Added.
         - BuildBotConfigLoader is a huge pile of code just to get master.cfg to load.
         - The actual tiny unittest of the new _parseNewRunWebKitTestsOutput logic.
        * Scripts/webkitpy/thirdparty/__init__.py:
         - Add autoinstallation of buildbot (and jinja2) for use by mastercfg_unittest.py

2011-08-09  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic should extrapolate failures given a set of known results
        https://bugs.webkit.org/show_bug.cgi?id=65882

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Spuriously covered my old sins.
        * Scripts/webkitpy/layout_tests/port/builders.py: Augmented builders dictionary to contain build coverage specifiers,
            adjusted all call sites.
        * Scripts/webkitpy/tool/servers/gardeningserver.py: Added BuildCoverageExtrapolator, a thing that
            makes wider net for specific failures.
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py: Added unit tests.

2011-08-10  Adam Barth  <abarth@webkit.org>

        The URL we were computing for retrieving baselines was missing a slash
        character because our mocks had an extra slash character.  I've
        corrected both the code and the mock.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2011-08-09  Adam Barth  <abarth@webkit.org>

        Move the quote mark to the right place.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js:

2011-08-09  Adam Barth  <abarth@webkit.org>

        garden-o-matic should use huerstics to narrow regression range
        https://bugs.webkit.org/show_bug.cgi?id=65948

        Reviewed by Dimitri Glazkov.

        When analyzing a regression range, if one of the commit messages
        mentions the test in question, we now hueristically assume that
        revision caused the failure.  (I'm shamelessly stealing this idea from
        TestFailures.)

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:

2011-07-13  Eric Seidel  <eric@webkit.org>

        new-run-webkit-test's WinPort has no fallback logic
        https://bugs.webkit.org/show_bug.cgi?id=64486

        Reviewed by Adam Roben.

        I've tried to write a patch for bug 64439 twice now, and both times
        I've ended up re-writing half the port system.  So I'm breaking
        things up into smaller pieces, this being the first.

        WinPort still does not have any port_name parsing, so when instantiated
        with the name "win-xp" (i.e. by the rebaseline server) it will just behave as the 'win' port.
        I'll fix this in a second pass when I standardize port_name parsing for all webkit ports.

        Otherwise this should "just work" for windows.  I've not been able to test the
        version detection on my mac, but the unit tests show the code behaving as designed.

        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/port/win_unittest.py: Added.

2011-08-09  Adam Barth  <abarth@webkit.org>

        Teach build.webkit.org's garden-o-matic how to talk to the local server
        https://bugs.webkit.org/show_bug.cgi?id=65940

        Reviewed by Dimitri Glazkov.

        After this patch, the version of garden-o-matic on build.webkit.org is
        fully functional.  It can interact with the local server via CORS.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * Scripts/webkitpy/tool/commands/gardenomatic.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-08-09  Adam Barth  <abarth@webkit.org>

        Enable CORS for garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=65936

        Reviewed by Dimitri Glazkov.

        This patch will allow the hosted instance of garden-o-matic to
        communicate with the local server.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:

2011-08-09  Adam Barth  <abarth@webkit.org>

        Upgrade jquery in TestFailures
        https://bugs.webkit.org/show_bug.cgi?id=65935

        Reviewed by Dimitri Glazkov.

        Upgrade to a newer version of jQuery with better support for CORS and CSP.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:

2011-08-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r92683.
        http://trac.webkit.org/changeset/92683
        https://bugs.webkit.org/show_bug.cgi?id=65921

         "Breaks Qt --minimal build. Revert pending update of the Qt
        minimal configuration" (Requested by simathur on #webkit).

        * QtTestBrowser/cookiejar.cpp:
        (TestBrowserCookieJar::TestBrowserCookieJar):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        (LauncherWindow::setDiskCache):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):
        * QtTestBrowser/webpage.cpp:
        (WebPage::openUrlInDefaultBrowser):

2011-08-09  Siddharth Mathur  <siddharth.mathur@nokia.com>

        [Qt] Simplify code by removing QT_NO_DESKTOPSERVICES and QT_NO_NETWORKDISKCACHE
        https://bugs.webkit.org/show_bug.cgi?id=65880

        Reviewed by Andreas Kling.

        QDesktopServices and QNetworkDiskCache have been around for a while now. Kill flags which 
        check for their feature flags. Assume that any reasonable Qt build provides them. 
        * QtTestBrowser/cookiejar.cpp:
        (TestBrowserCookieJar::TestBrowserCookieJar):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        (LauncherWindow::setDiskCache):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):
        * QtTestBrowser/webpage.cpp:
        (WebPage::openUrlInDefaultBrowser):

2011-08-09  Adam Barth  <abarth@webkit.org>

        BaselineOptimizer created the wrong baseline for fast/js/regexp-overflow.html
        https://bugs.webkit.org/show_bug.cgi?id=65891

        Reviewed by Eric Seidel.

        The problem was that platform/chromium contained a bogus expectation
        file that needed to be removed, but by the time we got around to
        removing it, we'd already moved the correct baseline into its place.
        After this patch, we copy the gold results into memory before
        reshuffling things on disk (and we delete bad things before adding good
        things).

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:

2011-08-08  Adam Barth  <abarth@webkit.org>

        Chromium Windows bots can't figure out what SVN revision they're running
        https://bugs.webkit.org/show_bug.cgi?id=65893

        Reviewed by Eric Seidel.

        The comment in _engage_awesome_windows_hacks explains why we're making
        this change.  It's ugly and rediculous, but this approach seems better
        than using shell=True when calling popen.

        * Scripts/webkitpy/common/checkout/scm/svn.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

2011-08-08  Adam Barth  <abarth@webkit.org>

        Remove deduplicate-tests
        https://bugs.webkit.org/show_bug.cgi?id=65886

        Reviewed by Tony Chang.

        This script is redundant with "webkit-patch bulk-optimize-baselines",
        which can find many more duplicates than deduplicate-tests because
        bulk-optimize-baselines can move results around whereas
        deduplicate-tests can only remove results.

        * Scripts/deduplicate-tests: Removed.
        * Scripts/webkitpy/to_be_moved/deduplicate_tests.py: Removed.
        * Scripts/webkitpy/to_be_moved/deduplicate_tests_unittest.py: Removed.

2011-08-08  Adam Barth  <abarth@webkit.org>

        scm.delete should delete empty parent directories as well
        https://bugs.webkit.org/show_bug.cgi?id=65878

        Reviewed by Eric Seidel.

        This behavior makes SVN match GIT (which has no concept of empty
        directories).  This bug comes up a lot when optimizing baselines, which
        often create empty directories when we're able to optimize everything
        out of a given folder.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:

2011-08-08  Lucas Forschler  <lforschler@apple.com>

        Add triggers for Lion WK2 test bots.

        Reviewed by Stephanie Lewis.

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

2011-08-08  Adam Barth  <abarth@webkit.org>

        bulk-optimize-baselines should take directories on the command line
        https://bugs.webkit.org/show_bug.cgi?id=65879

        Reviewed by Dimitri Glazkov.

        Passing lists of tests via stdin is a pain.  It's easier if the command
        takes a list of tests on the command line, like run-webkit-tests.

        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-08-08  Adam Barth  <abarth@webkit.org>

        Deprecate rebaseline-chromium-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=65873

        Reviewed by Dimitri Glazkov.

        This script never worked correctly and now is redundant with more
        modern infrastructure for rebaselining tests.  This patch deprecates
        the script in order to flush out any issues with the new tools.  Once
        folks are happy with the new tools, we'll delete this script.

        * Scripts/rebaseline-chromium-webkit-tests:

2011-08-08  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic should only touch expectations that need updating.
        https://bugs.webkit.org/show_bug.cgi?id=65876

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Added reconstitute_only_these to TestExpectationSerializer.list_to_string,
            so that a caller could influence which lines to serialize from values.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Added tests.
        * Scripts/webkitpy/tool/servers/gardeningserver.py: Started using reconstitute_only_these.
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py: Added tests.

2011-08-08  Dimitri Glazkov  <dglazkov@chromium.org>

        TestExpectationsEditor should return a list of updated expectations.
        https://bugs.webkit.org/show_bug.cgi?id=65872

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Added a list to store lines that are being updated.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Changed tests to account for updated lines.

2011-08-08  Jochen Eisinger  <jochen@chromium.org>

        Fix SCM webkitpy unit test failures
        https://bugs.webkit.org/show_bug.cgi?id=65823

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:

2011-08-08  Eric Seidel  <eric@webkit.org>

        Move the --leaks bot back over to NRWT now that I'm back
        from vacation and able to debug it.

        Unreviewed.

        * Scripts/run-webkit-tests:
        (usingWebKit2):
        (useNewRunWebKitTests):

2011-08-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Wire up updating expectations in garden-o-matic.
        https://bugs.webkit.org/show_bug.cgi?id=65794

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/factory.py: Moved _port_for_builder from rebaseline.py to here, rename to get_from_builder_name.
        * Scripts/webkitpy/tool/commands/rebaseline.py: Adapted callsites to new location.
        * Scripts/webkitpy/tool/servers/gardeningserver.py: Added GardeningExpectationsUpdater, which knows how to update expectations.
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py: Added loads of tests.

2011-08-08  Jochen Eisinger  <jochen@chromium.org>

        webkit-patch doesn't get along with renamed files
        https://bugs.webkit.org/show_bug.cgi?id=48075

        Possibly a bit heavy handed - I removed all instances of -C and
        changed every instance of -M with '--no-renames' in git.py. This
        forces git to not try to tell us about renames at all, which is
        ultimately the behaviour we want. The old file is shown deleted,
        then the new file is shown added, followed by any changes that
        occurred. Also gets rid of the problem where deleting one file
        and adding another file which has similar content would
        unexpectedly show up as a rename, and fall out of a diff.

        Based on a patch by Wyatt Carss.

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/scm/git.py:

2011-08-07  Sam White  <samuel.white@rochester.edu>

        Add the ability to search the AccessibilityObject cache
        https://bugs.webkit.org/show_bug.cgi?id=64994
        
        Added testing support for AccessibilityObject cache searching. Currently,
        only the mac platform is full supported and has had API exposed. Other
        platforms have only have this new functionality stubbed. Full implementation
        is a job suited only for an accessibility expert of each respective platform.

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (uiElementForSearchPredicateCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::uiElementForSearchPredicate):

2011-08-06  Adam Barth  <abarth@webkit.org>

        Remove dead code in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=65818

        Reviewed by Dimitri Glazkov.

        This code was added to support the rebaseline2 command six months ago,
        but the rebaseline2 command was never finished and no one else has used
        this code since it was landed.  This patch removes the dead code.  If
        we revive rebaseline2, then we can revert this patch and recover the
        code.  Until then, this code is just dead weight.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/testoutput.py: Removed.
        * Scripts/webkitpy/common/net/testoutput_unittest.py: Removed.
        * Scripts/webkitpy/common/net/testoutputset.py: Removed.
        * Scripts/webkitpy/common/net/testoutputset_unittest.py: Removed.
        * Scripts/webkitpy/common/system/directoryfileset.py: Removed.
        * Scripts/webkitpy/common/system/directoryfileset_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-08-06  Adam Barth  <abarth@webkit.org>

        webkit-patch optimize-baselines can't handle promotions to base results directory
        https://bugs.webkit.org/show_bug.cgi?id=65819

        Reviewed by Dimitri Glazkov.

        This bug came up when testing the optimizer on some editing baselines.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:

2011-08-06  Adam Barth  <abarth@webkit.org>

        Add a small command to optimize baselines in bulk.

        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-08-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix unit test breakage by plumbing convert_404_to_None in MockWeb.

        * Scripts/webkitpy/tool/mocktool.py: Added missing parameter to MockWeb.get_binary

2011-08-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Garden-o-matic updateexpectations needs a unit test.
        https://bugs.webkit.org/show_bug.cgi?id=65780

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py: Added unit test.

2011-08-05  Anders Carlsson  <andersca@apple.com>

        Future proof an Objective-C test
        https://bugs.webkit.org/show_bug.cgi?id=65788

        Reviewed by Dan Bernstein.

        Add isObjectInstanceOf to ObjCController.

        * DumpRenderTree/mac/ObjCController.m:
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController isObject:instanceOf:]):

2011-08-05  Adam Barth  <abarth@webkit.org>

        trac.js needs unittests
        https://bugs.webkit.org/show_bug.cgi?id=65673

        Reviewed by Dimitri Glazkov.

        This tests also have somewhat large fixtures.  I've trimmed the example
        XML down a bunch while still hitting interesting cases in the parsing.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/trac_unittests.js: Added.

2011-08-05  Adam Barth  <abarth@webkit.org>

        Rebuild rebaseline-chromium-webkit-tests on top of modern infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=65759

        Reviewed by Dimitri Glazkov.

        rebaseline-chromium-webkit-tests doesn't really fit into webkitpy's
        architecture, is poorly tested, and has a bunch of quirks.  This patch
        rebuilds the core functionality of rebaseline-chromium-webkit-tests on
        top of more modern infrastructure.  In the process, we get more code
        re-use and better testing.

        Once we're satisfied with this new implementation, we can delete the
        old implementation.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        * Scripts/webkitpy/common/net/web.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:

2011-08-05  Anders Carlsson  <andersca@apple.com>

        Remove PluginHalter
        https://bugs.webkit.org/show_bug.cgi?id=65729

        Reviewed by Darin Adler.

        Remove call to set the allowed plug-in run time.

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

2011-08-05  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>

        Unreviewed build fix for Qt-Minimal buildbot

        Use ~/.QtTestBrowser for the cookiejar when QDesktopServices
        is disabled.

        Rubber-stamped by Holger Freyther.

        * QtTestBrowser/cookiejar.cpp:
        (TestBrowserCookieJar::TestBrowserCookieJar):

2011-08-05  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        [Qt] QtTestBrowser: Add support for saving cookies on disk
        https://bugs.webkit.org/show_bug.cgi?id=65328

        Simple cookiejar that saves cookies on disk.

        Added menu options to clear cookies (Edit->Clear cookies) and
        disable disk cookies (Settings->[ ]Save Cookies on Disk).

        Option -no-disk-cookies is also available.

        Reviewed by Andreas Kling.

        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/cookiejar.cpp: Added.
        * QtTestBrowser/cookiejar.h: Added.
        * QtTestBrowser/launcherwindow.cpp:
        * QtTestBrowser/launcherwindow.h:
        * QtTestBrowser/main.cpp:

2011-08-04  Adam Barth  <abarth@webkit.org>

        model.js needs some unit testing
        https://bugs.webkit.org/show_bug.cgi?id=65730

        Reviewed by Dimitri Glazkov.

        These tests do not cover all the functions exported by the model
        module.  We'll need to add the remaining ones in the future.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model_unittests.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:

2011-08-04  Adam Barth  <abarth@webkit.org>

        Another speculative fix for the "svn revision on Windows" problem.

        * Scripts/webkitpy/common/checkout/scm/git.py:

2011-08-04  Mark Rowe  <mrowe@apple.com>

        Future-proof Xcode configuration settings.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/CompilerVersion.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/CompilerVersion.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/CompilerVersion.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/CompilerVersion.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

2011-08-04  Adam Barth  <abarth@webkit.org>

        Fancier debug logging.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

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

        [chromium] Fix assertion failure in ThreadIdentifierData::identifier in TestShell.
        https://bugs.webkit.org/show_bug.cgi?id=65685

        Reviewed by Dmitry Titov.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::WebViewHost): Intialize WTF threading before
        anything in WTF is used. Usually this is done by WebViewImpl::WebViewImpl
        but in some cases code may use WTF without creating WebViewImpl and
        WTF code functionality may call WTF::currentThread, which requires
        this initialization now.

2011-08-04  Adam Barth  <abarth@webkit.org>

        An educated guess at causing the Windows bots on build.webkit.org to
        find the SVN revision number.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/port/base.py:

2011-08-04  Adam Barth  <abarth@webkit.org>

        More logging to help debug the "no SVN rev on Chromium Windows bots"
        bug.  My current theory is that we're trying to detect the SCM system
        in the wrong directory.

        * Scripts/webkitpy/layout_tests/port/base.py:

2011-08-04  Dimitri Glazkov  <dglazkov@chromium.org>

        Speed up webkit-patch optimize-expectations significantly by not collecting test files.
        https://bugs.webkit.org/show_bug.cgi?id=65697

        I neglected to realize that collecting test names is not necessary for this operation.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/expectations.py: Changed to pass an empty list of test files.

2011-08-04  Adam Barth  <abarth@webkit.org>

        checkout_unittest.js should have better coverage of checkout.js
        https://bugs.webkit.org/show_bug.cgi?id=65671

        Reviewed by Dimitri Glazkov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js:
            - Remove unused functions.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout_unittests.js:
            - Test remaining public functions in the checkout module.

2011-08-04  Dmitry Lomov  <dslomov@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=65706
        Run run-unit-tests on release mode test bots.
        Reenabling after 61812 is fixed.

        Reviewed by Adam Roben.

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

2011-08-04  Adam Barth  <abarth@webkit.org>

        builders.js needs unit tests
        https://bugs.webkit.org/show_bug.cgi?id=65670

        Reviewed by Dimitri Glazkov.

        This test requires somewhat large test fixtures, but using real
        examples seemed better than trimming them down too much.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders_unittests.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
            - Note: trac_unittests.js doesn't exist (yet!).

2011-08-04  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Make navigation actions properly usable in QML.
        https://bugs.webkit.org/show_bug.cgi?id=65624

        Fix compilation after the introduction of QWebNavigationController.

        Reviewed by Benjamin Poulain.

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::navigationAction):

2011-08-04  Adam Barth  <abarth@webkit.org>

        Another subtle bug due to lack of testing in main.js.  :(

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:

2011-08-04  Adam Barth  <abarth@webkit.org>

        Fix types.  Sadly, main.js has no test coverage.  (I need to think
        about how to test this part of the code.)

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:

2011-08-04  Adam Barth  <abarth@webkit.org>

        bugzilla.js is missing unit tests
        https://bugs.webkit.org/show_bug.cgi?id=65656

        Reviewed by Adam Roben.

        Testing makes perfect.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/bugzilla_unittests.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net_unittests.js:
        (NetworkSimulator.prototype.runTest.get if):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:

2011-08-04  Adam Barth  <abarth@webkit.org>

        Add missing license blocks to garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=65654

        Reviewed by Dimitri Glazkov.

        This patch is entirely boilerplate.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js:

2011-08-04  Adam Barth  <abarth@webkit.org>

        garden-o-matic needs a way to mock out the network
        https://bugs.webkit.org/show_bug.cgi?id=65653

        Reviewed by Dimitri Glazkov.

        This patch introduces the net module, which is a useful mock point for
        abstracting away the network.  Future patches will use this
        infrastructure to test some currently untested code.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Bugzilla.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net_unittests.js: Added.
        (NetworkSimulator):
        (NetworkSimulator.prototype.scheduleCallback):
        (NetworkSimulator.prototype.runTest):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-08-03  Adam Barth  <abarth@webkit.org>

        Use failureInfo more pervasively in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=65650

        Reviewed by Dimitri Glazkov.

        These three variable appears in concert together many places.  This
        patch unifies the remaining uses into being failureInfo objects, which
        saves some marshalling.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js:

2011-08-03  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to update expecations from the details pane
        https://bugs.webkit.org/show_bug.cgi?id=65648

        Reviewed by Dimitri Glazkov.

        The new button queues up the updates, which get executed all at once.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:

2011-08-03  Adam Barth  <abarth@webkit.org>

        Add UI to garden-o-matic for updating expectations
        https://bugs.webkit.org/show_bug.cgi?id=65644

        Reviewed by Dimitri Glazkov.

        The patch plumbs the UI back to the gardening server, but the gardening
        server endpoint is just a stub at this point.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:

2011-08-03  Adam Barth  <abarth@webkit.org>

        garden-o-matic details view should queue rebaselines for later execution
        https://bugs.webkit.org/show_bug.cgi?id=65636

        Reviewed by Dimitri Glazkov.

        This patch doesn't contain any confirmation UI, but we'll probably want
        that at some point.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:

2011-08-03  Kentaro Hara  <haraken@google.com>

        Implement EventSender.scalePageBy()
        https://bugs.webkit.org/show_bug.cgi?id=58013

        Reviewed by Darin Fisher.

        Implemented EventSender.scalePageBy(f, x, y), which scales a page by a factor of f
        and then sets a scroll position to (x, y). Enabled the tests that had been waiting
        for the implementation of EventSender.scalePageBy(f, x, y).

        Tests: compositing/scaling/tiled-layer-recursion.html
               fast/repaint/scale-page-shrink.html
               fast/dom/Element/scale-page-client-rects.html
               fast/dom/Range/scale-page-client-rects.html
               fast/events/scroll-in-scaled-page-with-overflow-hidden.html
               fast/dom/Element/scale-page-bounding-client-rect.html
               fast/dom/Range/scale-page-bounding-client-rect.html

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender): Added bindings for scalePageBy().
        (EventSender::scalePageBy): A wrapper method for scalePage() in WebView.
        * DumpRenderTree/chromium/EventSender.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController): Resets the scale factor to 1.

2011-08-03  David Levin  <levin@chromium.org>

        Rename WEBKIT_API to WEBKIT_EXPORT in check-webkit-style.
        https://bugs.webkit.org/show_bug.cgi?id=65652

        Reviewed by Adam Barth.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-08-03  Filip Pizlo  <fpizlo@apple.com>

        Adding Filip Pizlo to committer list.

        Unreviewed.

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

2011-08-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Add "optimize-expectations" command to webkit-patch.
        https://bugs.webkit.org/show_bug.cgi?id=65633

        For now, only operates on Chromium test_expectations.txt and does not report errors/warnings.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/__init__.py: Added command.
        * Scripts/webkitpy/tool/commands/expectations.py: Added.

2011-08-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Allow multiple bug identifiers in test expectations.
        https://bugs.webkit.org/show_bug.cgi?id=65642

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Tweaked to allow multiple bug ids.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Added tests.

2011-08-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Teach BuilderToPort to distinguish between Release and Debug builders.
        https://bugs.webkit.org/show_bug.cgi?id=65628

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/rebaseline.py: Added a smart options object and passed it to port factory.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py: Added tests.

2011-08-03  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Fix running qmltests for WK2 in the bot
        https://bugs.webkit.org/show_bug.cgi?id=65621

        Reviewed by Csaba Osztrogonác.

        The path for QML_IMPORT_PATH was assuming we were running the WK1 tests,
        but now there's the case for WK2 UIProcess tests as well.

        * Scripts/run-qtwebkit-tests: add both possible paths to the QML_IMPORT_PATH.

2011-08-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Add a way to edit test expectations.
        https://bugs.webkit.org/show_bug.cgi?id=64922

        Implements a TestExpectationsEditor, which provides a standard way to
        update and remove test expectations.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Changed TestExpectationSerializer to skip lines that match no test configurations,
            added TestExpectationLine.is_flaky, added BugManager, a simple interface to be fleshed out later, and a TestExpectationsEditor, the big
            enchilada.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Loads of tests to capture desired behavior.

2011-08-03  Andreas Kling  <kling@webkit.org>

        [Qt] MiniBrowser: Unbreak load progress indication.
        https://bugs.webkit.org/show_bug.cgi?id=65614

        Reviewed by Kenneth Rohde Christiansen.

        loadProgress() was renamed to loadProgressChanged().

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::onLoadProgressChanged):
        * MiniBrowser/qt/BrowserWindow.h:

2011-08-03  Martin Robinson  <mrobinson@igalia.com>

        Build fix for WebKit2GTK+.

        * WebKitTestRunner/GNUmakefile.am: Include libInternals as one of
        of the library dependencies of the injected bundle.

2011-08-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Install web and plugin processes in libexecdir instead of bindir
        https://bugs.webkit.org/show_bug.cgi?id=65600

        Reviewed by Martin Robinson.

        Set WEBKIT_EXEC_PATH environment variable to use web and plugin
        process from current directory instead of the intalled ones.

        * MiniBrowser/gtk/GNUmakefile.am:
        * MiniBrowser/gtk/main.c:
        (main):
        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/gtk/main.cpp:
        (main):

2011-08-02  Anders Carlsson  <andersca@apple.com>

        Add mac-lion platform to old-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=65577

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitdirs.pm:
        (isLion):

2011-08-02  Alexandru Chiculita  <achicu@adobe.com>

        Buildbot: The Properties object has no "hasProperty" method in buildbot 8.3
        https://bugs.webkit.org/show_bug.cgi?id=65554

        Using "has_key" instead of "hasProperty" in order to support buildbot 8.3.

        Reviewed by Adam Roben.

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

2011-08-02  Jochen Eisinger  <jochen@chromium.org>

        Implement WebPermissionClient::allowPlugins for layout tests
        https://bugs.webkit.org/show_bug.cgi?id=33991

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setPluginsAllowed):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebPermissions.cpp:
        (WebPermissions::allowPlugins):
        (WebPermissions::setPluginsAllowed):
        (WebPermissions::reset):
        * DumpRenderTree/chromium/WebPermissions.h:

2011-08-02  Adam Barth  <abarth@webkit.org>

        TestFailures unit tests leak a global variable
        https://bugs.webkit.org/show_bug.cgi?id=65500

        Reviewed by Adam Roben.

        qunit detects the leak if you check the "noglobals" box on run-unittests.html.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js:

2011-08-02  Alexandru Chiculita  <achicu@adobe.com>

        CSS Regions build bot should archive and upload output files
        https://bugs.webkit.org/show_bug.cgi?id=65200

        Until now the buildbots would only upload the result archive if the 'trigger' parameters was specified. The
        upload was needed, because the testbots needed to download and use the archive. For CSS Regions we don't have
        a testbot yet, but we want to save the archive on the server for manual testing. Added new parameter
        in config.json, called "upload" that when set to "true" will force the upload to the buildmaster server.

        The "features" argument is now taken into account when determining the name of the archive on the server. That
        was needed in order to avoid the CSS Regions Mac buildbot overwrite the SnowLeopard Mac build.

        Reviewed by Adam Roben.

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

2011-08-02  Patrick Gansterer  <paroga@webkit.org>

        Fix _win32_check_running_pid on 64bit windows python
        https://bugs.webkit.org/show_bug.cgi?id=64950

        Reviewed by Adam Roben.

        Use the correct types for the PROCESSENTRY32 struct.
        th32DefaultHeapID is declared as ULONG_PTR and not as DWORD.
        Using 32bit for pointers instead of 64bit results in an ERROR_BAD_LENGTH
        failure, when calling the Process32First function.
        This is covered by the executive unittest.

        * Scripts/webkitpy/common/system/executive.py:

2011-08-01  Adam Barth  <abarth@webkit.org>

        garden-o-matic should call optimize-baselines when rebaselining tests
        https://bugs.webkit.org/show_bug.cgi?id=65499

        Reviewed by Dimitri Glazkov.

        I took the opportunity to modernize this code to use some of our more
        powerful primitives from base.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:

2011-08-01  Stephanie Lewis  <slewis@apple.com>

        Finish reconfiguration started by Lucas Forschler
        Reconfigured slaves:
        Removed Leopard Intel Release (Build)
        Removed Leopard Intel Release (Tests)
        Remove apple-pixel-1
        Added Lion slaves from disabled Leopard slaves

        Added builders:
        Lion Intel Release (Build)
        Lion Intel Debug (Build)
        Lion Intel Release (Tests)
        Lion Intel Release WK2 (Tests)
        Lion Intel Debug (Tests)
        Lion Intel Debug WK2 (Tests)

        Added triggers:
        lion-intel-debug-tests
        lion-intel-debug-test-wk2
        lion-intel-release-tests
        lion-intel-release-tests-wk2
        
        Removed trigger:
        leopard-intel-release-tests

        Added PlatformSpecificScheduler:
        mac-lion

        Added "mac-lion" to build.py and build_unitttest.py

        Reviewed by Mark Rowe.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * Scripts/webkitpy/common/config/build.py:
        * Scripts/webkitpy/common/config/build_unittest.py:

 
2011-08-01  Adam Barth  <abarth@webkit.org>

        webkit-patch needs to be able to "optimize" the storage of baselines on disk
        https://bugs.webkit.org/show_bug.cgi?id=65418

        Reviewed by Dimitri Glazkov.

        If we're not careful when rebaselining tests, we can end up with lots
        of duplicate expected results files in the tree.  This patch adds a
        webkit-patch command that optimizes the storage of expected results on
        disk.

        This command is similar to deduplicate-tests, except that it can move
        test results around rather than just remove duplicate results.

        Unfortunately, this problem is very tricky because the baseline search
        structure is a hypergraph.  This patch include a huerstic optimizer
        that appears to work on a bunch of examples I've tried.  We'll likely
        need to refine it as gain experience.

        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-08-01  Dimitri Glazkov  <dglazkov@chromium.org>

        Teach TestExpectationSerializer about parsed expectations.
        https://bugs.webkit.org/show_bug.cgi?id=65444

        This is a bit largish in size, but the essentials are:
        * TestExpectationSerializer, given a parsed TestExpectationLine, can now spit out a pretty string.
        * We now store original content of the expectation line on TestExpectationLine.
        * Lots of tests.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Fixed an issue where we didn't
            populate macros correctly, also fixed an issue where we incorrectly returned an empty list
            for all configurations.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added tests for those.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Removed vestiges of code long gone,
            refactored TestExpectationsSerializer to recognize and correctly serialize parsed TestExpectationLine instances,
            changed to store and use TestExpectationLine.original_string.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Added tests.

2011-08-01  Adam Barth  <abarth@webkit.org>

        Remove unused functionality from gardeningserver
        https://bugs.webkit.org/show_bug.cgi?id=65479

        Reviewed by Dimitri Glazkov.

        We now handle these operations directly from the front-end.  That means
        they work even without the gardening server running!

        Also, add some missing files to the list of static files.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:

2011-08-01  Dimitri Glazkov  <dglazkov@chromium.org>

        Introduce SpecifierSorter, a thing that knows how specifiers should be ordered.
        https://bugs.webkit.org/show_bug.cgi?id=65413

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Added SpecifierSorter and converted
            existing code to use it.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added unit tests and cleaned up a bit.

2011-08-01  Adam Barth  <abarth@webkit.org>

        Refactor bugzilla.js for use by garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=65450

        Reviewed by Dimitri Glazkov.

        This patch refactors bugzilla.js to use the AsynchronousCache and
        updates the style to use a module instead of an object.  This patch
        then fixes all the existing code that uses this class to use the new
        API style.

        This main benefit of this patch is we remove the tricky manual caching
        and this code is now available to use in garden-o-matic (since the
        dependency on Utilities.js is now gone).

        I ran all the unit tests and poked around in TestFailures a bit to see
        that everything seemed to be working properly.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Bugzilla.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm.js:
        (FailingTestsBugForm):
        (FailingTestsBugForm.prototype._createBugTitle):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyTestBugForm.js:
        (FlakyTestBugForm):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyTestBugForm_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm.js:
        (NewBugForm):
        (NewBugForm.prototype.domElement):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestRelatedBugForm.js:
        (TestRelatedBugForm):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestRelatedBugForm_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder.start):
        (ViewController.prototype._displayBuilder):
        (ViewController.prototype._domForAuxiliaryUIElements):
        (ViewController.prototype._domForNewAndExistingBugs.bugzilla.quickSearch):
        (ViewController.prototype._domForPossiblyFlakyTests.flakyList.appendChildren):
        (ViewController.prototype._domForPossiblyFlakyTests):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html:

2011-08-01  Adam Barth  <abarth@webkit.org>

        garden-o-matic shouldn't require local server to determine if compile failed
        https://bugs.webkit.org/show_bug.cgi?id=65446

        Reviewed by Dimitri Glazkov.

        This patch adds some basic bindings for the buildbot JSON API.  I
        wanted to use Buildbot.js an Builder.js from the original TestFailures,
        but they make a number of WebKit-specific assumptions.  We'll
        eventually need to reconcile these pieces of code.

        I should really add tests for this code, but that will require me to
        build a better mock network.  I'll be happy to do that in a follow-up
        patch.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders.js: Added.
            - It's very unclear to me whether didFail is correct.  Supposedly
              the first entry here is the exit code of the step, which is 0 on
              success.  I suspect we'll need to improve this function over time.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js:

2011-08-01  Adam Barth  <abarth@webkit.org>

        garden-o-matic should show all failures, even ones that it can't find a regression range for
        https://bugs.webkit.org/show_bug.cgi?id=65447

        Reviewed by Dimitri Glazkov.

        Previously, we just wouldn't display test failures that we couldn't
        identify a regression range for (or whose regression range had fallen
        off the page).  This patch just displays them at the end of the list,
        which is slightly (but not much) better.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:

2011-08-01  Jeff Miller  <jeffm@apple.com>

        Windows build fix after r92096.

        * TestWebKitAPI/win/InjectedBundleControllerWin.cpp: Use #include, not #import, and don't include Foundation.h.
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj: Add InjectedBundleControllerWin.cpp.

2011-07-31  Anders Carlsson  <andersca@apple.com>

        DownloadDecideDestinationCrash WebKit2 API tests crashes
        https://bugs.webkit.org/show_bug.cgi?id=65442

        Reviewed by Sam Weinig.

        Copy the 18-characters.html file to the destination directory so we won't
        crash trying to make an URL for it.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2011-07-31  Anders Carlsson  <andersca@apple.com>

        Fix SpacebarScrolling WebKit2 API test
        https://bugs.webkit.org/show_bug.cgi?id=65431

        Reviewed by Sam Weinig.

        Add a way to do platform-specific bundle initialization, and use it to disable smooth
        scrolling. Also make it possible for a test to load the injected bundle without actually running
        a test from it.

        * TestWebKitAPI/InjectedBundleController.cpp:
        (TestWebKitAPI::InjectedBundleController::initialize):
        * TestWebKitAPI/InjectedBundleController.h:
        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::createContextWithInjectedBundle):
        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/mac/InjectedBundleControllerMac.mm: Added.
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * TestWebKitAPI/win/InjectedBundleControllerWin.cpp: Added.
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2011-07-31  Dimitri Glazkov  <dglazkov@chromium.org>

        Use set comparison to find duplicate or overlapping specifiers in test expectations.
        https://bugs.webkit.org/show_bug.cgi?id=65430

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Changed to use set comparisons, because length
            of a set is wrong.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py: Added some unit tests to actually catch
            regressions.

2011-07-31  Xan Lopez  <xlopez@igalia.com>

        Group dependencies CFLAGS together.

        * GNUmakefile.am: ditto.

2011-07-31  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the GTK build after <http://trac.webkit.org/changeset/92059>
        (https://bugs.webkit.org/show_bug.cgi?id=65419).

        * GNUmakefile.am: Add $(CAIRO_CFLAGS) to libWebCoreInternals_la_CPPFLAGS.

2011-07-30  Patrick Gansterer  <paroga@webkit.org>

        Fix ports_unittest.py on native windows
        https://bugs.webkit.org/show_bug.cgi?id=64959

        Reviewed by Adam Barth.

        Replace WebKitPort.script_path with WebKitPort.script_shell_command.
        The latter includes the interpreter executable required on native windows.

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

2011-07-30  Adam Barth  <abarth@webkit.org>

        Properly escape regular expressions.  (Maybe these shouldn't be regular
        expressions?)

        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-07-30  Adam Barth  <abarth@webkit.org>

        Add support for Win7 to garden-o-matic.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js:
        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-07-30  Adam Barth  <abarth@webkit.org>

        garden-o-matic regression ranges expand after fast bots start passing
        https://bugs.webkit.org/show_bug.cgi?id=65406

        Reviewed by Dimitri Glazkov.

        Once the gardener has fixed a problem, the fast bots pick up the fix,
        which means we end up using the slow bots to compute the regression
        range.  Unfortunately, the slow bots give us large regression ranges,
        leading to this strange effect where the regression range quality
        degrades as fixes roll in.

        This patch causes us to remember the previous regression ranges we've
        seen and to use that information in the future, as long as it's
        consistent with the new information we receive.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:

2011-07-30  Adam Barth  <abarth@webkit.org>

        garden-o-matic should have a Refresh button to update its display
        https://bugs.webkit.org/show_bug.cgi?id=65403

        Reviewed by Dimitri Glazkov.

        The refresh button should be faster and less disruptive than the browser's reload button.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:

2011-07-30  Adam Barth  <abarth@webkit.org>

        garden-o-matic should look for the "patch by" line in revisions ostensibly authored by the commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=65231

        Reviewed by Dimitri Glazkov.

        The human readable name is easier to understand, especially when the patch is landed by the commit-queue.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:

2011-07-30  Adam Barth  <abarth@webkit.org>

        garden-o-matic should strikeout revisions that have been rolled out
        https://bugs.webkit.org/show_bug.cgi?id=65227

        Reviewed by Dimitri Glazkov.

        This helps gardeners keep track of which problems have been solved.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:

2011-07-30  Adam Barth  <abarth@webkit.org>

        Add missing files to the server.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-07-29  Adam Barth  <abarth@webkit.org>

        Actually import the logging module!

        * Scripts/webkitpy/common/checkout/scm/git.py:

2011-07-29  Adam Barth  <abarth@webkit.org>

        More debug logging.  Maybe we're running the git version of this
        function somehow?  (That would explain why it doesn't work!)

        * Scripts/webkitpy/common/checkout/scm/git.py:

2011-07-29  Adam Barth  <abarth@webkit.org>

        Add some temporary debug logging messages to try to understand why the
        windows bots can't figure out their current SVN revision.

        * Scripts/webkitpy/common/checkout/scm/svn.py:

2011-07-29  Adam Barth  <abarth@webkit.org>

        Chromium try servers should use downstream test_expectations
        https://bugs.webkit.org/show_bug.cgi?id=65390

        Reviewed by Dirk Pranke.

        Otherwise the try servers will report bogus failures.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-07-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix an error in macro collapsing, refactor code to be pretty.
        https://bugs.webkit.org/show_bug.cgi?id=65387

        My set math was wrong.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Moved collapsing into a classmethod, fixed the math to be correct.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added unit tests.

2011-07-27  Ryuan Choi  <ryuan.choi@samsung.com>

        Style bot complains about EFL-specific forward declaration naming.
        https://bugs.webkit.org/show_bug.cgi?id=64680

        Exclude EFL-specific forward declarations from indentifiers with underscores checks.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-07-27  Adam Roben  <aroben@apple.com>

        Use wacky !svn/bc URLs consistently in Leaks Viewer

        This ensures that any resources loaded via relative URLs will still get pulled from the same
        revision of Subversion.

        Fixes <http://webkit.org/b/65267> Focus/exclude button glyphs don't load on Leaks Viewer

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/index.html: Use the
        !svn/bc-style URL for inspector.css, too, just like we do for all other resources we pull
        from Subversion.

2011-07-27  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Drop WorkQueueItemEfl.h in favour of the general WorkQueueItem.h
        https://bugs.webkit.org/show_bug.cgi?id=65269

        Reviewed by Kent Tamura.

        WorkQueueItemEfl.h was being included by efl's
        LayoutTestControllerEfl.cpp, however the top-level
        LayoutTestController still included WorkQueueItem.h, causing a lot of
        type mismatches when running the WorkQueueItem code.

        We can stick to the original WorkQueueItem header by making a few
        changes to EFL's LayoutTestController.

        This should make tests such as
        fast/loader/non-deferred-substitute-load.html stop crashing.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::queueLoad):
        * DumpRenderTree/efl/WorkQueueItemEfl.cpp:
        (LoadItem::invoke):
        (LoadHTMLStringItem::invoke):
        (ScriptItem::invoke):
        * DumpRenderTree/efl/WorkQueueItemEfl.h: Removed.

2011-07-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Re-add unit tests I accidentally zapped in r91878.

        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Re-added unit tests.

2011-07-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Replace SpecificityCalculator with TestConfiguration-driven logic.
        https://bugs.webkit.org/show_bug.cgi?id=65206

        Use our newly-acquired ability to expand modifiers into a set of
        matching TestConfiguration instances to calculate specificity and
        determine whether expectation applies to a given test configuration.

        Also, store bug modifier on TestExpectationsLine.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Replaced the logic of calculating specificity with
            test configuration matching, removed a bunch of code.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Removed a bunch of tests that aren't useful anymore.


2011-07-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Allow ports to specify their own test expectation specifier macros.
        https://bugs.webkit.org/show_bug.cgi?id=65291

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Changed SpecificityCalculator to use port macros.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Ditto.
        * Scripts/webkitpy/layout_tests/port/base.py: Added configuration_specifier_macros to retrieve the macros.
        * Scripts/webkitpy/layout_tests/port/chromium.py: Overrode it to return Chromium's macros.
        * Scripts/webkitpy/layout_tests/port/test.py: Added test macros.

2011-07-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Allow TestConfigurationConverter report conversion errors.
        https://bugs.webkit.org/show_bug.cgi?id=65287

        Also, fix a few miscellaneous testing issues.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Added a way to report unknown modifier errors.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added a test for reporting errors.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py: Fixed an error where an invalid TestConfiguration instance
            was created. 'default' is not a valid build type.
        * Scripts/webkitpy/layout_tests/port/test.py: Ditto. '' is not a valid version.

2011-07-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Teach all ports about their test configurations.
        https://bugs.webkit.org/show_bug.cgi?id=65278

        Each Port object should return a valid set of all TestConfiguration instances,
        available for this port.

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Removed TestConfiguration.all_test_configurations,
            since it is different for each port.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Removed related test.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Changed SpecificityCalculator to take a list of
            all test configurations as a param.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Adjusted arguments accordingly.
        * Scripts/webkitpy/layout_tests/port/base.py: Forced all ports to override generation of all test configurations.
        * Scripts/webkitpy/layout_tests/port/chromium.py: Implemented _generate_all_test_configurations for the port.
        * Scripts/webkitpy/layout_tests/port/gtk.py: Ditto.
        * Scripts/webkitpy/layout_tests/port/mac.py: Ditto.
        * Scripts/webkitpy/layout_tests/port/qt.py: Ditto.
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py: Added an extra test to ensure we're generating a good set.
        * Scripts/webkitpy/layout_tests/port/test.py: Implemented a fixed-in-time all_test_configurations for testing.
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py: Added a mock all_test_configurations implementation.
        * Scripts/webkitpy/layout_tests/port/win_unittest.py: Added a unit test for the port.

2011-07-27  Benjamin Poulain  <benjamin@webkit.org>

        [WK2][Qt] Move from QGraphicsView to Qt Scene Graph
        https://bugs.webkit.org/show_bug.cgi?id=62969

        Reviewed by Andreas Kling.

        Co-authored with Simon Hausmann  <simon.hausmann@nokia.com>

        With the scene graph, the interface to have a window on screen is
        QSGCanvas. QGraphicsView is not used, and openGL is an enforced
        dependency.

        Both the BrowserView and the WebKitTest runner are changed from
        QGraphicsView to QSGCanvas.

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::BrowserView):
        (BrowserView::resizeEvent):
        (BrowserView::view):
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::urlChanged):
        (BrowserWindow::~BrowserWindow):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/main.cpp:
        (main):
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WebView::WebView):
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-07-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r91792.
        http://trac.webkit.org/changeset/91792
        https://bugs.webkit.org/show_bug.cgi?id=65242

        It broke NRWT on Qt and GTK (Requested by Ossy_night on
        #webkit).

        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:

2011-07-26  Adam Barth  <abarth@webkit.org>

        Switch to an older idiom that works on Python 2.5.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py:

2011-07-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add an exception to coding style check for EFL port.
        https://bugs.webkit.org/show_bug.cgi?id=65162

        Add an exception of whitespace/declaration for EFL port. Because,
        '*' operator is next to variable in EFL coding style.

        Reviewed by Kent Tamura.

        * Scripts/webkitpy/style/checker.py:

2011-07-26  Keith Kyzivat  <keith.kyzivat@nokia.com>

        [Qt] Add option to turn on disk caching in QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=65007

        Reviewed by Noam Rosenthal.

        Add menu item and command line option to turn on disk caching in
        QtTestBrowser. Simple QNetworkDiskCache added to the page's
        QNetworkAccssManager.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        (LauncherWindow::setDiskCache):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2011-07-26  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        Add support for download='filename' attribute in anchors.
        https://bugs.webkit.org/show_bug.cgi?id=64580

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::loadURLExternally):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-07-26  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Anders Carlsson.

        Update DumpRenderTree and API tests for the pictograph font family preference.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2011-07-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Replace SpecificityCalculator with TestConfiguration-driven logic.
        https://bugs.webkit.org/show_bug.cgi?id=65206

        Use our newly-acquired ability to expand modifiers into a set of
        matching TestConfiguration instances to calculate specificity and
        determine whether expectation applies to a given test configuration.

        Also, store bug modifier on TestExpectationsLine.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Added a way to report unknown modifier errors.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added a test for reporting errors.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Replaced the logic of calculating specificity with
            test configuration matching, removed a bunch of code.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Removed a bunch of tests that aren't useful anymore.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py: Fixed an error where an invalid TestConfiguration instance
            was created. 'default' is not a valid build type.
        * Scripts/webkitpy/layout_tests/port/test.py: Ditto. '' is not a valid version.

2011-07-26  Adam Barth  <abarth@webkit.org>

        Increase the information density in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=65141

        Reviewed by Dimitri Glazkov.

        This patch changes lets us show each revision on a single line,
        allowing use to show an entire day's worth of commits at once.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:

2011-07-26  Dimitri Glazkov  <dglazkov@chromium.org>

        TestConfigurationConverter should not barf on invalid specifiers.
        https://bugs.webkit.org/show_bug.cgi?id=65194

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Refactored TestConfigurationConverter.to_config_set a bit,
            made it return empty set whenever an invalid specifier is encountered.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added corresponding tests.

2011-07-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Introduce a way to convert between specifier lists and TestConfiguration sets.
        https://bugs.webkit.org/show_bug.cgi?id=65094

        Add TestConfigurationConverter, a facility to convert:
        1) a set of specifiers into a set of TestConfiguration instances;
        2) a set of TestConfiguration instances into a list of sets of specifiers.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Added TestConfigurationConverter.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added tests for it.

2011-07-26  Alexandru Chiculita  <achicu@adobe.com>

        CSS Regions build bot should build with "--css-regions" and "--css-exclusion" flags
        https://bugs.webkit.org/show_bug.cgi?id=65171

        Added "features" parameter in config.json for "builder" objects. The parameter is optional and must be an array. All the items
        of the array will be passed to the build-webkit script. The items will automatically be prefixed with "--".

        Reviewed by Adam Roben.

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

2011-07-26  Chris Rogers  <crogers@google.com>

        Avoid outputting #EOF twice for web audio tests in chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=65201

        Reviewed by Dirk Pranke.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dump):

2011-07-26  Adam Barth  <abarth@webkit.org>

        Windows bots on build.chromium.org can't figure out the head_svn_revision
        https://bugs.webkit.org/show_bug.cgi?id=65156

        Reviewed by Tony Chang.

        This patch is a bit of a guess as to the issue based on the
        investigation in https://bugs.webkit.org/show_bug.cgi?id=65148.  I'm
        not sure whether it will fix the issue, but it seems worth a try.

        * Scripts/webkitpy/common/checkout/scm/svn.py:

2011-07-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKitGtk build with GTK+ 3.x after r91707.

        * DumpRenderTree/gtk/SelfScrollingWebKitWebView.cpp:
        (getPreferredSizeMethod):

2011-07-26  MORITA Hajime  <morrita@google.com>

        [Chromium][DRT] MockSpellCheck.cpp should be clang clean
        https://bugs.webkit.org/show_bug.cgi?id=65166

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        (MockSpellCheck::spellCheckWord): -Wsign-compare warning.

2011-07-25  Patrick Gansterer  <paroga@webkit.org>

        Ignore line endings in ChangeLogTests
        https://bugs.webkit.org/show_bug.cgi?id=64956

        Reviewed by Adam Barth.

        Split the lines of the ChangeLog text before comparing them.
        This fixes 3 tests on windows, since only the content importent.

        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:

2011-07-25  Adam Barth  <abarth@webkit.org>

        Add some debug logging to NRWT to diagnose why the windows bots can't determine their SVN revision
        https://bugs.webkit.org/show_bug.cgi?id=65148

        Reviewed by Tony Chang.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2011-07-25  Ojan Vafai  <ojan@chromium.org>

        Tweak whitespace wrapping to improve readability.
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-07-25  Ojan Vafai  <ojan@chromium.org>

        Minor tweak to wrap label elements as atomic units.

        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-07-25  Ojan Vafai  <ojan@chromium.org>

        always show flakiness details on the builder page
        https://bugs.webkit.org/show_bug.cgi?id=65139

        Reviewed by Tony Chang.

        In order to simplify the UI, we hide the flakiness details by default,
        but there's no actual use-case for this page without the flakiness details.
        So get rid of that option and always show the flakiness details.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-07-25  Ojan Vafai  <ojan@chromium.org>

        simplify the UI of the header above the test list table
        https://bugs.webkit.org/show_bug.cgi?id=65136

        Reviewed by Adam Barth.

        Use checkboxes instead of links since this is really about which tests to include.
        Ends up using less text and put the checkboxes to the right of the header instead of below it.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-25  Chris Rogers  <crogers@google.com>

        Update new-run-webkit-tests to accomodate binary audio data
        https://bugs.webkit.org/show_bug.cgi?id=65135

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-07-25  Chris Rogers  <crogers@google.com>

        Update Chromium DRT to output binary (instead of base64-encoded) data for web audio testing
        https://bugs.webkit.org/show_bug.cgi?id=65039

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setAudioData):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::audioData):
        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (DRTPrinter::handleAudioHeader):
        (TestShellPrinter::handleAudioHeader):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dump):

2011-06-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Use WebCore scrollbars for the DRT instead of GtkScrolledWindow
        https://bugs.webkit.org/show_bug.cgi?id=62252

        Add a new subclass of WebKitWebView that overrides the size request to
        return 1 pixel by 1 pixel. This ensure that it operates properly when
        not packed into a GtkScrolledWindow. Also construct the WebKitWebView
        with self-scrolling set to true.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webInspectorInspectWebView): Use the new SelfScrollingWebKitWebview class here.
        (createWebView): Ditto.
        (main): Pack the widget into a GtkBox instead of a GtkScrolledWindow.
        * DumpRenderTree/gtk/SelfScrollingWebKitWebView.cpp: Added.
        (self_scrolling_webkit_web_view_class_init):
        (self_scrolling_webkit_web_view_init):
        (self_scrolling_webkit_web_view_new):
        (sizeRequestMethod):
        (getPreferredSizeMethod):
        * DumpRenderTree/gtk/SelfScrollingWebKitWebView.h: Added.
        * GNUmakefile.am: Added SelfScrollingWebKitWebView files to the source list.

2011-07-25  Ojan Vafai  <ojan@chromium.org>

        by default hide tests that have passes for all recorded runs
        https://bugs.webkit.org/show_bug.cgi?id=65127

        Reviewed by Adam Barth.

        This is part of simplifying the default views of the dashboard to
        make it show less information for the common use cases.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-25  Ojan Vafai  <ojan@chromium.org>

        stop generating expectations.json now that it's unused
        https://bugs.webkit.org/show_bug.cgi?id=65130

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        * TestResultServer/handlers/menu.py:
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-07-25  Ojan Vafai  <ojan@chromium.org>

        don't show builders in the flakiness dashboard that have stopped running a given test suite
        https://bugs.webkit.org/show_bug.cgi?id=65126

        Reviewed by Mihai Parparita.

        * TestResultServer/static-dashboards/dashboard_base.js:

2011-07-25  Adam Barth  <abarth@webkit.org>

        Overhaul garden-o-matic frontend to integrate revision history and failures
        https://bugs.webkit.org/show_bug.cgi?id=65089

        Reviewed by Dimitri Glazkov.

        This is a major overhaul of the garden-o-matic frontend.  The new UI
        integrates the revision history information with failures.  Failures
        appear in context adjacent to the revisions that caused them (which are
        highlighted).  Each buildbot receives a collumn to the left, which
        indicates which revisions that bot has tested and whether that bot
        showed the indicated failures.

        Failures are selectable with checkboxes, and can then either be
        examined or rebaselined.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js:

2011-07-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        [buildbot] Add Qt Linux MIPSEL Configuration
        https://bugs.webkit.org/show_bug.cgi?id=65116

        Reviewed by Adam Roben.

        Introduce a Qt Linux MIPS EL build slave. The configuration
        is a build only configuration.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add MIPS buildbot.

2011-07-25  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt][WK2] Add multi-point touch mocking to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=64374

        Reviewed by Benjamin Poulain.

        Each mouse button generate a touch point. The touch point stay
        virtually on screen if the mouse release happened while the Ctrl
        modifier was pressed.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/MiniBrowserApplication.h:

2011-07-25  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Use NRWT for Qt-WK2
        https://bugs.webkit.org/show_bug.cgi?id=65097

        Reviewed by Andreas Kling.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-07-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r91635.
        http://trac.webkit.org/changeset/91635
        https://bugs.webkit.org/show_bug.cgi?id=65083

        It broke the minimal build (Requested by Ossy___OFFLINE on
        #webkit).

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2011-07-24  Adam Barth  <abarth@webkit.org>

        Rename garden-o-matic "alert" to "infobar" and increase the width to 100%.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js:

2011-07-23  Dimitri Glazkov  <dglazkov@chromium.org>

        TestConfiguration should be hashable and comparable for equality.
        https://bugs.webkit.org/show_bug.cgi?id=65070

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Added __hash__ and __eq__ methods.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added unit tests.

2011-07-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Extract TestConfiguration from base and write a few unit tests to capture current behavior.
        https://bugs.webkit.org/show_bug.cgi?id=65066

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Added.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/base.py: Moved code to test_configuration.py

2011-07-23  Alok Priyadarshi  <alokp@chromium.org>

        Switching off acceleration for small canvas broke gpu tests
        https://bugs.webkit.org/show_bug.cgi?id=65053

        Reviewed by Stephen White.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:

2011-07-23  Keith Kyzivat  <keith.kyzivat@nokia.com>

        [Qt] Add option to turn on disk caching in QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=65007

        Reviewed by Noam Rosenthal.

        Add menu item and command line option to turn on disk caching in
        QtTestBrowser. Simple QNetworkDiskCache added to the page's
        QNetworkAccssManager.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        (LauncherWindow::setDiskCache):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2011-07-22  Ojan Vafai  <ojan@chromium.org>

        Don't match 'DEBUG' when trying to filter BUG modifiers.
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-22  Ojan Vafai  <ojan@chromium.org>

        Fix issue loading gtests since there's no g_expectations.
        Also, make filing a bug file a webkit.org bug, not a crbug since
        the link is only shown for layout tests.
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-07-22  Ojan Vafai  <ojan@chromium.org>

        pull test expectations into the dashboard from wvn.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=65054

        Reviewed by Adam Barth.

        Now that svn.webkit.org supports cors headers, we can just grab the txt
        file from there instead of generating a JSON file that we upload
        to appengine. We'll stop generating the JSON file in a followup patch.

        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-22  Adam Barth  <abarth@webkit.org>

        Fix typo so the tool works on a case-sensitive file system.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:

2011-07-22  Adam Barth  <abarth@webkit.org>

        garden-o-matic should know what patches are landing
        https://bugs.webkit.org/show_bug.cgi?id=64978

        Reviewed by Dimitri Glazkov.

        This patch adds a display of the recently committed patches to
        garden-o-matic.  The UI needs iteration, but this patch establishes the
        plumbing.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
            - Teach trac how to extract more information from the commit log.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js:
            - Add a data attribute for storing the revision.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
            - Add a container for the recent commit history.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
            - CSS for displaying non-ugly commit history.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
            - Wire up trac to the UI container.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
            - A basic, compact display for a list of commits.

2011-07-22  Ojan Vafai  <ojan@chromium.org>

        Fix bug when switching from layout-tests to another test-type if
        ToT webkit.org is the selected group.
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-07-22  Ojan Vafai  <ojan@chromium.org>

        Add back in line accidentally deleted in http://trac.webkit.org/changeset/91612.
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-07-22  Ojan Vafai  <ojan@chromium.org>

        simplify the flakiness dashboard to only show modifiers/expectations for the current builder
        https://bugs.webkit.org/show_bug.cgi?id=65049

        Reviewed by Tony Chang.

        This communicates less information, but probably makes the dashboard more usable.
        Also make it show that bug lines that don't point to bug numbers still
        show up in the bugs column (e.g. BUG_TONY) and stop showing the extra/missing
        columns in any view. The data is still used, but only in the view that updates
        the test_expectations.txt file.

        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-21  Ojan Vafai  <ojan@chromium.org>

        hook in the rest of the bots to the dashboard now they run NRWT
        https://bugs.webkit.org/show_bug.cgi?id=64985

        Reviewed by Adam Barth.

        * TestResultServer/static-dashboards/builders.js:

2011-07-22  Alexey Proskuryakov  <ap@apple.com>

        Adding Tim Horton to contributor list for Bugzilla auto-completion. He is CC'ed quite frequently.

        Unreviewed.

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

2011-07-22  Michal Pakula vel Rutka  <m.pakula@samsung.com>

        [EFL] ewk_frame_hit_test_new enchancement
        https://bugs.webkit.org/show_bug.cgi?id=64260

        Apply changes done in ewk_frame_hit_test_new in EWebLauncher:
        Replacing Ewk_Hit_Test_Result_Context structure 'flags'
        in hit test output to by enum 'context'.

        Reviewed by Antonio Gomes.

        * EWebLauncher/main.c:
        (on_key_down):

2011-07-21  Adam Roben  <aroben@apple.com>

        Fix typo in TestFailures

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:

2011-07-21  Ojan Vafai  <ojan@chromium.org>

        simplify gtest display now that we strip modifiers from the JSON
        https://bugs.webkit.org/show_bug.cgi?id=64990

        Reviewed by Adam Barth.

        Now that names are normalized, we can remove all the code that
        handles gtest name changes (e.g. for adding modifiers like DISABLED_).
        Instead, if you try to list a test with a modifier in it, we need
        to strip the modifier so we get the normalized value.

        We also get rid of the concept of extra/missing expectations for gtests.
        In a patch soon, we'll stop showing extra/missing expectations from the UI
        entirely and only leave it for the special updating test_expectations.txt
        view of the dashboard, which doesn't apply to gtests.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-21  Adam Barth  <abarth@webkit.org>

        Refactor Trac.js for use in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=64998

        Reviewed by Adam Roben.

        This patch refactors Trac.js to match the architecture and style of
        garden-o-matic.  I've also factored AsynchronousCache out of Trac (and
        moved it to base) because it was redundant with some other code we
        already had.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm.js:
        (FailingTestsBugForm):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder.start):
        (ViewController.prototype._displayBuilder):
        (ViewController.prototype._domForRegressionRange.trac.getCommitDataForRevisionRange):
        (ViewController.prototype._domForRegressionRange):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:

2011-07-21  Ojan Vafai  <ojan@chromium.org>

        Fix issue throwing a 500 to the bots. We were modifying
        the dictionary during an iteration over it's keys and would get
        RuntimeError: dictionary changed size during iteration

        * TestResultServer/model/jsonresults.py:

2011-07-21  Adam Barth  <abarth@webkit.org>

        ORWT fails to consume some NRWT arguments
        https://bugs.webkit.org/show_bug.cgi?id=64988

        Reviewed by Adam Roben.

        * Scripts/old-run-webkit-tests:

2011-07-21  Adam Barth  <abarth@webkit.org>

        Merge TestFailures and garden-o-matic unit tests harness
        https://bugs.webkit.org/show_bug.cgi?id=64984

        Reviewed by Adam Roben.

        One unit testing framework is better than two.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-more-unittests.html: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:

2011-07-21  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Adam Roben.

        Move garden-o-matic files into the same directory as TestFailures to
        make it easier to integrate the codebases.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/base.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/base_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/checkout.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout_unittests.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/checkout_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/config.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/favicon-green.png: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/favicon-green.png.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/favicon-red.png: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/favicon-red.png.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/index.html.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.css.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/partytime.gif: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/partytime.gif.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results_unittests.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-more-unittests.html: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js.
        * Scripts/webkitpy/tool/commands/abstractlocalservercommand.py:
        * Scripts/webkitpy/tool/commands/gardenomatic.py:
        * Scripts/webkitpy/tool/servers/data/gardeningserver: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/base.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/base_unittests.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/checkout.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/checkout_unittests.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/config.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/favicon-green.png: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/favicon-red.png: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/partytime.gif: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js: Removed.
        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-07-19  Ojan Vafai  <ojan@chromium.org>

        fix links on the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=64832

        Reviewed by Tony Chang.

        Make them actual anchor tags and linkify the test name instead of
        adding an extra link. Also simplify the update view since we now
        show the linkified test name.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-07-21  Adam Barth  <abarth@webkit.org>

        webkit.org builders should upload results to test-results AppEngine instance
        https://bugs.webkit.org/show_bug.cgi?id=64979

        Reviewed by Adam Roben.

        The master just needs to pass some flags to NRWT.  This patch also lets
        ORWT consume the flags (ignoring them) so we can pass the flags
        unconditionally.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * Scripts/old-run-webkit-tests:

2011-07-21  Ojan Vafai  <ojan@chromium.org>

        normalize gtest names in the result json
        https://bugs.webkit.org/show_bug.cgi?id=64971

        Reviewed by Eric Seidel.

        This will make the resulting JSON smaller and make the
        flakiness dashboard much more sane (e.g. we won't need to
        show you the FLAKY_ version and the normal version).

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2011-07-21  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Reenable ORWT for the --leaks bot.
        Something is still wrong with the leaks summarizing
        but I'm about to head out on vacation for 2 weeks,
        so it's best to just revert back to ORWT until I'm back.

        * Scripts/run-webkit-tests:
        (usingLeaks):
        (useNewRunWebKitTests):

2011-07-21  Ojan Vafai  <ojan@chromium.org>

        cleanup jsonresults.py style in preparation for making some changes
        https://bugs.webkit.org/show_bug.cgi?id=64968

        Reviewed by Adam Barth.

        No code changes. Unittest still passes. Mostly just removing
        useless comments and 80 character wrapping.

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2011-07-21  Adam Barth  <abarth@webkit.org>

        Add missing column header.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:

2011-07-21  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Just fixing (and unittesting) a previous typo.

        Fix typo in print_leaks_summary regexp which was causing
        leaks summarizing to fail on the --leaks bot.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:

2011-07-21  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to rebaseline many tests at once
        https://bugs.webkit.org/show_bug.cgi?id=64963

        Reviewed by Dimitri Glazkov.

        This patch contains some UI for rebaselining tests in bulk.  I don't
        expect this UI to be the final UI, but the underlying infrastructure
        will be useful.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/checkout.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:

2011-07-21  Adam Barth  <abarth@webkit.org>

        garden-o-matic has trouble when the same test fails in different ways on diffrent bots
        https://bugs.webkit.org/show_bug.cgi?id=64830

        Unreviewed.  (Missing the patch is blocking me from fixing the tree.)

        This patch is just some minor bug fixes.  One of the bugs results from
        the sadness of having two representations (a list and a space-separated
        string) for the set of failure types.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-20  Ryosuke Niwa  <rniwa@webkit.org>

        Buildbot marks a nrwt bot red when tests are missing results
        https://bugs.webkit.org/show_bug.cgi?id=64812

        Reviewed by Adam Barth.

        The bug was caused by multiple expressions matching on the single output.
        Fixed it by exiting the loop as soon as one expression matches.

        Because the regular expression for 'failures' is most general,
        moved it to the end of the list to avoid it catching other cases.

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

2011-07-20  Chang Shu  <cshu@webkit.org>

        Adding myself to the reviewers list; No review needed.

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

2011-07-20  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests --leaks does not restart DumpRenderTree often enough
        https://bugs.webkit.org/show_bug.cgi?id=64912

        Reviewed by Adam Barth.

        The bug was that set_default_option only works if the option's value
        is "None".  So I fixed --batch-size to default to None instead of 0
        (which kinda makes sense).

        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-07-20  Eric Seidel  <eric@webkit.org>

        Make kill-old-processes kill httpd on mac
        https://bugs.webkit.org/show_bug.cgi?id=64898

        Reviewed by Adam Barth.

        * BuildSlaveSupport/kill-old-processes:
         - The line endings seem to have flipped again,
           Thus making this diff gigantic.  The only line
           changed is the "httpd" line.  I suspect we'll need
           to set the line ending style from an svn checkout.

2011-07-20  Ojan Vafai  <ojan@chromium.org>

        show a list of average test times in the treemap
        https://bugs.webkit.org/show_bug.cgi?id=64899

        Reviewed by Adam Roben.

        For now, you click a link and it replaces the treemap
        with a reverse sorted list of directories based on
        average test runtime within that directory.

        To cut some of the noise, we don't show directories
        that only have one test in them or where the average
        runtime is less than 100ms.

        * TestResultServer/static-dashboards/treemap.html:

2011-07-20  Eric Seidel  <eric@webkit.org>

        Teach build.webkit.org how to identify leaks in NRWT output
        https://bugs.webkit.org/show_bug.cgi?id=64891

        Reviewed by Adam Barth.

        This was the last remaining piece blocking turning on
        NRWT for the leaks bot, so I did that in this change too.
        If for some reason we see trouble on the bots, I'll
        revert that part of this change.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * Scripts/run-webkit-tests:

2011-07-20  Ojan Vafai  <ojan@chromium.org>

        make the treemap display more human friendly
        https://bugs.webkit.org/show_bug.cgi?id=64896

        Reviewed by Tony Chang.

        * TestResultServer/static-dashboards/treemap.html:

2011-07-20  Eric Seidel  <eric@webkit.org>

        Move HttpLock to using a FileSystem object
        https://bugs.webkit.org/show_bug.cgi?id=64885

        Reviewed by Adam Barth.

        I made a typo in my previous change, taking the value
        of read_text_file(pid_file) and setting it to lock_pid_file
        instead of current_pid.  Fixed now. :)

        In order to test my new change I had to overhaul the unittests
        for this class to create a separate set of tests which work off
        of Mock objects instead of the real filesystem.

        Since Executive doesn't yet wrap os.getpid() I added a FIXME
        in several places where we're currently calling os.getpid().  I
        felt adding Executive.getpid was outside of the scope of this change
        but once it exists some of this code will be much simpler to mock.

        * Scripts/webkitpy/layout_tests/port/http_lock.py:
        * Scripts/webkitpy/layout_tests/port/http_lock_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2011-07-20  Adam Roben  <aroben@apple.com>

        Fix typo in TestFailures's Bugzilla constants

        This was preventing the "Version" field from being pre-filled when filing new bugs.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/WebKitBugzilla.js:

2011-07-20  Eric Seidel  <eric@webkit.org>

        Move HttpLock to using a FileSystem object
        https://bugs.webkit.org/show_bug.cgi?id=64885

        Reviewed by Adam Barth.

        There is no functional change here.  Just moving off
        of direct os.foo calls to their filesystem equivalent.

        This makes it possible to now unittest HttpLock using a
        MockFileSystem instead of needing to talk to the filesystem directly.

        This also will have changed any port test cases which were using a
        mock file system to now have an HttpLock based on a mock filesystem
        instead.  I saw no change in the unittests so it's possible
        we're not testing that configuration (or more likely that it "just works").

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/http_lock.py:
        * Scripts/webkitpy/layout_tests/port/http_lock_unittest.py:

2011-07-20  Adam Barth  <abarth@webkit.org>

        NRWT results uses too much space per run
        https://bugs.webkit.org/show_bug.cgi?id=64845

        Reviewed by Ojan Vafai.

        Removing these files saves about 750K per build.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2011-07-20  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] [NRWT] Xvfb produces a lot of stderr output
        https://bugs.webkit.org/show_bug.cgi?id=64669

        Reviewed by Philippe Normand.

        Redirect the stderr output of the driver's Xvfb process
        to /dev/null to suppress unneeded output.

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2011-07-19  Eric Seidel  <eric@webkit.org>

        parse-malloc-history always exits 1, causing NRWT to fail
        https://bugs.webkit.org/show_bug.cgi?id=64835

        Reviewed by Adam Barth.

        ORWT just never checked the return code. :)

        * Scripts/parse-malloc-history:
        (main):
        * Scripts/webkitpy/layout_tests/port/mac.py:

2011-07-19  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, don't add the debug prefix as 2.9 no longer uses one.

        * waf/build/wxpresets.py:

2011-07-19  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests should only enable MallocStackLogging for DRT
        https://bugs.webkit.org/show_bug.cgi?id=64792

        Reviewed by Adam Barth.

        The previous code would enable it for all servers launched
        by the port, which included Apache, the python websocket server
        as well as ImageDiff.  Now only DumpRenderTree will have
        MallocStackLogging enabled or the GuardMalloc library injected.

        I also cleaned up the websocket_server code to use filesystem
        while I was in it.

        I also made DRT restart every 1000 tests when running with
        --leaks enabled.  I believe this made the --leaks run slightly
        faster, but it still takes over an hour on my machine. :(

        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:

2011-07-19  Ojan Vafai  <ojan@chromium.org>

        remove the concept of platform fallbacks
        https://bugs.webkit.org/show_bug.cgi?id=64829

        Reviewed by Adam Barth.
        
        In the process, wrote tests for this code and fixed a pretty major
        bug (now covered by the test).

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-19  Ojan Vafai  <ojan@chromium.org>

        cleanup some of the PLATFORM logic in the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=64821

        Reviewed by Adam Barth.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-19  Ojan Vafai  <ojan@chromium.org>

        cleanup some of the PLATFORM logic in the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=64821

        Reviewed by Adam Barth.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-19  Dimitri Glazkov  <dglazkov@chromium.org>

        Store line number on TestExpectationLine.
        https://bugs.webkit.org/show_bug.cgi?id=64800

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Refactored to store line number on TestExpectationLine instances.

2011-07-19  Ojan Vafai  <ojan@chromium.org>

        fix flakiness dashboard for XP bots with XP in the name instead of WIN
        https://bugs.webkit.org/show_bug.cgi?id=64826

        Reviewed by Mihai Parparita.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-19  Cary Clark  <caryclark@google.com>

        add myself to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=64816

        No review needed.

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

2011-07-19  Daniel Bates  <dbates@webkit.org>

        Rename variable isEmptyTextPatch in svn-{apply, unapply}
        https://bugs.webkit.org/show_bug.cgi?id=64648

        Reviewed by Adam Roben.

        Rename the variable isEmptyTextPatch to hasTextChunks, which is
        more descriptive and makes its usage read well in control statements.

        * Scripts/svn-apply:
        (patch):
        * Scripts/svn-unapply:
        (patch):

2011-07-19  Adam Roben  <aroben@apple.com>

        Make TestFailures show existing bugs and a new bug link for flaky tests

        Fixes <http://webkit.org/b/63728> TestFailures page should make it easy to file bugs about
        flaky tests
        and
        <http://webkit.org/b/63830> TestFailures page doesn't show related bugs for possibly-flaky
        tests, but should

        Reviewed by Sam Weinig.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyTestBugForm.js:
        Added. This is what's used to file new bugs about flaky tests.
        (FlakyTestBugForm): Calls up to the base class, stores the arguments, and sets our
        title, description, and URL.

        (FlakyTestBugForm.prototype._createBugDescription):
        (FlakyTestBugForm.prototype._createBugTitle):
        These do what they say.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyTestBugForm_unittests.js:
        Added. Tests of the above.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (#failure-history > li):
        (#possibly-flaky-tests > li):
        (#failure-history > li, #possibly-flaky-tests > li):
        (#possibly-flaky-tests > li > :first-child):
        (.flakiness-examples-list):
        Styling to account for the new elements.

        (.expandable):
        (.expanded > .expandable):
        Generalized the .flakiness-example-list code to a generic .expandable class. Removed the
        transition properties because we can't transition to/from 'auto' (but really would like
        to!).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder): Moved code to create the FailingTestsBugForm
        here from _domForNewAndExistingBugs. Updated for changes to _domForPossiblyFlakyTests.
        (ViewController.prototype._domForNewAndExistingBugs): Changed to take a NewBugForm as an
        argument instead of creating one ourselves.
        (ViewController.prototype._domForPossiblyFlakyTests): Changed to take all analyzed builds as
        an argument instead of just the number of analyzed builds. Put the examples list inside a
        container <div>, which is also used to hold the new/existing bugs UI. Removed code to deal
        with animating the height of the examples list; we don't do this anymore because it's hard
        to make it work correctly with the asynchronous loading of existing bugs. When we populate
        the examples list, also set up the new/existing bug UI.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in
        FlakyTestBugForm.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        Pull in FlakyTestBugForm and its tests.

2011-07-19  Ryosuke Niwa  <rniwa@webkit.org>

        Buildbot marks a nrwt bot red when tests are missing results
        https://bugs.webkit.org/show_bug.cgi?id=64812

        Reviewed by Tony Chang.

        Added "missing results" label for tests that are missing results.

        buildbot Now reports shows a label "X missing results" on a run when X tests were missing
        expected results on that run.

        Also rephrased "X failed" and "X were flaky" to "X failures" and "X flakes".

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

2011-07-19  Adam Roben  <aroben@apple.com>

        Extract some of FailingTestsBugForm's code into a base class

        Prep work for fixing <http://webkit.org/b/63728> TestFailures page should make it easy to
        file bugs about flaky tests

        Reviewed by Sam Weinig.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm.js:
        Moved BugzillaConstants to new WebKitBugzilla file. Moved a bunch of other code from here to
        TestRelatedBugForm.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm_unittests.js:
        Moved some tests to TestRelatedBugForm_unittests.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestRelatedBugForm.js: Added.
        (TestRelatedBugForm):
        (TestRelatedBugForm.prototype.domElement):
        (TestRelatedBugForm.prototype._computeOperatingSystem):
        (TestRelatedBugForm.prototype._computePlatform):
        Code came from FailingTestsBugForm.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestRelatedBugForm_unittests.js:
        Added. Tests came from FailingTestsBugForm_unittests.js

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/WebKitBugzilla.js:
        Added. Code came from FailingTestsBugForm.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in
        TestRelatedBugForm.js and WebKitBugzilla.js. Moved Bugzilla.js out of the list of files that
        need to be pulled in early for parsing reasons.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        Pull in TestRelatedBugForm and tests and WebKitBugzilla.

2011-07-19  Sam Weinig  <sam@webkit.org>

        Remove obsolete Mac NRWT test bots
        https://bugs.webkit.org/show_bug.cgi?id=64806

        Reviewed by Adam Roben.

        Remove "Leopard Intel Release (NRWT)" and "SnowLeopard Intel Release (NRWT)"
        which have been disconnected for some time and have been obsoleted by
        the main testers using NRWT.

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

2011-07-19  Sam Weinig  <sam@webkit.org>

        webkit-patch rebaseline crashes on use
        https://bugs.webkit.org/show_bug.cgi?id=64775

        Reviewed by Adam Roben.

        Fix incorrectly spelled attribute name.

        * Scripts/webkitpy/common/net/layouttestresults.py:
        The attribute is test_name, not filename.

        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        Add test for tests_matching_failure_types.

2011-07-18  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests should support --leaks
        https://bugs.webkit.org/show_bug.cgi?id=63832

        Reviewed by Dirk Pranke.

        This may not be sufficient to actually transition over the leaks bot,
        but this is a huge step in the right direction.

        I had to make parse-malloc-history understand being passed more than
        one file (to avoid the silly cat | nonsense in old-run-webkit-tests).

        I removed some dead code relating to previous iterations of our crash detection.

        I created a new class "LeakDetector" to encapsulate all this logic.
        Eventually we should consider pulling that class out of mac.py and
        sharing with other ports.  However given that ORWT has had
        --leaks support on Mac for almost 7 years and no other port has added
        it, leaves me to believe we're in no rush to move LeakDetector.

        I've tested --leaks locally.  I suspect there are more bugs to shake out
        but it seems to work well enough to start.

        I also added support for --guard-malloc, but have not tested it much.  It
        should be viewed as experimental at this time.

        I also fixed various os.path uses to self._filesystem as I was reading
        through the various files to understand how best to fix this bug.

        * Scripts/old-run-webkit-tests:
        (parseLeaksandPrintUniqueLeaks):
        * Scripts/parse-malloc-history:
        (main):
        * Scripts/webkitpy/common/system/crashlogs.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-07-19  Adam Barth  <abarth@webkit.org>

        garden-o-matic should have a "Triage Failures" button for iterating over failures
        https://bugs.webkit.org/show_bug.cgi?id=64769

        Reviewed by Eric Seidel.

        This patch adds some global static state and refactors things a bit so
        that we can iterate over all the failures in the details pane.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:
            - Add a generic callback iterator to iterate through a series of
              callbacks. We use this to iterate through the failures we want to
              display the details of.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
            - Add a toolbar for the results summary and change the buttons to
              be real buttons.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
            - Make the detail pane 75% of the window.
            - Make the buttons pretty.
            - Allow the failure type badges to apply to the details pane as well.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
            - Restructure how we bring up the details pane so we can iterate
              through a bunch of failures.
            - Remove the transition between results details because it's
              annoying when you want to click through a bunch of failures.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
            - Add some more structure to the title bar for the results details
              so it's clearer which results we're currently displaying.

2011-07-19  Adam Barth  <abarth@webkit.org>

        garden-o-matic should live update as conditions change on the buildbot
        https://bugs.webkit.org/show_bug.cgi?id=64646

        Reviewed by Eric Seidel.

        This patch causes the garden-o-matic display to update every 10 minutes
        to show the latest failures.  This patch required a moderately large
        refactoring of main.js to make the display incremental instead of
        all-at-once.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:

2011-07-18  Tab Atkins  <jackalmage@gmail.com>

        Tab Atkins is not in committers.py (as a non-committer)
        https://bugs.webkit.org/show_bug.cgi?id=64770

        Reviewed by Eric Seidel.

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

2011-07-18  Ojan Vafai  <ojan@chromium.org>

        Load ToT chromium bots by default in the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=64756

        Reviewed by Adam Barth.

        For now, these are the most useful bots to look at. Eventually,
        we may want to load the build.webkit.org bots by default once
        most of the bots there upload results.

        * TestResultServer/static-dashboards/dashboard_base.js:

2011-07-13  Jon Honeycutt  <jhoneycutt@apple.com>

        Focus and selection events are not fired when a <select>'s selection
        changes
        https://bugs.webkit.org/show_bug.cgi?id=64504
        <rdar://problem/9319881>

        Reviewed by Alice Liu.

        * DumpRenderTree/AccessibilityController.h:
        Added m_notificationsEventHook for addNotificationListener().
        m_allEventsHook will now be used for setLogAccessibilityEvents().

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::AccessibilityController):
        Initialize m_notificationsEventHook.
        (AccessibilityController::~AccessibilityController):
        Turn off logging of all accessibility events. If
        m_notificationsEventHook is non-null, unhook it.
        (logEventProc):
        Add handling of EVENT_OBJECT_SELECTION.
        (AccessibilityController::setLogAccessibilityEvents):
        If the state of logging is not changing, return early. If we're turning
        off logging, unhook m_allEventsHook, and zero it out. Otherwise, add a
        hook for all events.
        (AccessibilityController::addNotificationListener):
        Use m_notificationsEventHook rather than m_allEventsHook.

2011-07-18  Eric Seidel  <eric@webkit.org>

        webkit-patch apply-attachment does not work when not called from the root of the checkout
        https://bugs.webkit.org/show_bug.cgi?id=64751

        Unreviewed.  Just updating unit test results after bug 64751.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:

2011-07-18  Adam Barth  <abarth@webkit.org>

        simplejson has trouble on chromium-linux
        https://bugs.webkit.org/show_bug.cgi?id=64757

        Reviewed by Eric Seidel.

        Use the native JSON, if available.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2011-07-18  Ojan Vafai  <ojan@chromium.org>

        update the flakiness dashboard to understand the new platforms/formats in test_expectations
        https://bugs.webkit.org/show_bug.cgi?id=64743

        Reviewed by Adam Barth.

        The test expectations format changed a long time ago and the flakiness dashboard
        was never updated to match.

        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        * TestResultServer/static-dashboards/timeline_explorer.html:

2011-07-18  Eric Seidel  <eric@webkit.org>

        webkit-patch apply-attachment does not work when not called from the root of the checkout
        https://bugs.webkit.org/show_bug.cgi?id=64751

        Reviewed by Adam Barth.

        Last week I removed a os.chdir in EnsureWorkingDirectoryClean, which
        is a step that we run for most commands (as one of the earliest steps).
        EnsureWorkingDirectoryClean was incorrectly calling os.chdir to change
        the CWD to the checkout root.  This magically made a bunch of otherwise
        wrong code work.

        When I realized that apply-attachment no longer worked as expected today,
        I went and fixed the bug, then realizing that we were not testing
        what the cwd was when running various commands.  I fixed our MockExecutive
        to always log what the cwd is and fixed a whole bunch of places
        where we needed to be setting the cwd.

        Hopefully this will solve our cwd problems once and for-all, and webkit-patch
        will again correctly work when called from any directory (including outside
        of a webkit checkout).

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/workspace_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        * Scripts/webkitpy/tool/steps/build.py:
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        * Scripts/webkitpy/tool/steps/editchangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/update.py:

2011-07-18  Adam Barth  <abarth@webkit.org>

        Increase information garden-o-matic information density by switching to a table
        https://bugs.webkit.org/show_bug.cgi?id=64642

        Reviewed by Dimitri Glazkov.

        The old layout couldn't handle the large number of failures we had
        today.  This patch switches garden-o-matic to a table-based layout,
        which can handle many more failures gracefully.  (I expect we'll need
        more UI iterations.)

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-18  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to determine when compile breaks
        https://bugs.webkit.org/show_bug.cgi?id=64190

        Reviewed by Dimitri Glazkov.

        This patch adds a red-ish box to the top of the page whenever there is
        a compile error on the bots.  The box automatically opens and closes as
        appropriate and links to the waterfall display.  In the future, we
        might want to compute a regression range.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/config.js:
            - Add the build-only bots to the config.  We use these to check
              whether the build failed, which is faster than waiting for the
              tester bots to cycle.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
            - Add DOM for the alert bar.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
            - CSS to support the alert bar.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
            - Wiring up events to poll the buildbot to see whether compile has
              failed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
            - Infrastructure for fetching and parsing the buildbot status JSON
              blob.  This code could be better factored for testability.  :(
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
            - UI for displaying compile errors.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r91132 and r91135.
        http://trac.webkit.org/changeset/91132
        http://trac.webkit.org/changeset/91135
        https://bugs.webkit.org/show_bug.cgi?id=64681

        Broke GTK and Chromium debug bots (Requested by rniwa on
        #webkit).

        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::~AccessibilityController):
        (logEventProc):
        (AccessibilityController::setLogAccessibilityEvents):
        (AccessibilityController::addNotificationListener):

2011-07-17  Philippe Normand  <pnormand@igalia.com>

        test-webkitpy failing with Python 2.5
        https://bugs.webkit.org/show_bug.cgi?id=64594

        Reviewed by Eric Seidel.

        Updated simplejson to version 2.1.6 that fixes an issue when
        dumping slashes. Also use cgi.parse_qs instead of the urlparse
        version to be compatible with Python2.5. Verified the fix with
        test-webkitpy on python 2.5 and python 2.6.

        * Scripts/webkitpy/thirdparty/simplejson/README.txt:
        * Scripts/webkitpy/thirdparty/simplejson/__init__.py:
        * Scripts/webkitpy/thirdparty/simplejson/_speedups.c:
        (json_PyOS_string_to_double):
        (_convertPyInt_AsSsize_t):
        (_convertPyInt_FromSsize_t):
        (ascii_escape_char):
        (ascii_escape_unicode):
        (ascii_escape_str):
        (raise_errmsg):
        (join_list_unicode):
        (join_list_string):
        (_build_rval_index_tuple):
        (scanstring_str):
        (scanstring_unicode):
        (py_scanstring):
        (py_encode_basestring_ascii):
        (scanner_dealloc):
        (scanner_traverse):
        (scanner_clear):
        (_parse_object_str):
        (_parse_object_unicode):
        (_parse_array_str):
        (_parse_array_unicode):
        (_parse_constant):
        (_match_number_str):
        (_match_number_unicode):
        (scan_once_str):
        (scan_once_unicode):
        (scanner_call):
        (scanner_new):
        (scanner_init):
        (encoder_new):
        (encoder_init):
        (encoder_call):
        (_encoded_const):
        (encoder_encode_float):
        (encoder_encode_string):
        (_steal_list_append):
        (encoder_listencode_obj):
        (encoder_listencode_dict):
        (encoder_listencode_list):
        (encoder_dealloc):
        (encoder_traverse):
        (encoder_clear):
        (init_speedups):
        * Scripts/webkitpy/thirdparty/simplejson/decoder.py:
        * Scripts/webkitpy/thirdparty/simplejson/encoder.py:
        * Scripts/webkitpy/thirdparty/simplejson/ordered_dict.py: Added.
        * Scripts/webkitpy/thirdparty/simplejson/scanner.py:
        * Scripts/webkitpy/thirdparty/simplejson/tool.py: Added.
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:

2011-07-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Rename ModifierMatcher to SpecificityCalculator.
        https://bugs.webkit.org/show_bug.cgi?id=64660

        It's a little longer than before, but it is much clearer.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Renamed and adjusted
            all callsites, also rewrote the comments.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Adjusted callsites
            and renamed tests.

2011-07-15  Adam Barth  <abarth@webkit.org>

        gardening server should proxy buildbot status for garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=64588

        Reviewed by Eric Seidel.

        This information will be used to detect build breaks.  I took this
        opportunity to make ChromiumBuildBot non-static.

        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:

2011-07-15  Julien Chaffraix  <jchaffraix@webkit.org>

        [NRWT] Add support for --no-http
        https://bugs.webkit.org/show_bug.cgi?id=64564

        Reviewed by Dirk Pranke.

        Added support for --no-http, which disables both HTTP and websockets tests.
        It also matches the old-run-webkit-tests behavior if --force is used.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        Fixed HTTP_SUBDIR and WEBSOCKET_SUBDIR as tests do not start with a leading separator.
        We check if --no-http is set and add the HTTP / websockets tests to the skipped list prior to looking
        at the expectation file. Fixed the  _test_requires_lock function to use the same code path to determine
        what is worth have an HTTP lock as --no-http to avoid badness.

        * Scripts/webkitpy/layout_tests/port/test.py: Added 2 new tests to our mock filesystem to validate that
        we do skip properly HTTP / websocket tests inside platform/.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        Added tests that we properly skip all the tests.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        Added checks for the command line arguments.

2011-07-13  Jon Honeycutt  <jhoneycutt@apple.com>

        Focus and selection events are not fired when a <select>'s selection
        changes
        https://bugs.webkit.org/show_bug.cgi?id=64504
        <rdar://problem/9319881>

        Reviewed by Alice Liu.

        * DumpRenderTree/AccessibilityController.h:
        Added m_notificationsEventHook for addNotificationListener().
        m_allEventsHook will now be used for setLogAccessibilityEvents().

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::AccessibilityController):
        Initialize m_notificationsEventHook.
        (AccessibilityController::~AccessibilityController):
        Turn off logging of all accessibility events. If
        m_notificationsEventHook is non-null, unhook it.
        (logEventProc):
        Add handling of EVENT_OBJECT_SELECTION.
        (AccessibilityController::setLogAccessibilityEvents):
        If the state of logging is not changing, return early. If we're turning
        off logging, unhook m_allEventsHook, and zero it out. Otherwise, add a
        hook for all events.
        (AccessibilityController::addNotificationListener):
        Use m_notificationsEventHook rather than m_allEventsHook.

2011-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Refactor TestExpectationModel to use TestExpectationLine as data item.
        https://bugs.webkit.org/show_bug.cgi?id=64635

        This is a bit largish in scope. Does the following things:

        1) Adds "path" member to TestExpectationLine to hold normalized path to test, computed at parsing,
           and changes code that used Port.normalize_test_name to rely on TestExpectationLine.path. As a result, TestExpectationModel no longer
           needs to have any port knowledge.

        2) Adds "create_passing_expectation" class method to TestExpectationLine to generate a pristine passing expectation out of a test name,
           and changes TestExpectations._process_tests_without_expectations to use it, thus eliminating the need for a special API entry point.
           Now all expectations are added to the model in the same way!

        3) Changes TestExpectationModel's main test index to store a tuple consisting of line number and TestExpectationLine instance.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Refactored code.

2011-07-15  Adam Roben  <aroben@apple.com>

        Teach TestFailures how to detect interrupted build steps

        Fixes <http://webkit.org/b/64619> TestFailures page thinks all tests passed in
        http://build.webkit.org/builders/SnowLeopard%20Intel%20Release%20(WebKit2%20Tests)/builds/13401

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): If the build step has a result code of 4, the
        build step was interrupted. Treat it as an error (by returning a failureCount of -1).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js:
        Added a test for the above.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Bumped the cache version to evict old, buggy
        cache data that was afflicted by the above bug.

2011-07-15  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests crashes on Apple's Windows port when trying to launch Apache
        https://bugs.webkit.org/show_bug.cgi?id=64533

        Reviewed by Adam Roben.

        Blind removal of Chromium-specific code (now that Chromium does not use this file).

        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:

2011-07-15  Adam Roben  <aroben@apple.com>

        Make TestFailures's list of possibly-flaky tests not so tall

        Fixes <http://webkit.org/b/64618> TestFailures page's list of flaky tests takes up way too
        much room

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        Removed a no-longer-used .flakiness-example-separator selector.

        (#failure-history > li):
        (#possibly-flaky-tests > li):
        (#failure-history > li, #possibly-flaky-tests > li):
        Use a lot less padding for the possibly-flaky tests.

2011-07-15  Tony Chang  <tony@chromium.org>

        [chromium] land linux selection color layout test
        https://bugs.webkit.org/show_bug.cgi?id=64631

        Reviewed by Ojan Vafai.

        I had removed this code in r76620 because I thought it wasn't used.
        Turns out there was a layout test in the chromium tree that never
        got migrated that used it.  Re-add the code and land the layout
        test (I will remove it from the chromium tree soon).

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

2011-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Revert http://trac.webkit.org/changeset/91091, since Python 2.5
        does not support enumerate() start argument.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Reverted.

2011-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Clean up test_expectations.py after refactorings.
        https://bugs.webkit.org/show_bug.cgi?id=64620

        * Renamed all variables holding TestExpectationLine to expectation_line to avoid confusion with
          its sub-part, the actual expectation.
        * Renamed all references to options to modifier to eliminate dual terminology.
        * Made a bunch of parser constants and changed all callsites to use them.
        * Various other minor clean-ups.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Cleaned up stuff.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Changed callsites after cleanup.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py: Ditto.

2011-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Move expectation parsing code to TestExpectationParser.
        https://bugs.webkit.org/show_bug.cgi?id=64605

        This is a somewhat mechanical move, with two interesting bits:
        
        1) TestExpectationParser.parse methods renamed to tokenize, to better
        reflect what they do

        2) TestExpectationLine now carries all of its info, from tokens to parsed data,
        and even the list of tests that it matches (a line may refer to more than one test).

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Moved parsing-related TestExpectaions methods
            to TestExpectationParser, added more members to TestExpectationLine to carry parsed info, renamed existing parse methods
            to "tokenize", changed callsites to use new code.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Changed unit tests to reflect renames.

2011-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Switch to use Python enumerate function to enumerate line numbers.
        https://bugs.webkit.org/show_bug.cgi?id=64602

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Changed to use enumerate.

2011-07-15  Martin Robinson  <mrobinson@igalia.com>

        Build fixes for WebKit2. Ensure that all generated sources are
        on nodist primaries, that they are on forward declared variables
        so that BUILT_SOURCES is calculated properly and that zlib is 
        included during linking (for WOFF support).

        * WebKitTestRunner/GNUmakefile.am:

2011-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Store error and warning information on TestExpectationLine.
        https://bugs.webkit.org/show_bug.cgi?id=64565

        Keeping errors and warnings on the TestExpectationLine instance allows us to decouple storing errors
        from various parsing and validation mechanisms and have more flexibility in reporting and understanding the origin of the errors.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Added TestExpectationLine.warnings list to keep track of non-fatal errors,
            converted the code to add errors and warnings to corresponding TestExpectationLine instances, removed the code that used to store
            this info on TestExpectations. In the process, had to refactor ModifierMatcher a bit to take in a TestExpdectationLine instance.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Changed ModifierMatcher callsite.

2011-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Plumb the use of TestExpectationLine deeper, clean up.
        https://bugs.webkit.org/show_bug.cgi?id=64559

        Instead of carrying various bits of TestExpectationLine, plumb it down to its consumers,
        also cleaning up names and remove an unused TestExpectations._get_options_list member.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:

2011-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Remove the notion of TestExpectationLine.valid, start storing parsing errors in expectations themselves.
        https://bugs.webkit.org/show_bug.cgi?id=64554

        This moves us toward the world where errors are collected on the expectations, which allows us to
        easily enumerate them, keep association with the point of origin, and freely pass TestExpectationLine instances around.

        Also eliminate the validator idea, since validation is a context-dependent concept and has to be decoupled from initial
        parsing.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Removed TestExpectation.valid, validator,
            changed TestExpectationParser to collect errors in TestExpectationLine, refactored surrounding code.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Changed tests to accommodate changes.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py: Ditto.

2011-07-15  Adam Roben  <aroben@apple.com>

        Rename TestFailureBugForm to FailingTestsBugForm

        The new name will match better with a forthcoming FlakyTestBugForm class.

        Fixes <http://webkit.org/b/64598> TestFailures page's TestFailureBugForm class has a bad
        name

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm.js: Renamed from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailureBugForm.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm_unittests.js: Renamed from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailureBugForm_unittests.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        Updated for renames.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Ditto, and
        reordered <script>s to put files which others depend on for parsing first.

2011-07-15  Adam Barth  <abarth@webkit.org>

        NRWT stores the Chromium revision number in full_results.json
        https://bugs.webkit.org/show_bug.cgi?id=64586

        I have no earthly idea how to test this change.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/port/base.py:

2011-07-14  Ojan Vafai  <ojan@chromium.org>

        fix remaining style issues in the static-dashboards directory
        https://bugs.webkit.org/show_bug.cgi?id=64561

        Reviewed by Adam Barth.

        * TestResultServer/static-dashboards/aggregate_results.html:
        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        * TestResultServer/static-dashboards/timeline_explorer.html:
        * TestResultServer/static-dashboards/treemap.html:

2011-07-14  Yuta Kitamura  <yutak@chromium.org>

        WebSocket: Introduce pywebsocket-0.6b2
        https://bugs.webkit.org/show_bug.cgi?id=64534

        Reviewed by Kent Tamura.

        * Scripts/webkitpy/thirdparty/__init__.py:

2011-07-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Introduce TestExpectationsModel, split out of TestExpectations.
        https://bugs.webkit.org/show_bug.cgi?id=64531

        This is a simple split-and-make-work refactoring, a first step among many.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Moved all model-related members
            out of TestExpectations and into TestExpectationsModel.

2011-07-14  Eric Seidel  <eric@webkit.org>

        Move webkitpy off of loose mocks
        https://bugs.webkit.org/show_bug.cgi?id=64508

        Unreviewed.  Fixing a test which fails under test-webkitpy --all (but not in a normal run).

        * Scripts/webkitpy/common/checkout/scm/git.py:

2011-07-14  Adam Barth  <abarth@webkit.org>

        garden-o-matic should have a "rebaseline" button
        https://bugs.webkit.org/show_bug.cgi?id=64446

        Reviewed by Ojan Vafai.

        This patch adds a basic Rebaseline button that copies the baselines
        displayed in the results pane into the appropriate directory in your
        working copy.

        There are two main limitations:

        1) There is no UI for actually committing the baselines.

        2) The baselines are not optimized for redundancy (meaning you can have
           identical baselines in both chromium-mac and chromium-win).

        * Scripts/webkitpy/tool/commands/rebaseline.py:
            - Turns out we need to create the directory for the baseline if it doesn't exist yet.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/checkout.js:
            - Add an programatic API to call the server.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
            - Add the rebaseline button itself.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
            - Change the CSS so that the Rebaseline and Close buttons can
              appear in the normal order in the DOM.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
            - Bind the event and translate the parameters.
            - Hide/show the rebaseline button, as appropriate.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
            - Add some helpful utility functions for manipulating failure types.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:

2011-07-14  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION: webkit-patch roll-chromium-deps is broken
        https://bugs.webkit.org/show_bug.cgi?id=64568

        Reviewed by Dirk Pranke

        Use _filesystem.join.

        * Scripts/webkitpy/common/checkout/checkout.py:
        * Scripts/webkitpy/common/checkout/checkout_unittests.py:

2011-07-14  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Adding myself to the reviewers list; No review needed.

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

2011-07-14  Adam Roben  <aroben@apple.com>

        Don't use Element.prototype.classList in TestFailures

        Safari 5 doesn't support it.

        Fixes <http://webkit.org/b/64550> Can't expand flaky tests on TestFailures page in Safari 5

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (Element.prototype.hasStyleClass):
        (Element.prototype.addStyleClass):
        (Element.prototype.removeStyleClass):
        (Element.prototype.toggleStyleClass):
        Added these helper functions which simulate classList functionality.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities_unittests.js:
        Added. Tests for the above.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForPossiblyFlakyTests): Changed to use
        toggleStyleClass/hasStyleClass instead of classList.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        Added Utilities_unittests.js, and reordered the tested files to be in
        roughly dependency order (i.e., the lowest-level files are imported
        and tested first).

2011-07-14  Eric Seidel  <eric@webkit.org>

        NRWT doesn't store the svn revision in full_results.json on chromium-win
        https://bugs.webkit.org/show_bug.cgi?id=64492

        Unreviewed.  Just fixing my test-webkitpy regression.

        Fix the unit tests.  Unfortunately scm does not use a filesystem
        object so we can't control the result of detect_scm_system.
        When detect_scm_system would fail, we would log, which would
        cause all passing_run integration tests to fail.

        * Scripts/webkitpy/common/checkout/scm/scm.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-07-14  Eric Seidel  <eric@webkit.org>

        NRWT doesn't store the svn revision in full_results.json on chromium-win
        https://bugs.webkit.org/show_bug.cgi?id=64492

        Reviewed by Ojan Vafai.

        This should fix the bug.  Unfortunately this code is currently
        impossible to test since it's impossible to mock detect_scm_system at the
        moment.  I started re-writing scm.detection.py to be mockable, but decided that
        was best left for another day.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/port/base.py:

2011-07-14  Ojan Vafai  <ojan@chromium.org>

        fix coding style of dashboard_base.js
        https://bugs.webkit.org/show_bug.cgi?id=64545

        Reviewed by Adam Roben.

        The code changes to the files other than dashboard_base.js
        are just fallout from renaming globals in dashboard_base.js.

        * TestResultServer/static-dashboards/aggregate_results.html:
        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        * TestResultServer/static-dashboards/timeline_explorer.html:
        * TestResultServer/static-dashboards/treemap.html:

2011-07-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build after r90953.

        * WebKitTestRunner/GNUmakefile.am:

2011-07-14  Adam Barth  <abarth@webkit.org>

        garden-o-matic results pane should be more discoverable
        https://bugs.webkit.org/show_bug.cgi?id=64513

        Reviewed by Eric Seidel.

        This patch causes us to trigger the results pane on mouse clicks
        instead of mousein.  Also, handle the case of no results details more
        elegantly.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
            - Change the binding to "click".
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
            - Handle the "no results URLs" case explicitly instead of never
              calling the callback.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
            - Show a message when there are no result details to show.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-14  Adam Barth  <abarth@webkit.org>

        garden-o-matic should badge TIMEOUT failures
        https://bugs.webkit.org/show_bug.cgi?id=64435

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        (.regression .what a[draggable].TIMEOUT::before):
            - Add TIMEOUT.

2011-07-14  Adam Barth  <abarth@webkit.org>

        Fix Python exception blocking the commit-queue.

        * Scripts/webkitpy/common/checkout/scm/git.py:

2011-07-13  Eric Seidel  <eric@webkit.org>

        Move webkitpy off of loose mocks
        https://bugs.webkit.org/show_bug.cgi?id=64508

        Reviewed by Adam Barth.

        Using Mock has caused us more pain than help.
        It's possible that there was a cleaner way to use it
        (maybe Mock(class) instead of inheriting from it?).
        But for now, I've removed all uses of Mock from mocktool.py.

        I also moved run_command into the only 3 files which call it
        instead of leaving the deprecated method in executive.py.

        I changed various direct calls to os.* to use filesystem instead.

        * Scripts/webkitpy/common/checkout/checkout.py:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/cleanworkingdirectory_unittest.py:
        * Scripts/webkitpy/tool/steps/ensurelocalcommitifneeded.py:

2011-07-13  Eric Seidel  <eric@webkit.org>

        NRWT doesn't store the svn revision in full_results.json on chromium-win
        https://bugs.webkit.org/show_bug.cgi?id=64492

        Reviewed by Adam Barth.

        Add a warning message in the revision='' case to help us diagnose
        what's going wrong on the bot.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2011-07-13  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests: print baseline search path as part of config output
        https://bugs.webkit.org/show_bug.cgi?id=64499

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:

2011-07-13  Adam Barth  <abarth@webkit.org>

        gardening server should have an API for parsing changelogs
        https://bugs.webkit.org/show_bug.cgi?id=64495

        Reviewed by Eric Seidel.

        This patch exposes much of the same information from CommitInfo in a
        dictionary form, which is easier to send over-the-wire as JSON to the
        frontend.

        * Scripts/webkitpy/common/checkout/checkout.py:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:

2011-07-13  Eric Seidel  <eric@webkit.org>

        REGRESSION: GitTestWithMock.test_create_patch fails
        https://bugs.webkit.org/show_bug.cgi?id=62945

        Reviewed by Daniel Bates.

        I was not able to reproduce the exact failure seen in the bug,
        however this test was failing on my machine for other reasons.

        I went through and did an audit of our run_command usage, it's
        entirely in scm classes after this change.  (Not surprising given
        that scm.py was the second file ever created in webkit.py.)

        The real bug I'm fixing here is that we were setting executive.should_log
        when the value had changed to executive._should_log.  Now we set the right one
        and the test works again.

        * Scripts/webkitpy/common/checkout/checkout.py:
        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:

2011-07-13  Ilya Sherman  <isherman@chromium.org>

        Fix WTF header guard style check
        https://bugs.webkit.org/show_bug.cgi?id=64488

        Reviewed by David Levin.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Verify that we don't *always* suggest "WTF_" as a prefix

2011-07-13  Ojan Vafai  <ojan@chromium.org>

        bring flakiness_dashboard.html closer to webkit style
        https://bugs.webkit.org/show_bug.cgi?id=64477

        Reviewed by Adam Barth.

        * TestResultServer/static-dashboards/dashboard_base.js:
        Fix bad variable name that would hit only when running the tests.
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        No code/logic changes. All moving/removing brackets, indents and moving things
        to one line.

2011-07-13  Xan Lopez  <xlopez@igalia.com>

        [GTK] Fix distcheck

        Reviewed by Martin Robinson.

        * WebKitTestRunner/GNUmakefile.am: mark built sources as nodist.

2011-07-13  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed fix. Add a "\n" to a printf that somehow got lost.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dumpApplicationCacheQuota):

2011-07-13  Joseph Pecoraro  <joepeck@webkit.org>

        ApplicationCache Quota Output is Flakey
        https://bugs.webkit.org/show_bug.cgi?id=64410

        Reviewed by Alexey Proskuryakov.

        Unify the delegate logging for reaching application cache
        quotas. Truncate the space needed to the nearest 10000
        for less flakey test output. This also better supports
        printing NSUInteger on non-64 bit systems by casting to
        an unsigned long.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:exceededApplicationCacheOriginQuotaForSecurityOrigin:totalSpaceNeeded:]):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dumpApplicationCacheQuota):

2011-07-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Remove unused TestExpectations._overrides.
        https://bugs.webkit.org/show_bug.cgi?id=64470

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Removed unused member.

2011-07-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Introduce TestExpectationSerializer.list_to_string.
        https://bugs.webkit.org/show_bug.cgi?id=64462

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Added list_to_string and change the relevant callsite to use it.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Added tests for it.

2011-07-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Consolidate expectations parsing code.
        https://bugs.webkit.org/show_bug.cgi?id=64460

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Folded TestExpectationParser._split_expectation_string into TestExpectationParser.parse.

2011-07-12  Brent Fulgham  <bfulgham@webkit.org>

        Standardize WinCairo conditionalized code under PLATFORM macro.
        https://bugs.webkit.org/show_bug.cgi?id=64377

        Reviewed by Maciej Stachowiak.

        Update compile-time conditions that had previously used #ifdef
        of WIN_CAIRO to consistently use PLATFORM(WIN_CAIRO).

        * DumpRenderTree/config.h: Switch to PLATFORM(WIN_CAIRO)
        * DumpRenderTree/win/DumpRenderTreeCairo.vsprops: Remove redundant
          define of WIN_CAIRO=1.
        * DumpRenderTree/win/DumpRenderTreeDebugCairoCFLite.vsprops: Add
          WinCairo.vsprops to set (to match Release build).

2011-07-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Eliminate TestExpectationsFile.
        https://bugs.webkit.org/show_bug.cgi?id=64458

        Turns out, we can just use a Python list.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Folded TestExpectationsFile.append into TestExpectationParser.parse_list,
            removed TestExpectationsFile.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Moved tests to better reflect new names, removed iterator test,
            since there's no more custom iterator machinery.

2011-07-13  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, added my other email addresses.

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

2011-07-13  Adam Barth  <abarth@webkit.org>

        Folks should only be listed once.

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

2011-07-13  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, adding myself as Reviewer.

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

2011-07-13  Adam Barth  <abarth@webkit.org>

        Fix flickering bug introduced by my previous patch.  I forgot to change
        the name of the class everywhere.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:

2011-07-12  Philippe Normand  <pnormand@igalia.com>

        [GTK] media/media-blocked-by-willsendrequest.html fails
        https://bugs.webkit.org/show_bug.cgi?id=63699

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (willSendRequestCallback): Abort the request if explicitely asked
        by the LayoutTestController's willSendRequestReturnsNull() function.

2011-07-13  Adam Barth  <abarth@webkit.org>

        Remove "Dismiss" button from garden-o-matic butterbar
        https://bugs.webkit.org/show_bug.cgi?id=64443

        Reviewed by Dimitri Glazkov.

        We don't have any persistent butter bar messages yet, so the dismiss
        button is premature (and fairly heavy, visually).

        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:

2011-07-13  Adam Barth  <abarth@webkit.org>

        Refine garden-o-matic status pane
        https://bugs.webkit.org/show_bug.cgi?id=64442

        Reviewed by Dimitri Glazkov.

        This patch makes two improvements to the status pane:

        1) We only query the server for failure types that we're expecting.
           This dramatically reduces the number of HTTP requests, making
           loading the status pane faster.

        2) The status pane now displays which test and which builder it is
           showing results for.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/config.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:

2011-07-13  Adam Barth  <abarth@webkit.org>

        garden-o-matic should show test results
        https://bugs.webkit.org/show_bug.cgi?id=64440

        Reviewed by Adam Roben.

        This patch introduces the results detail pane, which appears at the
        bottom of the window and contains test results from the bots.
        Currently, you can activate the pane by mousing over one of the builder
        names associated with a failing test.

        This is just a first iteration of the UI.  There's no way to resize or
        zoom in on elements of the details pane, and images likely aren't sized
        correctly, but it's a place to start.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/config.js:
            - Add constants for our data attributes so we don't typo them!
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
            - Add DOM structure for the details pane.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
            - Bind events for showing and hiding the details pane.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
            - Reduce the number of result types that we query for to avoid
              overfilling the details pane.  We'll probably need another
              solution here in the long-term.  For example, we could use tabs
              to pack more results into the pane.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html:
            - Now that we're using the config package during testing, we need
              to include it in the testing HTML.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:
            - Change the DOM structure of the results detail to make it fit
              nicely in the details pane (rather than flowing freely in the
              body, as it did before).

2011-07-13  Adam Roben  <aroben@apple.com>

        Make TestFailures show every time a possibly-flaky test failed, but hide it by default

        It's useful to be able to see every time a flaky test failed to see whether it failed the
        same way every time. But doing so takes a lot of space, so the list of failures is now
        collapsed by default and can be revealed using a disclosure triangle.

        Fixes <http://webkit.org/b/64455> TestFailures page doesn't show as much information for
        flaky tests as I would like, even though the page is already so long

        Reviewed by Dimitri Glazkov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector.js:
        (FlakyLayoutTestDetector.prototype.allFailures): Replaced flakinessExamples with this
        function. Now returns all failures for the given test.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector_unittests.js:
        Added. This just contains some simple tests of the FlakyLayoutTestDetector class. We'll add
        more over time.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        (LayoutTestHistoryAnalyzer.prototype.start): Updated the documentation comment to reflect
        that we no longer return passing builds for possibly-flaky tests.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (.existing-bugs-list, .suspect-revisions-list, .flakiness-examples-list): Make the list of
        flakiness examples small, too, since it can get quite long.

        (.disclosure-triangle):
        (.expanded > .disclosure-triangle):
        Simple styles for the disclosure triangle.

        (.flakiness-examples-list): Collapse the list by default.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder): Pass the total number of builds analyzed to
        _domForPossiblyFlakyTests.
        (ViewController.prototype._domForPossiblyFlakyTests): Put a disclosure triangle to the left
        of each test name, and the number of failures to the right. When the disclosure triangle is
        clicked for the first time, we build up the list of failures and expand the element. After
        that we just collapse or expand the element on subsequent clicks.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        Pulled in new tests.

2011-07-13  Adam Roben  <aroben@apple.com>
        
        Teach TestFailures to understand NRWT's output when it exits early due to too many failures

        Fixes <http://webkit.org/b/64456> TestFailures page reports way too many failures when NRWT
        exits early

        Reviewed by Dimitri Glazkov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Relaxed the "Exiting early" test not to require
        it to be at the beginning of the line, since NRWT prints a bunch of junk earlier in the
        line. Tightened up the regex that's used to parse the number of failing tests to require the
        leading number to be followed by whitespace so that we won't parse the "2011" in
        "2011-07-13" as a number of failures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js:
        Added a test for the above.

2011-07-12  Dimitri Glazkov  <dglazkov@chromium.org>

        Extract model-like TestExpectationLine and TestExpectationFile from TestExpectations.
        https://bugs.webkit.org/show_bug.cgi?id=64386

        This is the first step in converting TestExpectations to a real model.
        * TestExpectationsLine represents a line in the test_expectations.txt file, and
        * TestExpectationsFile represents the file, which is a collection of lines.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:

2011-07-13  Xan Lopez  <xlopez@igalia.com>

        [GTK] Do not grab focus too early in DRT.

        Reviewed by Gustavo Noronha.

        It causes a layout to happen and a progress signal to be emitted
        since r90900, but at this point we don't have a
        LayoutTestController object and we'll eventually crash. Since we
        already grab focus at the beginning of runTest() this is
        redundant, so get rid of it to fix the crash.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (main): remove call to grab_focus

2011-07-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r90893 and r90894.
        http://trac.webkit.org/changeset/90893
        http://trac.webkit.org/changeset/90894
        https://bugs.webkit.org/show_bug.cgi?id=64441

        NRWT still doesn't work on qt-mac platform (Requested by Ossy
        on #webkit).

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-07-13  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] NRWT should pick up the right httpd config file
        https://bugs.webkit.org/show_bug.cgi?id=64086

        * Scripts/run-webkit-tests: Enable NRWT on qt-mac platform after r90810.
        (useNewRunWebKitTests):

2011-07-12  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:exceededApplicationCacheOriginQuotaForSecurityOrigin:totalSpaceNeeded:]):
        Cast the NSUInteger value to unsigned long to match the format specifier.

2011-07-12  Adam Barth  <abarth@webkit.org>

        Improve garden-o-matic UI when the bots fail to report revision numbers
        https://bugs.webkit.org/show_bug.cgi?id=64427

        Reviewed by Dimitri Glazkov.

        At least Win (dbg)(2) seems to fail to report the SVN revision number
        in full_results.json.  This patch makes garden-o-matic more robust to
        missing revision numbers.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-12  Adam Barth  <abarth@webkit.org>

        Adjust garden-o-matic layout to use fewer lines
        https://bugs.webkit.org/show_bug.cgi?id=64422

        Reviewed by Ojan Vafai.

        This patch effectively merges the test name line with the list of
        builders on which the test fails.  Each test failure now occupies two
        lines instead of three.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:

2011-07-12  Adam Barth  <abarth@webkit.org>

        garden-o-matic should label tests failures of new tests as such
        https://bugs.webkit.org/show_bug.cgi?id=64421

        Reviewed by Ojan Vafai.

        Also, we shouldn't dim failures of new tests, even if we've only seen
        them once because they're likely to be real problems that need
        attention.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/base_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/checkout.js: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/checkout_unittests.js: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-07-12  Adam Barth  <abarth@webkit.org>

        garden-o-matic should display how many times we've seen a failure
        https://bugs.webkit.org/show_bug.cgi?id=64417

        Reviewed by Ojan Vafai.

        This patch adds some UI to display how many times we've seen a given
        failure, which can be helpful for determining whether that failure is a
        real failure or a flaky test.

        When a failure has only been seen once (i.e., only a single run on a
        single bot), we set the opacity of to 50% to avoid distracting the
        gardener.

        This patch also refactors the failure walker to have a simpler API
        internally by moving from an object-oriented paradigm to a functional
        paradigm.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-12  Chris Rogers  <crogers@google.com>

        Enable Web Audio for chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=64409

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2011-07-12  Adam Barth  <abarth@webkit.org>

        Tweak some UI in garden-o-matic now that the tree actually has a
        failure and I can see what this all looks like.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-12  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed. Skipping a few tests which fail due to differing output
           Unit tests shouldn't be hitting the disk anyway.  It's possible Config should move off of Port and onto Tool/Host directly.
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-07-12  Adam Roben  <aroben@apple.com>

        Teach TestFailures to recognize when run-webkit-tests gets killed by buildbot

        Fixes <http://webkit.org/b/64358> TestFailures page thinks all tests passed in
        http://build.webkit.org/builders/Windows%207%20Release%20(Tests)/builds/14672

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): If run-webkit-tests exited with a non-zero
        exit status but we didn't find any failure counts, assume that there was some error that
        caused run-webkit-tests to die early (like being killed by buildbot due to a timeout).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js:
        Added a new test that shows that we get a failingTestCount of -1 when run-webkit-tests dies
        early.
        (runGetNumberOfFailingTestsTest): Moved most code here from the only pre-existing test in this
        file.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Bump the cache number so old cached data that was
        tainted by the bug fixed in this patch will be evicted.

2011-07-12  Adam Barth  <abarth@webkit.org>

        cr-linux-ews complains about tests that aren't actually failing
        https://bugs.webkit.org/show_bug.cgi?id=64367

        The underlying problem here is that full_results.json doesn't have
        enough information to determine whether a given test result was
        expected because whether an actual result is expected depends on
        whether full_results.json was generated duing a test run that included
        pixel tests.

        The right long-term solution is to make full_results.json a complete
        description of what happened durning a test run.  In this patch
        however, to stop the spam, this patch makes the jsonresultsparser
        ignore pixel failures.

        (I'm landing this patch unreviewed in order to stop the bots from
        spamming.  I'll happily address any review comments in a follow-up
        patch.)

        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:

2011-07-12  Adam Barth  <abarth@webkit.org>

        Re-work garden-o-matic UI to begin to look like the mocks
        https://bugs.webkit.org/show_bug.cgi?id=64334

        Reviewed by Dimitri Glazkov.

        This patch changes how we display failures to be more like the mock the
        dglazkov made. We now can display the same information much more
        compactly.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/base_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-07-11  Adam Roben  <aroben@apple.com>

        Extract TestFailures's bug-filing code into two new classes

        Fixes <http://webkit.org/b/64300> TestFailures page's new-bug-filing code is a mess!

        Reviewed by Darin Adler and Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Buildbot.js:
        (Buildbot.prototype.resultsDirectoryURL): Changed to return a URI-encoded URL. Otherwise the
        URL isn't valid (and it's harder to mock this function).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Buildbot_unittests.js:
        Added. Just tests the above change (for now).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js:
        Added a license header, enclosed everything in a closure to avoid polluting the global
        namespace, changed the test name to actually describe the passing condition, and replaced
        uses of equals() with equal(). (The latter is the actual name of the function, and matches
        deepEqual, etc.)

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm.js: Added.
        (NewBugForm): This class knows how to construct a <form> used for filing new bugs in
        Bugzilla based on some parameters.
        (NewBugForm.prototype.domElement): Creates and returns the <form> element. Code came from
        ViewController.prototype._domForNewAndExistingBugs.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm_unittests.js:
        Added. Tests the above code.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailureBugForm.js: Added.
        (TestFailureBugForm): This class knows how to construct a <form> element used for filing new
        bugs specifically about test failures. Code came from
        ViewController.prototype._domForNewAndExistingBugs.
        (TestFailureBugForm.prototype.domElement): Slightly customizes the <form> element returned
        by NewBugForm.
        (TestFailureBugForm.prototype._computeOperatingSystem):
        (TestFailureBugForm.prototype._computePlatform):
        (TestFailureBugForm.prototype._createBugTitle):
        (TestFailureBugForm.prototype._failingResultsHTMLURL):
        (TestFailureBugForm.prototype._failingRevision):
        (TestFailureBugForm.prototype._passingRevision):
        (TestFailureBugForm.prototype._regressionRangeString):
        Code came from ViewController.prototype._domForNewAndExistingBugs. I broke it out into
        separate functions to break up the rat's nest a bit.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailureBugForm_unittests.js:
        Added. Tests the above code.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForNewAndExistingBugs): Moved code from here to
        TestFailureBugForm/NewBugForm, and changed this code to use a TestFailureBugForm.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in
        NewBugForm/TestFailureBugForm.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        Added new tests and required files.

2011-07-12  Adam Roben  <aroben@apple.com>

        Test that no intermediate WTF::Strings are created when concatenating with string literals

        Test for <http://webkit.org/b/63330> Concatenating string literals and WTF::Strings using
        operator+ is suboptimal

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp: Added.
        (TestWebKitAPI::TEST): Test that a bunch of different string concatenation expressions don't
        create any intermediate WTF::Strings while they're being evaluated.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Added new file.

2011-07-12  Eric Seidel  <eric@webkit.org>

        [Qt] NRWT should pick up the right httpd config file
        https://bugs.webkit.org/show_bug.cgi?id=64086

        Reviewed by Adam Barth.

        This is more fall-out from the Port class inappropriately encapsulating
        both platform and port knowledge.  We need to split out some of this
        platform knowledge into a separate class which can be better shared
        between ports.

        The fix was to move all the _path_to_apache_config_file logic down
        into the WebKitPort baseclass so that all of the ports can find the
        right apache config file, regardless of what platform they may be running on.

        I did not move this down into base.Port (even though I considered it).
        Chromium duplicates some of this logic, but since they have separate
        subclasses for each port-OS combination (e.g. ChromiumMac, ChromiumWin)
        they wouldn't notice the change.  Eventually we'll move this logic
        out of Port entirely, and then it will be shared by all ports.

        I also cleaned up the http-config logic for ORWT while I was there,
        although since we're killing that code, I'm happy to revert that part
        of the change if changing it is viewed as needlessly risky.

        During this cleanup, I noticed that no ports use the "default" httpd.conf
        which is left over from Mac OS X Tiger (and old linux distros) which used
        Apache 1.3.  I've removed httpd.conf (and associated support in ORWT) since
        we no longer support any ports which use this httpd.conf.

        * Scripts/webkitperl/httpd.pm:
        (getHTTPDConfigPathForTestDirectory):
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:

2011-07-11  Hironori Bono  <hbono@chromium.org>

        Reviewed by Adam Roben.

        Implement layoutTestController.setTextDirection for WebKit2 and Windows.
        https://bugs.webkit.org/show_bug.cgi?id=61931

        This change implements layoutTextController.setTextDirection for WebKit2
        and Windows so we can run a layout test added by r87770 on them. Each
        implementation adds a wrapper function for Editor::setBaseWritingDirection()
        so LayoutTestController can call it.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setTextDirection): Implemented the binding function
        for layoutTestController.setTextDirection (Windows).
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Added a binding function for layoutTestController.setTextDirection (WebKit2).
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp: ditto.
        (WTR::LayoutTestController::setTextDirection):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: ditto.

2011-07-11  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] ImageDiff: Make sure gEcoreEvas is destroyed at the right time.
        https://bugs.webkit.org/show_bug.cgi?id=64293

        Reviewed by Kent Tamura.

        gEcoreEvas was being destroyed after shutdownEfl() was called, so the
        call to ecore_evas_free() failed.

        We now shut it down manually before shutdownEfl() is called.

        * DumpRenderTree/efl/ImageDiff.cpp:
        (main): Destroy gEcoreEvas before shutting down the EFL.

2011-07-11  Ryosuke Niwa  <rniwa@webkit.org>

        Make Chromium Mac and Linux tests bot core builders
        https://bugs.webkit.org/show_bug.cgi?id=63196

        Reviewed by Adam Barth.

        Added Chromium Mac and Linux Release Tests bots core builders.

        Also rearranged the order of bots so that test bots show up right next to
        respective builders.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-07-11  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Add code related to font management.
        https://bugs.webkit.org/show_bug.cgi?id=63989

        Reviewed by Kent Tamura.

        The added files are responsible for managing fontconfig and adding the
        fonts required by some layout tests to fontconfig's path.

        * DumpRenderTree/efl/FontManagement.cpp: Added.
        (getFontDirectories):
        (getFontFiles):
        (addFontDirectories):
        (addFontFiles):
        (addFontsToEnvironment):
        * DumpRenderTree/efl/FontManagement.h: Added.

2011-07-08  Dirk Pranke  <dpranke@chromium.org>

        nrwt: linting fixes
        https://bugs.webkit.org/show_bug.cgi?id=64225

        Reviewed by Eric Siedel.

        Miscellaneous linting fixes. The most notable change is that
        we add public attributes for user, executive, filesystem, and
        options on the Port object, so we don't have to refer to the
        "protected" versions all over the place".

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/controllers/message_broker.py:
        * Scripts/webkitpy/layout_tests/controllers/message_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-07-11  Ryosuke Niwa  <rniwa@webkit.org>

        webkit-patch roll-chromium-deps no longer works
        https://bugs.webkit.org/show_bug.cgi?id=64324

        Reviewed by James Robinson.

        Lower the minimum commit message length to 10.

        * Scripts/webkitpy/tool/steps/commit.py:

2011-07-11  Alice Boxhall  <aboxhall@chromium.org>

        Convert json_results_generator.py to output version 4 JSON.
        https://bugs.webkit.org/show_bug.cgi?id=60869

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-07-11  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [NRWT] Pixel tests do not work
        https://bugs.webkit.org/show_bug.cgi?id=64091

        Reviewed by Eric Seidel.

        Fix pixel test runs for GTK+ new-run-webkit-tests by exposing the
        path to the ImageDiff binary.

        * Scripts/webkitpy/layout_tests/port/gtk.py: Implement _path_to_image_diff.

2011-07-11  Dirk Pranke  <dpranke@chromium.org>

        Fix hang on win32 in a multiprocessing test that shouldn't have been running.

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-07-11  Adam Roben  <aroben@apple.com>

        Don't count leaks as test failures on TestFailures's front page

        As a bonus, this patch adds our first unit test.

        Fixes <http://webkit.org/b/64303> REGRESSION (r90489): TestFailures page says far more tests
        are failing on the Leaks bot than actually are

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Exclude lines containing "leak" when summing
        failure counts.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js:
        Added. Contains a simple test to show that leaks aren't counted as test failures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        Added. This is the test harness.

2011-06-14  Mike Stegeman  <mrstegeman@gmail.com>

        [GTK] Add API to allow setting local storage database path
        https://bugs.webkit.org/show_bug.cgi?id=62091

        Reviewed by Martin Robinson and Gustavo Noronha.

        Expose the path of the localStorage databases through a setting
        to allow HTML5 localStorage to be persistent. New setting is:
        html5-local-storage-database-path

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

2011-07-11  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to rebaseline tests
        https://bugs.webkit.org/show_bug.cgi?id=64186

        Reviewed by Eric Seidel.

        This patch contains a simple HTTP server binding for the
        rebaseline-test command.  The frontend will appear in another patch.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:

2011-07-11  Adam Barth  <abarth@webkit.org>

        Add some basic UI for showing regression ranges
        https://bugs.webkit.org/show_bug.cgi?id=64243

        Reviewed by Eric Seidel.

        This UI is all temporary.  It exists mostly just to have some buttons
        to click to exercise the code.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-11  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to determine which revisions caused a given failure
        https://bugs.webkit.org/show_bug.cgi?id=64189

        Reviewed by Adam Roben.

        Walking the failure history looking for failures turns out to be
        slightly tricky because the network requests are asynchronous.
        Currently we do all the fetches serially and our cache is unbounded.
        We'll probably optimize both those parameters eventually.

        This patch also generalizes some functionality in the unit testing
        framework to make testing this sort of code easier.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:

2011-07-11  Adam Barth  <abarth@webkit.org>

        Add a webkit-patch command for rebaselining an individual test
        https://bugs.webkit.org/show_bug.cgi?id=64246

        Reviewed by Eric Seidel.

        This patch introduces a command that's able to rebaseline a single
        test.  Currently, the command works only with the build.chromium.org
        buildbots, but extending it to work with the build.webkit.org bots
        shouldn't be that hard.

        A complete rebaseling tool should also include an "optimize baselines"
        command (which moves/deletes baselines in order to reduce the number of
        expected results files), but that will come in a future patch.

        Really BuilderToPort should be merged into builders.py, but I'm going
        to save that for a future patch as well.  (We need to stop shaving yaks
        at some point.)

        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-07-11  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to roll out patches
        https://bugs.webkit.org/show_bug.cgi?id=64185

        Reviewed by Eric Seidel.

        This gardening server API is simply a binding to the rollout machinery
        already present in webkit-patch.

        * Scripts/webkitpy/tool/commands/gardenomatic.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py: Added.

2011-07-11  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][Mac] Unreviewed fix after r90746.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests): Really disable NRWT for qt-mac platform.

2011-07-11  Adam Roben  <aroben@apple.com>

        Teach TestFailures that ORWT's results.html file might be missing due to all tests passing

        There are three reasons why we might fail to fetch ORWT's results.html:
          - All tests passed, so no results.html was generated
          - Some error during the test run caused results.html not to be generated (e.g., ORWT
            timed out)
          - Some network error occurred when fetching results.html

        We were failing to account for the first possibility in some cases. For test runs before
        r89610, we first check build.webkit.org/json to determine how many tests failed and whether
        ORWT exited early due to too many failures; if all tests passed then we don't fetch
        results.html at all. r89610 changed ORWT to put information in results.html about exiting
        early due to too many failures, so we no longer needed to check build.webkit.org/json to get
        that information, and in r89619 I changed TestFailures to do just that. But I forgot that we
        still needed to check build.webkit.org/json to find out if all tests passed!

        Now, for test runs after r89610, we check results.html first, and then check
        build.webkit.org/json if we fail to fetch results.html. This lets us distinguish between all
        tests passing and the error cases.

        Fixes <http://webkit.org/b/64280> TestFailures page can't pinpoint that r90699 caused 13
        tests to fail on Windows 7 Release (WebKit2 Tests)

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Bumped the cache version so that old, buggy
        cached data will get evicted. We were marking builds where all tests passed as errors!
        (LayoutTestResultsLoader.prototype._fetchAndParseORWTResults): Added success/error callback
        parameters to the fetchAndParseResultsHTML helper function, and added a similar
        fetchNumberOfFailingTests function that fetches data from build.webkit.org/json (code came
        from later in the function). For test runs before r89610, we first check
        build.webkit.org/json then check results.html. For builds after r89610, we first check
        results.html and then check build.webkit.org/json if we couldn't fetch results.html.

2011-07-11  Csaba Osztrogonác  <ossy@webkit.org>

        new-run-webkit-tests does not support qt-arm or qt-4.8 results
        https://bugs.webkit.org/show_bug.cgi?id=64071

        [Qt] NRWT should pick up the right httpd config file
        https://bugs.webkit.org/show_bug.cgi?id=64086

        Reviewed by Zoltán Herczeg.

        * Scripts/run-webkit-tests: Disable NRWT for qt-mac, qt-arm and qt-4.8 platforms until fix.
        (useNewRunWebKitTests):

2011-07-11  Kenichi Ishibashi  <bashi@chromium.org>

        Add TestNetscapePlugIn/Tests/FormValue.cpp to DRT build files
        https://bugs.webkit.org/show_bug.cgi?id=64248

        Reviewed by Kent Tamura.

        * DumpRenderTree/DumpRenderTree.gypi: Added FormValue.cpp.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Ditto.
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro: Ditto.
        * GNUmakefile.am: Ditto.

2011-07-10  Kenichi Ishibashi  <bashi@chromium.org>

        Let plugins participate in form submission
        https://bugs.webkit.org/show_bug.cgi?id=13061

        Adds NPPVformValue support to the testing plugin.

        Reviewed by Anders Carlsson.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added FormValue.cpp
        * DumpRenderTree/TestNetScapePlugIn/Tests/FormValue.cpp: Added.
        (FormValue::FormValue): Ditto.
        (FormValue::NPP_GetValue): Ditto.

2011-07-11  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Tony Chang.

        Complete functions in filesystem.py
        https://bugs.webkit.org/show_bug.cgi?id=63528

        - missing text file functions added
        - functions sorted
        - removed 'append' optional parameters (were unused)
        - adapted filesystem_mock in the same way

        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/common/system/filesystem_unittest.py:

2011-07-10  Adam Barth  <abarth@webkit.org>

        Clean up style in fallback path calculation
        https://bugs.webkit.org/show_bug.cgi?id=64239

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2011-07-10  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Implement the rest of WTR::PlatformWebView
        https://bugs.webkit.org/show_bug.cgi?id=63630

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):

2011-07-10  Mark Rowe  <mrowe@apple.com>

        Teach build-webkit how to find the latest WebKitSystemInterface binary.

        * Scripts/build-webkit:

2011-07-09  Adam Roben  <aroben@apple.com>

        Teach TestFailures to abbreviate the examples of test flakiness

        These lists can get quite long, and it's not really helpful in most cases to have soooooo
        many examples of flakiness.

        Fixes <http://webkit.org/b/64203> Lists of flaky revisions on TestFailures page can get so
        long they're hard to navigate

        Reviewed by Dan Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector.js:
        (FlakyLayoutTestDetector.prototype.flakinessExamples): If we have more than a certain number
        of examples, replace the middle items with a separator.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (.flakiness-example-separator): Added styles for the separator.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForPossiblyFlakyTests): Use a vertical ellipsis to represent
        the separator.

2011-07-09  Dirk Pranke  <dpranke@chromium.org>

        nrwt: stack traces from worker-side exceptions aren't very useful inside test-webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=64218

        Reviewed by Eric Seidel.

        Exceptions aren't picklable and can't be sent across the
        manager/worker message queue without losing information. NRWT
        handles this by turning the stack trace into a set of strings,
        and logging the strings when we receive an exception from the
        worker. However, when you are running tests and something
        crashes on the worker side, test-webkitpy prints the
        manager-side stack trace, which is just confusing and useless.

        This patch changes the logic so that exceptions are passed
        through as-is when the worker and manager are in the same
        process (the --worker-model=inline option). This increases the
        code paths slightly but makes crashes much more useful.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/controllers/message_broker.py:
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-07-09  Darin Fisher  <darin@chromium.org>

        Eliminate bad dependency on gfx::Point.
        https://bugs.webkit.org/show_bug.cgi?id=64228

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/EventSender.cpp:
        (initMouseEvent):

2011-07-08  Ojan Vafai  <ojan@chromium.org>

        pull static dashboard files into the appengine server from the chromium repository
        https://bugs.webkit.org/show_bug.cgi?id=64208

        Reviewed by Dirk Pranke.

        These files belong in the WebKit repo since they are tied primarily to the webkit tests.
        They have some extra bits to support chromium's gtests, but that seems fine.
        Mainly, this will allow other WebKit hackers to hack on the dashboards.

        As a nice side-effect, we can now push the dashboard files when we do appengine pushes
        instead of the weird thing we used to do of pulling them from the Chromium repository
        and storing them in the appengine datastore. This allows for cleaning up a lot of code
        and will likely make the dashboards load a bit faster.

        The new JS files don't fully match WebKit style, but I'd like to clean that up in a
        followup patch if possible to maintain my sanity with this patch.

        * TestResultServer/app.yaml:
        * TestResultServer/handlers/dashboardhandler.py: Removed.
        * TestResultServer/handlers/menu.py:
        * TestResultServer/main.py:
        * TestResultServer/model/dashboardfile.py: Removed.
        * TestResultServer/static-dashboards/LICENSE.dygraph.txt: Added.
        * TestResultServer/static-dashboards/README.dygraph.txt: Added.
        * TestResultServer/static-dashboards/README.webtreemap.txt: Added.
        * TestResultServer/static-dashboards/aggregate_results.html: Added.
        * TestResultServer/static-dashboards/builders.js: Added.
        * TestResultServer/static-dashboards/dashboard_base.js: Added.
        * TestResultServer/static-dashboards/dygraph-combined.js: Added.
        * TestResultServer/static-dashboards/flakiness_dashboard.html: Added.
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js: Added.
        * TestResultServer/static-dashboards/timeline_explorer.html: Added.
        * TestResultServer/static-dashboards/treemap.html: Added.
        * TestResultServer/static-dashboards/webtreemap.css: Added.
        * TestResultServer/static-dashboards/webtreemap.js: Added.
        * TestResultServer/stylesheets/dashboardfile.css: Removed.
        * TestResultServer/stylesheets/menu.css:
        * TestResultServer/templates/dashboardfilelist.html: Removed.
        * TestResultServer/templates/menu.html:

2011-07-08  Adam Roben  <aroben@apple.com>

        Make TestFailures's list of flaky tests look more like the list of non-flaky tests

        Fixes <http://webkit.org/b/64204> TestFailures page's flaky tests list is ugly!

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (#failure-history, #possibly-flaky-tests): Expanded this rule to apply to the list of flaky
        tests.
        (#failure-history > li, #possibly-flaky-tests > li): Ditto, but moved the 50px left padding
        from here...
        (#failure-history > li): ...to here.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForPossiblyFlakyTests): Give the list an id attribute for
        styling purposes.

2011-07-08  Jeffrey Pfau  <jpfau@apple.com>

        Unreviewed, add myself as committer.

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

2011-07-08  Adam Barth  <abarth@webkit.org>

        TestResultsServer should keep old test results
        https://bugs.webkit.org/show_bug.cgi?id=64199

        Reviewed by Ojan Vafai.

        Having historical data will help us do failure archeology.

        * TestResultServer/handlers/testfilehandler.py:
        * TestResultServer/model/testfile.py:
        * TestResultServer/templates/showfilelist.jsonp: Added.

2011-07-08  Adam Roben  <aroben@apple.com>

        Remove commit-log-editor's dependency on Module::Load::Conditional

        This module isn't available in Perl 5.8.8 (the version used on Leopard).

        Fixes <http://webkit.org/b/64198> REGRESSION (r90583):
        webkitpy.common.checkout.checkout_unittest failing on Leopard

        Reviewed by Daniel Bates.

        * Scripts/commit-log-editor: Use the new loadTermReadKey() function instead of
        Module::Load::Conditional::can_load.
        (loadTermReadKey): Added. Tries to load Term::ReadKey and returns true if it's successful.

2011-07-08  Adam Roben  <aroben@apple.com>

        Make checkout_unittest more robust against files moving around

        Fixes <http://webkit.org/b/64197> checkout_unittest contains ugly, fragile code to find the
        Scripts directory

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CommitMessageForThisCommitTest.test_commit_message_for_this_commit): Instantiate a real SCM
        object and use it to get the path to the Scripts directory, rather than hard-coding the
        relative path from this file to Scripts.

2011-07-08  Adam Roben  <aroben@apple.com>

        Make TestFailures remember that run-webkit-tests timed out, even across reloads

        Fixes <http://webkit.org/b/64193> TestFailures page incorrectly thinks all tests passed in
        http://build.webkit.org/builders/Windows%207%20Release%20(Tests)/builds/14589 after a reload

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Store an "error" attribute in the cached data.
        When true, it indicates that there was an error retrieving the results for this build and
        that the errorCallback should be called.

2011-07-08  Adam Barth  <abarth@webkit.org>

        Teach garden-o-matic how to display test results
        https://bugs.webkit.org/show_bug.cgi?id=64141

        Reviewed by Ojan Vafai.

        This patch includes basic infrastructure for probing build.chromium.org
        for test results.  We only handle text and image tests, not anything
        complicated like reftests.  Also, we're using the revision/build
        independent results store on the server, so we're avoiding that
        complication for now.

        It's slightly hacky that we need to probe the server to see what kinds
        of results exist.  A better solution would be to add CORS support to
        the server or to use the local server to help.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-08  Dirk Pranke  <dpranke@chromium.org>

        REGRESSION(90419) NRWT's httpd locking is broken for --child-processes=1
        https://bugs.webkit.org/show_bug.cgi?id=64092

        Reviewed by Tony Chang.

        The code was incorrectly creating empty shards in the
        shard_in_two case.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:

2011-07-08  Adam Roben  <aroben@apple.com>

        Teach buildbot to figure out how many webkitpy/webkitperl tests failed

        Fixes <http://webkit.org/b/64192> It's hard to tell how many test-webkitpy/test-webkitperl
        tests failed when looking at build.webkit.org

        Reviewed by Eric Seidel.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (TestWithFailureCount): New class that represents a test build step which has an associated
        failure count. Eventually we should move more of our test classes to deriving from this.
        (TestWithFailureCount.countFailures): Method for subclasses to override to say how many
        failures occurred.

        (TestWithFailureCount.commandComplete):
        (TestWithFailureCount.evaluateCommand):
        (TestWithFailureCount.getText):
        (TestWithFailureCount.getText2):
        These were all based on RunGtkAPITests.

        (RunPythonTests): Changed to inherit from TestWithFailureCount.
        (RunPythonTests.countFailures): Parses the test-webkitpy output looking for the count of
        failures.
        (RunPerlTests): Changed to inherit from TestWithFailureCount.
        (RunPerlTests.countFailures): Parses the test-webkitperl output looking for the count of
        failures.

2011-07-08  Adam Roben  <aroben@apple.com>

        Ensure $CHANGE_LOG_EMAIL_ADDRESS is set when testing webkitpy's commit-log-editor integration

        Fixes <http://webkit.org/b/64180> REGRESSION (r90564): test-webkitpy failing on multiple
        bots due to commit-log-editor errors

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CommitMessageForThisCommitTest.test_commit_message_for_this_commit): Set
        $CHANGE_LOG_EMAIL_ADDRESS to the patch author's email address. This ensures that
        commit-log-editor can find a value for the committer's email, and that the committer and
        author email addresses match, which will prevent commit-log-editor from inserting a "Patch
        by" line in the commit message.

2011-07-08  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Views should expose QActions for basic navigation.
        https://bugs.webkit.org/show_bug.cgi?id=64174

        Reviewed by Benjamin Poulain.

        Bring the toolbar in Qt's MiniBrowser back to life.

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::navigationAction):
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):

2011-07-08  Adam Roben  <aroben@apple.com>

        Teach TestFailures how to find test names in commit-log-editor-style commit messages

        TestFailures was relying on Trac turning the list of modified files in our commit messages
        into an HTML list. But Trac only does this when the list of modified files is indented.
        commit-log-editor doesn't indent the file list, so the list wasn't being turned into an HTML
        list, which was confusing TestFailures.

        TestFailures now does much simpler parsing of the commit message (i.e., just a substring
        search) without relying at all on its structure.

        Fixes <http://webkit.org/b/64173> TestFailures page fails to blame r90608 for breaking
        fast/dom/HTMLProgressElement/progress-element-markup.html on Windows

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        (Trac.prototype.getCommitDataForRevisionRange): Instead of trying to parse the commit
        message, just return its text.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForRegressionRange): Instead of searching for test names in
        each commit's list of modified files, just search for test names anywhere in the commit's
        message.

2011-07-08  Adam Barth  <abarth@webkit.org>

        sheriffbot is too spammy in IRC
        https://bugs.webkit.org/show_bug.cgi?id=64153

        Reviewed by Eric Seidel.

        Reporting failures in IRC worked well when the tree was greener than it
        is today.  Nowadays, this feature mostly just results in spam about
        false positives.  If we reach a greener state, we can bring this code
        back.

        (Another possibility is to restrict this feature to builder bots,
        rather than including testers, as we did before this patch.)

        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:

2011-07-08  Adam Roben  <aroben@apple.com>

        Ensure commit-log-editor adds a "Patch by" line when the author and committer are different

        Previously we were only adding a "Patch by" line when the ChangeLog contained a "Reviewed
        by" line. But some patches (like rollout patches) don't contain that line. Now we always add
        "Patch by" to the commit log regardless of the ChangeLog's contents.

        Fixes <http://webkit.org/b/64127> Committer for r90588 is commit-queue@webkit.org, but
        should have been abarth@webkit.org

        Reviewed by Anders Carlsson.

        * Scripts/commit-log-editor:
        (createCommitMessage): Try to put the "Patch by" line just above the "Reviewed by" line, as
        before. If there is no "Reviewed by" line, try to put it just above the first modified file.
        If all else fails, put it at the end of the commit message.
        (patchAuthorshipString): Added. Code came from createCommitMessage.

2011-07-08  Herczeg Zoltan  <zherczeg@webkit.org>

        Reviewed by Andreas Kling.

        Adding myself as a reviewer.

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

2011-07-07  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, remove old files from the tree and update paths to new ones.

        * wx/build: Removed.
        * wx/build/build_utils.py: Removed.
        * wx/build/settings.py: Removed.
        * wx/build/waf_extensions.py: Removed.
        * wx/build/wxpresets.py: Removed.
        * wx/packaging/build-mac-installer.py:

2011-07-07  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, more fixes for install name issues.

        * wx/packaging/build-mac-installer.py:

2011-07-07  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy fails on chromium win
        https://bugs.webkit.org/show_bug.cgi?id=64137

        Reviewed by Eric Seidel.

        test-webkitpy doesn't play nicely with the multiprocessing
        module on win32. An earlier change actually reenabled the tests
        on win32 by mistake.

        This patch also fixes a few cases where path names will trip
        things up on win32 (e.g., by testing unix paths on windows).
        We do not lose any real coverage here with those fixes.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-07-07  Leandro Pereira  <leandro@profusion.mobi>

        [ImageDiff] Calculate/print difference right after reading baseline image.
        https://bugs.webkit.org/show_bug.cgi?id=64117

        Reviewed by Kent Tamura.

        Otherwise, ImageDiff will block on fgets() until the universe ends or you ^C
        it.  Whichever happens first.

        * DumpRenderTree/efl/ImageDiff.cpp:
        (main):

2011-07-07  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Leak cairo_t to make the pixel tests stop crashing
        https://bugs.webkit.org/show_bug.cgi?id=64107

        Reviewed by Kent Tamura.

        The pointer is later managed by BitmapContext, but it was being
        de-refed and deleted earlier by our RefPtr, causing crashes in all
        pixel tests.

        We now call leakRef() to make sure it is not removed when our
        createBitmapContextFromWebView goes out of context.

        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:
        (createBitmapContextFromWebView):

2011-07-07  Adam Roben  <aroben@apple.com>

        Update TestFailures's title and header immediately upon navigation

        Fixes <http://webkit.org/b/64125> TestFailures page seems slow to react on link clicks

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype.loaded): Create and store an h1 element for displaying the page's
        title.
        (ViewController.prototype._displayBuilder): Set the page's title and clear out any old
        content immediately instead of waiting for the first set of results for the history
        analyzer. As we receive new results from the analyzer we'll just clear out the main content
        area and replace it with the new info.
        (ViewController.prototype._displayTesters): Set the page's title and clear out any old
        content immediately instead of waiting for the list of testers from the buildbot. Sprinkled
        in a little use of our removeAllChildren helper, too.
        (ViewController.prototype._setTitle): Added. Set's the page's title and the header text.

2011-07-07  Adam Roben  <aroben@apple.com>

        Make Checkout use SCM's Executive instead of conjuring up its own

        This will improve integration with the rest of webkitpy, particularly when invoked via
        webkit-patch.

        Fixes <http://webkit.org/b/64115> REGRESSION (r90564): webkitpy's Checkout class uses
        Executive inappropriately

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout.commit_message_for_this_commit): Use SCM.run instead of creating an Executive for
        our own use. SCM might have some super-special Executive that it uses under the covers, and
        we want to use it, too!

        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CommitMessageForThisCommitTest.test_commit_message_for_this_commit): Mock the SCM.run
        method to call through to Executive.run_command.

2011-07-07  Adam Roben  <aroben@apple.com>

        Make Term/ReadKey.pm an optional dependency of commit-log-editor

        When Term/ReadKey.pm isn't present, the --regenerate-log switch will be non-functional.

        Fixes <http://webkit.org/b/64113> REGRESSION (r90564):
        webkitpy.common.checkout.checkout_unittest failing on GTK bots due to missing
        Term/ReadKey.pm module

        Reviewed by Xan Lopez.

        * Scripts/commit-log-editor: Use Module::Load::Conditional::can_load to only load
        Term/ReadKey.pm if it's present. If it isn't present, ignore the --regenerate-log switch so
        that existing commit messages will be preserved. (Users can manually remove existing commit
        messages using git-reset.)

2011-07-07  Adam Roben  <aroben@apple.com>

        Keep testing that commit messages containing Unicode are handled properly by webkitpy

        Fixes <http://webkit.org/b/64109> REGRESSION (r90571): test-webkitpy no longer tests that we
        correctly handle Unicode in commit messages

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/checkout_unittest.py: Put some Unicode characters in
        places in the ChangeLog that will end up being included in the commit message.

2011-07-07  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Remove Symbian code.
        https://bugs.webkit.org/show_bug.cgi?id=64101

        Reviewed by Benjamin Poulain.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::screenshot):
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):

2011-07-07  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Don't support ridiculous matrix of QT_NO_FEATURE combinations.
        https://bugs.webkit.org/show_bug.cgi?id=64099

        Reviewed by Benjamin Poulain.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::openFile):
        (BrowserWindow::screenshot):
        (BrowserWindow::loadURLListFromFile):

2011-07-07  Adam Roben  <aroben@apple.com>

        Completely ignore too-many-failures builds in TestFailures in most circumstances

        Because a semi-arbitrary subset of tests are run in a too-many-failures build, we can't
        really use them to perform regression analysis. The only time we want to pay attention to
        too-many-failures builds is when we're trying to explain when the current bout of
        too-many-failures started.

        Fixes <http://webkit.org/b/64106> TestFailures page sometimes claims a test started failing
        in a build that didn't even run it (because it exited early due to too many failues)

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        (LayoutTestHistoryAnalyzer.prototype._incorporateBuildHistory): Removed old, broken
        too-many-failures handling that would cause us to blame builds that didn't even run a given
        test for breaking it. Instead, skip over all too-many-failures builds unless the most recent
        build was itself a too-many-failures build.

2011-07-07  Adam Roben  <aroben@apple.com>

        Teach webkitpy's Checkout class to use commit-log-editor to create commit messages

        Fixes <http://webkit.org/b/26755> webkit-patch's commit messages are less readable than
        commit-log-editor's

        Reviewed by David Kilzer.

        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout.commit_message_for_this_commit): Run commit-log-editor, passing it the paths of
        the modified ChangeLogs, to generate the commit message, rather than trying to generate one
        ourselves.

        * Scripts/webkitpy/common/checkout/checkout_unittest.py: Updated the expected commit message
        to match commit-log-editor's format.
        (CommitMessageForThisCommitTest.setUp): Write the ChangeLogs into Tools and LayoutTests
        directories so we can see how the various entries get labeled in the commit message.
        (CommitMessageForThisCommitTest.test_commit_message_for_this_commit): Create a mock SCM
        instance that knows how to find commit-log-editor and pass it to our Checkout instance.
        Don't bother capturing output, since there shouldn't be any.

2011-07-07  Adam Roben  <aroben@apple.com>

        Add a --print-log option to commit-log-editor

        When specified, commit-log-editor takes a set of ChangeLog paths on the command line,
        generates a commit message from those ChangeLogs, prints it to stdout, and exits.

        Prep work for fixing <http://webkit.org/b/26755> webkit-patch's commit messages are less
        readable than commit-log-editor's

        Reviewed by David Kilzer.

        * Scripts/commit-log-editor: Changed to use Getopt::Long to parse options. Added --print-log
        option, which calls through to createCommitMessage, prints the result, and exits.
        (printUsageAndExit): Renamed from "usage" for clarity. Beefed up the usage statement to
        explain commit-log-editor's 2.5 (normal, --print-log, and --help) modes of operation.

2011-07-07  Adam Roben  <aroben@apple.com>

        Extract commit-log-editor's commit-message-generation code into a separate function

        As a bonus, we now skip a bunch of work in the case where we are generating a commit message
        for staged git changes.

        Prep work for fixing <http://webkit.org/b/26755> webkit-patch's commit messages are less
        readable than commit-log-editor's

        Reviewed by David Kilzer.

        * Scripts/commit-log-editor: Moved the default definition of $endl up toward the top of the
        file so that it will be defined even if we aren't operating on an existing log message.
        Moved a bunch of top-level code to generate the commit message from here...
        (createCommitMessage): ...to here.

2011-07-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Open links in a new window when clicking with the middle button in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=63988

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowConstructed):
        (decidePolicyForNavigationAction): Ignore the action if a link is
        clicked with the middle buttonm and open the link in a new window.
        (browserWindowPolicyClientInit):

2011-07-07  Adam Barth  <abarth@webkit.org>

        Remove style_references.py
        https://bugs.webkit.org/show_bug.cgi?id=64070

        Reviewed by Eric Seidel.

        We never really adopted the _references design, and this file is a bit
        of an orphan at this point.

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        * Scripts/webkitpy/style/checkers/python.py:
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        * Scripts/webkitpy/style/main_unittest.py:
        * Scripts/webkitpy/style_references.py: Removed.

2011-07-07  Eric Seidel  <eric@webkit.org>

        Fix WebKit2 expected results search paths for Mac and Qt under new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=64056

        Unreviewed.

        I had written this unittest prior to landing my change, but
        had named it qt_unitest.py, so it wasn't running (nor was
        it added to my git repo).

        Once I fixe the name of the unittest file, it was very easy
        to fix the error in webkit.py (which already had a FIXME).

        * Scripts/webkitpy/layout_tests/port/qt_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-07-07  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Add more debug logging about which test expectations we're using.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Remove unexpected_results.json
        https://bugs.webkit.org/show_bug.cgi?id=64065

        Reviewed by Eric Seidel.

        No one should be using this file any more.  This patch removes it from
        the face of the earth.  This patch also removes two NRWT-specific
        command line options that were implemented using
        unexpected_results.json.

        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:

2011-07-07  Adam Barth  <abarth@webkit.org>

        REGRESSION(90520): chromium GPU tests produce output in the LayoutTests directory
        https://bugs.webkit.org/show_bug.cgi?id=64067

        Reviewed by Eric Seidel.

        The author of r90520 forgot to change the chromium_gpu.py implemenation
        of this method as well.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-07-06  Eric Seidel  <eric@webkit.org>

        Fix WebKit2 expected results search paths for Mac and Qt under new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=64056

        Reviewed by Adam Barth.

        This fixes the MacPort's version of baseline_search_path to include
        wk2 fallback like WebKitPort's does.  This also re-works the QtPort
        to set self._name (as other ports do) so that WebKitPort's default
        implementations will understand Qt operating system flavors correctly
        (including when running wk2 tests).

        In trying to test this, I realized that nearly all of our port-tests
        use the default FileSystem(), User() and Executive() objects, which
        is really bad, because they expose details of your system in the unittest results!

        Once I fixed many of the Port() calls to pass MockFileSystem(), then
        MacPort.test_tests_for_other_platforms started failing, and I had to
        teach MockFileSystem.glob how to handle directories to make it work again.

        I removed the useless PortTestCase.test_baseline_search_path and replaced
        it with more useful test_baseline_search_path tests in MacPortTest and QtPortTest.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/test_files.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/to_be_moved/deduplicate_tests.py:
        * Scripts/webkitpy/tool/mocktool.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Wean rebaseline-server off unexpected_results.json
        https://bugs.webkit.org/show_bug.cgi?id=64063

        Reviewed by Eric Seidel.

        In the process of changing this code to use full_results.json, I
        noticed that the code was broken (because it wasn't tested).  This
        patch also adds test coverage for the broken code.

        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Wean resultsjsonparser off unexpected_results.json
        https://bugs.webkit.org/show_bug.cgi?id=64061

        Reviewed by Eric Seidel.

        We're about to delete unexpected_results.json, so we need to remove all
        the users.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Cleanup result_summary.py
        https://bugs.webkit.org/show_bug.cgi?id=64057

        Reviewed by Eric Seidel.

        This class had a bunch of out-of-date docstrings that no longer make
        any sense.

        * Scripts/webkitpy/layout_tests/models/result_summary.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Tweak the ChangeLog for DEPS rolls to say "Unreviewed" so that the
        patches can be landed by the commit-queue.

        * Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Normalize callers of logging.getLogger to use __name__
        https://bugs.webkit.org/show_bug.cgi?id=64054

        Reviewed by Eric Seidel.

        Most callers were already using __name__.  This patch makes everyone
        consistent.

        * Scripts/webkitpy/common/checkout/diff_parser.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        * Scripts/webkitpy/common/net/statusserver.py:
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/file_lock.py:
        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/models/result_summary.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/port/chromium.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/gtk.py:
        * Scripts/webkitpy/layout_tests/port/http_lock.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.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/printing.py:
        * Scripts/webkitpy/python24/versioning.py:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        * Scripts/webkitpy/style/patchreader.py:
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Move model classes out of layout_package and into models
        https://bugs.webkit.org/show_bug.cgi?id=64053

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/result_summary.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_input.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_results_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/models: Added.
        * Scripts/webkitpy/layout_tests/models/__init__.py: Added.
        * Scripts/webkitpy/layout_tests/models/result_summary.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/result_summary.py.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py.
        * Scripts/webkitpy/layout_tests/models/test_failures.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_failures.py.
        * Scripts/webkitpy/layout_tests/models/test_failures_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py.
        * Scripts/webkitpy/layout_tests/models/test_input.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_input.py.
        * Scripts/webkitpy/layout_tests/models/test_results.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_results.py.
        * Scripts/webkitpy/layout_tests/models/test_results_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_results_unittest.py.
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/views/printing.py:
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        * Scripts/webkitpy/style_references.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-07-06  Dirk Pranke  <dpranke@chromium.org>

        nrwt: fix typo preventing http startup on windows
        https://bugs.webkit.org/show_bug.cgi?id=64050

        Reviewed by Eric Siedel.

        NRWT checks whether it needs to start the servers by looking
        for "/http/" in the test names. After r90520, the leading slash
        is not present, so the check isn't quite right.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:

2011-07-06  Dirk Pranke  <dpranke@chromium.org>

        nrwt: remove --use-apache from the command line
        https://bugs.webkit.org/show_bug.cgi?id=63358

        Reviewed by Adam Barth.

        Re-land the fix in bug 63358 - the prior fix was flawed in that
        we were trying to start the http server during check_sys_deps()
        but not actually setting up the environment properly. This
        broken prior to this change, but exposed by it, since the patch
        changes the chromium port to call the base class's checks.

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Move view-related code out of layout_package and into views
        https://bugs.webkit.org/show_bug.cgi?id=64051

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/metered_stream.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/metered_stream_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/printing.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/views: Added.
        * Scripts/webkitpy/layout_tests/views/__init__.py: Added.
        * Scripts/webkitpy/layout_tests/views/metered_stream.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/metered_stream.py.
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/metered_stream_unittest.py.
        * Scripts/webkitpy/layout_tests/views/printing.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/printing.py.
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py.

2011-07-06  Adam Barth  <abarth@webkit.org>

        Add goofy comments to explain why we have these files.

        * Scripts/webkitpy/layout_tests/controllers/__init__.py:
        * Scripts/webkitpy/layout_tests/layout_package/__init__.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Move a bunch of classes out of layout_tests.layout_package and into layout_tests.controllers
        https://bugs.webkit.org/show_bug.cgi?id=64048

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/controllers: Added.
        * Scripts/webkitpy/layout_tests/controllers/__init__.py: Added.
        * Scripts/webkitpy/layout_tests/controllers/manager.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py.
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py.
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py.
        * Scripts/webkitpy/layout_tests/controllers/message_broker.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py.
        * Scripts/webkitpy/layout_tests/controllers/message_broker_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py.
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py.
        * Scripts/webkitpy/layout_tests/controllers/worker.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/worker.py.
        * Scripts/webkitpy/layout_tests/layout_package/manager.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/worker.py: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Attempt to fix unittest on Leopard.  Let's enumerate the keys in sorted
        order so the test results are predictable.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-07-06  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Siedel.

        nrwt: make the code be consistent about using test names instead of filenames or paths

        https://bugs.webkit.org/show_bug.cgi?id=63597

        It can be hard to figure out where in the code we're assuming
        test names are listed as unix-style relative filenames and where
        they are either absolute paths or relative paths following the
        host filesystem convention.

        This patch changes things so that everything outside of the
        Port object uses (and must assume) unix-style relative
        filenames (with one exception, which is specifying host-local
        filenames as a list of test arguments on the command line).

        This should make things clearer and more consistent, and also
        removes a lot of path conversion calls.

        The changes in this patch outside of port/base.py are largely
        cosmetic changes of "filename" to "test". We add a few routines
        to the base Port implementation to manipulate test names to
        split them, figure out if we're referring to a directory of
        tests, etc.

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/result_summary.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_input.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:

2011-07-06  Chris Guillory  <ctguil@chromium.org>

        No review necessary.

        Adding myself to committers list in committers.py.
        https://bugs.webkit.org/show_bug.cgi?id=63478

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

2011-07-06  Johnny Ding  <jnd@chromium.org>

        https://bugs.webkit.org/show_bug.cgi?id=63857
        Implement createPopupMenu for Chromium DRT.

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createPopupMenu):
        (WebViewHost::~WebViewHost):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-07-06  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed, rolling out r90503.
        http://trac.webkit.org/changeset/90503
        https://bugs.webkit.org/show_bug.cgi?id=63358

        Makes Chromium Windows canary bots hang.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Move buildbot URL in webkitpy to config.urls
        https://bugs.webkit.org/show_bug.cgi?id=64041

        Reviewed by Eric Seidel.

        This patch prepares for using the buildbot class to talk to the
        Chromium buildbots.

        * Scripts/webkitpy/common/config/urls.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/ensurebuildersaregreen.py:

2011-07-06  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, add the correct path to the waf build settings.
        
        * wx/packaging/build-win-installer.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Add missing include.

        * Scripts/webkitpy/tool/bot/irc_command.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Add roll-chromium-deps command to sheriff-bot
        https://bugs.webkit.org/show_bug.cgi?id=64037

        Reviewed by Eric Seidel.

        Lo, and the DEPS were rolled on command.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:
        * Scripts/webkitpy/tool/commands/roll.py:
        * Scripts/webkitpy/tool/commands/roll_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechromiumdeps.py:

2011-07-06  Eric Seidel  <eric@webkit.org>

        Split Driver, DriverOutput and DriverInput out into a new driver.py file
        https://bugs.webkit.org/show_bug.cgi?id=64031

        Reviewed by Adam Barth.

        This ended up kinda large and I'm happy to break it up if desired.

        As part of cleaning up the Port module, I split Driver, DriverInput and DriverOutput
        out into its own driver.py file.

        I also cleaned up how we import Port objects, by making port/__init__.py
        expose Port, Driver, DriverInput, and DriverOutput.  I removed exposure of
        some various test objects as they were causing circular dependencies.
        base.py is now an implementation detail of port.  No longer is "base" referenced
        anywhere in the code.

        I also made Driver.__init__ non-virtual so that sub-classers could all share
        the data storage on Driver.  This more closely matches how other subclasses
        work throughout our python code.

        Standard line-unwrapping and doc-string removal as I went through the code.

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/port/__init__.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/driver.py: Added.
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:

2011-07-06  Adam Roben  <aroben@apple.com>

        Clear TestFailures's getNumberOfFailingTests cache

        Now that we support NRWT, we need to clear out old zero values for the NRWT bots that might
        have been cached by old versions of TestFailures.

        Fixes <http://webkit.org/b/64029> TestFailures page still doesn't show NRWT bots if you've
        used it recently

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Added a .version property to the cache data
        that must match the current version. Otherwise we'll ignore the cached data.

2011-06-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        nrwt: remove --use-apache from the command line
        https://bugs.webkit.org/show_bug.cgi?id=63358

        This change removes the --use-apache command line argument. It
        was initially put in when we were trying to get the cygwin
        apache instance to work with Chromium win, but that code has
        bitrotted and doesn't work at all now.

        Arguably we should remove all of the code to allow for a choice
        of web servers, but since we may still want to switch off of
        LigHTTPd at some point on Windows, I'll leave the rest in for
        now (or at least yank it in a different change.)

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-07-06  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic should use a favicon to indicate current state.
        https://bugs.webkit.org/show_bug.cgi?id=64027

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/favicon-green.png: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/favicon-red.png: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html: Added blurb about icons.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js: Added setting icon state.
        * Scripts/webkitpy/tool/servers/gardeningserver.py: Allowed the use of favicons.

2011-07-06  Daniel Bates  <dbates@rim.com>

        Fix webkitpy error after changeset 90483 <http://trac.webkit.org/changeset/90483>; Add missing
        parameter to _fetch_file_from_results lamdba function.

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-07-06  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Generate the proper install_name for dylibs on Mac.

        * wx/packaging/build-mac-installer.py:

2011-07-06  Xan Lopez  <xlopez@igalia.com>

        [GTK] Only set env. variables in start when strictly needed
        https://bugs.webkit.org/show_bug.cgi?id=64026

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/port/gtk.py: add a
        setup_environ_for_server method in GtkPort and set as many
        env. variables as possible there.

2011-07-06  Adam Roben  <aroben@apple.com>

        Teach TestFailures how to load, parse, and interpret NRWT test results

        Fixes <http://webkit.org/b/61877> TestFailures page doesn't show testers that use
        new-run-webkit-tests

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.failureDiagnosisTextAndURL): Added support for the new 'flaky' failure
        type. For now we don't account for image-only flakes (but TestFailures doesn't deal with
        pixel tests at all currently).
        (Builder.prototype.getNumberOfFailingTests): Relaxed the regex used for parsing the number
        of failing tests from the buildbot output. Make sure not to count "new passes" (a new
        category introduced by NRWT) as failures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Moved a bunch of code from here to
        _fetchAndParseORWTResults. This function now attempts to load NRWT results, then falls back
        to loading ORWT results.
        (LayoutTestResultsLoader.prototype._fetchAndParseNRWTResults): Added. Tries to load and
        parse the full_results.json file for the given build.
        (LayoutTestResultsLoader.prototype._fetchAndParseORWTResults): Added. Code came from start.
        Fixed a bug along the way where we were sometimes calling the error callback instead of the
        success callback when all tests passed.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NRWTResultsParser.js: Added.
        (NRWTResultsParser): Do-nothing constructor.
        (NRWTResultsParser.prototype.parse): Uses eval() (eww!) to get the test results out of the
        JS string, then iterates over all the tests in the results data and builds up a data
        structure matching what ORWTResultsParser returns.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (Array.prototype.contains):
        (String.prototype.contains):
        Added these simple helper functions.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in
        NRWTResultsParser.js.

2011-07-06  Adam Roben  <aroben@apple.com>

        Extract code to parse ORWT's results.html file into its own class

        Prep work for fixing <http://webkit.org/b/61877> TestFailures page doesn't show testers that
        use new-run-webkit-tests

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Moved a bunch of code from here...

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ORWTResultsParser.js: Added.
        (ORWTResultsParser):
        (ORWTResultsParser.prototype.parse):
        ...to here.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in
        ORWTResultsParser.js.

2011-07-06  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Fix a unittest from hitting the network. :)

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-07-06  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Fixing an exception in test-webkitpy, caused by bug 64006.

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-07-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        Run an Xvfb instance to run the API tests on, like we do for the
        layout tests.

        Reviewed by Xan Lopez.

        * Scripts/run-gtk-tests:

2011-07-06  Daniel Bates  <dbates@webkit.org>

        Make SCM unit tests faster
        https://bugs.webkit.org/show_bug.cgi?id=63883

        Speeds up the SCM unit tests by a factor of 4. Currently, we create a
        mock SVN repo for each test_ method in SVNTest and GitTest and creating
        this repo is expensive.

        Instead, it is significantly faster to create the mock SVN repo once
        and then perform a filesystem copy of it for each test_ method.

        Note, Python 2.7's unittest module implements support for per class and
        per module setup and tear down methods which could be used to implement
        similar functionality. At the time of writing, test-webkitpy is designed
        to support Python 2.5. So, we can't take advantage of these Python 2.7
        features :(

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Remove unused parameter from _add_test in test_expectations.py
        https://bugs.webkit.org/show_bug.cgi?id=64008

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Use old-run-webkit-tests when --leaks is present
        https://bugs.webkit.org/show_bug.cgi?id=64012

        Reviewed by Adam Roben.

        We'll remove this branch once support of --leaks is added to
        new-run-webkit-tests.

        * Scripts/run-webkit-tests:

2011-07-06  Benjamin Poulain  <benjamin@webkit.org>

        [Qt] [WK2] Add touch mocking to Qt's MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=63995

        Reviewed by Andreas Kling.

        The mouse events are intercepted through QCoreApplication::notify(),
        and fake touch events are generated for mouse events when necessary.

        If touch events are received from the platform, we assume the current
        hardware has a touch screen and we stop generating fake events.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (isTouchEvent):
        (isMouseEvent):
        (MiniBrowserApplication::MiniBrowserApplication):
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/MiniBrowserApplication.h:

2011-07-06  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        * Scripts/webkitpy/layout_tests/port/gtk.py: use Popen correctly.

2011-07-06  Eric Seidel  <eric@webkit.org>

        webkit-patch failure-reason does not understand NRWT results
        https://bugs.webkit.org/show_bug.cgi?id=64006

        Reviewed by Adam Barth.

        Adam Barth tells me failure-reason should be deleted soon,
        but aroben's fancy new TestFailures/ page doesn't work for
        NRWT yet, and I needed to know when
        third-party-cookie-relaxing started failing.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2011-07-06  Xan Lopez  <xlopez@igalia.com>

        [GTK] Add missing environment variables in NWRT
        https://bugs.webkit.org/show_bug.cgi?id=64004

        Reviewed by Gustavo Noronha Silva.

        Add missing environment variables needed by the GTK+ port.

        * Scripts/webkitpy/layout_tests/port/gtk.py: ditto.

2011-07-06  Adam Roben  <aroben@apple.com>

        Make run-api-tests output intelligible on the bots

        run-api-tests's output on the bots was very hard to read for two reasons:
          1) It was mixing its own output with gtest's
          2) It was using ANSI escape sequences to print colored text, but the bots don't support
             that

        Now, the --verbose flag turns off almost all of run-api-tests's own output so that gtest's
        output will not be obscured. We still print "Timeout" messages even in verbose mode, since
        gtest doesn't have any native support for timeouts. Also, when our output is being
        redirected to a file, we don't print ANSI escape sequences.

        Fixes <http://webkit.org/b/63996> It's very hard to read run-api-tests output on the bots

        Reviewed by Sam Weinig.

        * Scripts/run-api-tests: Don't use the :constants interface of Term::ANSIColor. We want to
        use the colored function instead.
        (runAllTestsInSuite): Don't print out suite names in verbose mode; gtest will give us enough
        context that they aren't needed.
        (runTest): Don't print out test names or pass/fail messages in verbose mode; gtest will do
        that for us. Also, use the new possiblyColored function instead of always coloring output.
        (possiblyColored): Added. When printing to a tty, returns the string with the appropriate
        ANSI color escape sequences added. Otherwise just returns the string unmodified.

2011-07-06  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Launch Xvfb (mostly) the same way we were launching it in the
        bots, for maximum compatibility.

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2011-07-06  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Split Qt API into two different web views (touch and desktop)
        https://bugs.webkit.org/show_bug.cgi?id=63950

        Co-authored with Benjamin Poulain <benjamin@webkit.org>.

        Reviewed by Kenneth Rohde Christiansen.

        Port WTR/Qt to use QDesktopWebView and force a 800x600 viewport.

        The Qt MiniBrowser now defaults to QDesktopWebView but can be started
        in QTouchWebView mode by passing -touch on the command line.

        A lot of functionality has been removed and/or disabled from
        MiniBrowser until we reintroduce the necessary API's.

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::BrowserView):
        (BrowserView::~BrowserView):
        (BrowserView::load):
        (BrowserView::view):
        (BrowserView::touchWebView):
        (BrowserView::desktopWebView):
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        (newPageFunction):
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::webView):
        (BrowserWindow::newWindow):
        (BrowserWindow::showUserAgentDialog):
        (BrowserWindow::updateUserAgentList):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):
        * MiniBrowser/qt/UrlLoader.cpp:
        (UrlLoader::UrlLoader):
        * MiniBrowser/qt/main.cpp:
        (main):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WebView::wkView):
        (WTR::WebView::pageRef):
        (WTR::WebView::WebView):
        (WTR::PlatformWebView::page):
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):

2011-07-06  Eric Seidel  <eric@webkit.org>

        Unreviewed..

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):
         - Fix the pass-thru of --gtk and --qt for old-run-webkit-tests,
           it was previously broken by the existence of isGtk/isQt checks which
           removed the --gtk/--qt args from @ARGV.

2011-07-06  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests uses a 35s timeout for Mac and 6s for all other ports
        https://bugs.webkit.org/show_bug.cgi?id=63983

        Reviewed by Xan Lopez.

        All WebKit ports want to use a 35s timeout.  Only chromium currently
        uses a 6s timeout.  Eventually we'll move all WebKit ports to 6s too
        to further speed up new-run-webkit-tests runs, but that's going to be a while.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-07-06  Xan Lopez  <xlopez@igalia.com>

        Unreviewed.

        NWRT actually seems to work locally, so it should work in the bots
        as long as we take care of the TIMEOUT issue (which is being fixed
        as I write this). Let's give this another shot and fix whatever
        breaks.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-07-06  Xan Lopez  <xlopez@igalia.com>

        Unreviewed.

        Disable NWRT on GTK. At the very least it needs an updated exected
        results file since NWRT is more sensitive to timeouts, not sure
        what the exact problem is.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-07-06  Adam Barth  <abarth@webkit.org>

        Fix global variable leak detected by noglobals.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:

2011-07-06  Adam Barth  <abarth@webkit.org>

        garden-o-matic shouldn't show flaky tests by default
        https://bugs.webkit.org/show_bug.cgi?id=63979

        Reviewed by Ojan Vafai.

        If any of the actual test results are PASS, the test is flaky and we
        can ignore it (at least for now).  If we get awesome at dealing with
        failing tests, we might want to tackle flaky tests by refering the user
        to the flakiness dashboard, which is way more awesome at dealing with
        flaky tests that this tool ever will be.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:

2011-07-05  Adam Barth  <abarth@webkit.org>

        garden-o-matic should list the failing tests
        https://bugs.webkit.org/show_bug.cgi?id=63978

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/config.js: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js: Added.
        * Scripts/webkitpy/tool/servers/gardeningserver.py:


2011-07-05  Eric Seidel  <eric@webkit.org>

        Re-enable NRWT on Leopard now that bug 63973 is fixed.

        Reviewed by Adam Barth.

        I also made the should-enable expression a black-list instead
        of a white-list since every bot on build.webkit.org is
        now using NRWT except windows and WebKit2 bots.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-07-05  Eric Seidel  <eric@webkit.org>

        Perl string concat failure on Leopard (causes NRWT to fail)
        https://bugs.webkit.org/show_bug.cgi?id=63973

        Reviewed by Daniel Bates.

        Leopard's "xcodebuild -version" has a different format from Snow Leopard/Lion
        thus the version parsing logic in webkitdirs.pm seems to fail.

        Default to "3.0" instead of undef when we can't parse the version number.
        This should send us down the correct path for Leopard.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):

2011-07-05  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix after addition of Source/WebCore/xml/parser dir.

        * waf/build/settings.py:

2011-07-05  Eric Seidel  <eric@webkit.org>

        Disable NRWT for Leopard until https://bugs.webkit.org/show_bug.cgi?id=63973 can be fixed.

        Reviewed by Adam Barth.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-07-05  Eric Seidel  <eric@webkit.org>

        Make run-webkit-tests pass --verbose to new-run-webkit-tests on qt/gtk bots.

        Reviewed by Adam Barth.

        * Scripts/run-webkit-tests:
        (runningOnBuildBot):

2011-07-05  Adam Barth  <abarth@webkit.org>

        Add results_unittests.js to garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=63971

        Reviewed by Eric Seidel.

        Adding these unit tests forced me to commit to an API for the results
        module.  I'm not sure if this is the API we'll end up with, but it's
        something not entirely unreasonable.

        Also, I've changed results.js over to WebKit style, as discussed previously.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html:

2011-07-05  Eric Seidel  <eric@webkit.org>

        Teach run-webkit-tests how to translate --qt and --gtk for new-run-webkit-tests.

        Reviewed by Adam Barth.

        * Scripts/run-webkit-tests:

2011-07-05  Adam Barth  <abarth@webkit.org>

        Add first unit tests for garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=63969

        Reviewed by Eric Seidel.

        I've also reformated base.js to match WebKit style, as discussed in the
        previous bug.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/base_unittests.js: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html: Added.

2011-07-05  Eric Seidel  <eric@webkit.org>

        Move Qt, Gtk and Leopard to NRWT.

        We'll roll out any of these if we see problems.

        Reviewed by Adam Barth.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-07-05  Adam Barth  <abarth@webkit.org>

        garden-o-matic should understand which tests have unexpected failures
        https://bugs.webkit.org/show_bug.cgi?id=63965

        Reviewed by Eric Seidel.

        Currently, this code just logs the list of unexpected failures to the
        console.  A future patch will do something useful with this
        information.  A testing harness will also come in the next patch.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/base.js: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-07-05  Adam Barth  <abarth@webkit.org>

        garden-o-matic should know how to fetch test results from the (NRWT) bots
        https://bugs.webkit.org/show_bug.cgi?id=63959

        Reviewed by Eric Seidel.

        Currently, this code just fetches the results and expectations JSON
        blob for Linux from the server and logs it to the console.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js: Added.
        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-07-05  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Python tests are failing on leopard
        https://bugs.webkit.org/show_bug.cgi?id=63842

        Fix the missing flush() call that appears to be needed by the
        logging package in python 2.5. Also fix the regressions
        introduced in the run_webkit_test tests when we switched from
        thread to processes (since processes aren't available on 2.5).

        Also fix a missing "from __future__ import with_statement' in
        testfilehandler (unreviewed).

        * Scripts/webkitpy/layout_tests/layout_package/metered_stream.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * TestResultServer/handlers/testfilehandler.py:

2011-07-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        re-enabling new-run-webkit-tests on the Snow Leopard WebKit1 bots
        now that we believe the stray http-server issue to be solved.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-07-05  Adam Barth  <abarth@webkit.org>

        Turns out we need to support numerals too because that's what jQuery
        uses by default.

        * TestResultServer/handlers/testfilehandler.py:

2011-07-05  Dirk Pranke  <dpranke@chromium.org>

        nrwt: allow for multiple http shards
        https://bugs.webkit.org/show_bug.cgi?id=63116

        Reviewed by Tony Chang.

        This modifies the sharding logic to support multiple http
        shards, but for now we clamp to one shard until we can test
        perf impact and flakiness impact.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py:

2011-07-05  Dirk Pranke  <dpranke@chromium.org>

        Re-land nrwt: make sharding tests needing locks less hard-coded
        https://bugs.webkit.org/show_bug.cgi?id=63112

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py:

2011-07-05  Adam Barth  <abarth@webkit.org>

        TestResultServer should support callback parameter for JSON
        https://bugs.webkit.org/show_bug.cgi?id=63961

        Reviewed by Ojan Vafai.

        This makes using jQuery.ajax so much more pleasant.

        * TestResultServer/handlers/testfilehandler.py:

2011-07-05  Eric Seidel  <eric@webkit.org>

        buildbot needs to understand whether NRWT exited early after having too many failures
        https://bugs.webkit.org/show_bug.cgi?id=63839

        Reviewed by Adam Barth.

        Fix-up the exited early messages printed by NRWT so that
        the buildbot can parse them as expected.
        It looks for lines using "if line.find('Exiting early') >= 0:"

        I also plumbed the "early exit" status through to results.json
        in the form of an "interrupted" bool.  It was unclear to me
        if results.json already had enough information to compute this bool
        itself.  It's possible Ojan could come up with a better fix.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/result_summary.py:

2011-07-05  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests fails to start http server if one is already running
        https://bugs.webkit.org/show_bug.cgi?id=63956

        Reviewed by Adam Barth.

        * BuildSlaveSupport/kill-old-processes:
         - Removed ^M line endings and sorted the process names.
         - There are no functional changes to this file.
           (except that now that its using unix line endings it can be executed directly!)
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
         - Change the name to 'httpd' to match old-run-webkit-test paths.

2011-07-05  Adam Barth  <abarth@webkit.org>

        Add basic ajax support to garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=63874

        Reviewed by Eric Seidel.

        This patch adds some basic infrastructure to garden-o-matic.
        Currently, the infrastructure is just used to make the "quit" command
        use Ajax, but in the future, this infrastructure will be used to do
        more sophistocated remote proceedure calls.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js: Added.
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:

2011-07-05  Adam Barth  <abarth@webkit.org>

        Add trivial garden-o-matic command (with server)
        https://bugs.webkit.org/show_bug.cgi?id=63872

        Reviewed by Eric Seidel.

        This patch adds a trivial "Hello, world" garden-o-matic command,
        complete with an HTTP server.  This command re-uses a bunch of code
        from the existing rebaseline-server command.  Over time, this command
        will grow to be a tool useful for gardening the WebKit tree.

        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/abstractservercommand.py: Added.
        * Scripts/webkitpy/tool/commands/gardenomatic.py: Added.
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html: Added.
        * Scripts/webkitpy/tool/servers/gardeningserver.py: Added.
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:

2011-07-05  Adam Roben  <aroben@apple.com>

        Make prepare-ChangeLog include modified Perl functions in its ChangeLog template

        This is a very simple first cut. Functions must start with a line that starts with "sub "
        and end with a line that starts with a closing brace. No leading whitespace is allowed.
        Package names aren't parsed at all.

        Fixes <http://webkit.org/b/21591> prepare-ChangeLog should know how to find functions in
        Perl files

        Reviewed by David Kilzer.

        * Scripts/prepare-ChangeLog: Removed redundant code that ignored certain files when
        searching for function line ranges. This is already done inside the get_function_line_ranges
        function.
        (get_function_line_ranges): Cleaned up coding style a little bit. Call
        get_function_line_ranges_for_perl for files with .pl and .pm extensions. For files with an
        unknown extension or no extension, read the shebang line to try to determine the script
        interpreter. Call get_function_line_ranges_for_perl if the interpreter seems to be Perl.
        (get_function_line_ranges_for_perl): Added. Does extremely basic parsing of the file to find
        lines starting with "sub " or "}".

2011-07-05  Adam Roben  <aroben@apple.com>

        Clean up run-api-tests output on Windows

        We were mixing run-api-tests output with gtest output, and the result was a mess.

        Fixes <http://webkit.org/b/63954> run-api-tests output is very confusing on Windows

        Reviewed by Dan Bates.

        * Scripts/run-api-tests:
        (runTest):
        (populateTests):
        Made Windows use the formerly-Mac-only codepaths which correctly suppress gtest output
        except in verbose mode. Most changes are due to indentation. Use of the arch utility is now
        the only Mac-specific thing in these functions. Some other platform-specific code was moved
        from here...

        (prepareEnvironmentForRunningTestTool):
        (testToolPath):
        ...to here.

2011-07-04  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=16652
        Firefox and JavaScriptCore differ in Number.toString(integer)

        Added forwarding header.

        * DumpRenderTree/ForwardingHeaders/wtf/StdLibExtras.h: Added.

2011-07-04  Anders Carlsson  <andersca@apple.com>

        Try to fix Qt build.

        * DumpRenderTree/TestNetscapePlugIn/Tests/NPRuntimeRemoveProperty.cpp:

2011-07-04  Anders Carlsson  <andersca@apple.com>

        NP_RemoveProperty is not called back by Safari when delete npObject.prop is encountered in JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=63915
        <rdar://problem/7124300>

        Reviewed by Sam Weinig.

        Extend the NPRuntimeRemoveProperty to handle delete object.property from JavaScript.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPN_IdentifierIsString):
        (PluginTest::NPN_UTF8FromIdentifier):
        (PluginTest::NPN_IntFromIdentifier):
        (PluginTest::NPN_RetainObject):
        (PluginTest::NPN_ReleaseObject):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        (PluginTest::Object::removeProperty):
        (PluginTest::Object::identifierIs):
        (PluginTest::Object::NP_RemoveProperty):
        (PluginTest::Object::npClass):
        * DumpRenderTree/TestNetscapePlugIn/Tests/NPRuntimeRemoveProperty.cpp:
        (NPRuntimeRemoveProperty::TestObject::TestObject):
        (NPRuntimeRemoveProperty::TestObject::hasProperty):
        (NPRuntimeRemoveProperty::TestObject::getProperty):
        (NPRuntimeRemoveProperty::TestObject::removeProperty):
        (NPRuntimeRemoveProperty::PluginObject::PluginObject):
        (NPRuntimeRemoveProperty::PluginObject::~PluginObject):
        (NPRuntimeRemoveProperty::PluginObject::hasMethod):
        (NPRuntimeRemoveProperty::PluginObject::invoke):
        (NPRuntimeRemoveProperty::PluginObject::hasProperty):
        (NPRuntimeRemoveProperty::PluginObject::getProperty):
        (NPRuntimeRemoveProperty::NPP_GetValue):

2011-07-04  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kent Tamura.

        [EFL] Add LayoutTestControllerEfl.
        https://bugs.webkit.org/show_bug.cgi?id=61974

        Only the core features are implemented. Most functions are actually
        stubs and will be implemented as soon as its features are needed.
        Build system changes will be made as soon as DRT is completely
        upstreamed.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp: Added.
        (LayoutTestController::~LayoutTestController):
        (LayoutTestController::addDisallowedURL):
        (LayoutTestController::clearBackForwardList):
        (LayoutTestController::copyDecodedHostName):
        (LayoutTestController::copyEncodedHostName):
        (LayoutTestController::dispatchPendingLoadRequests):
        (LayoutTestController::display):
        (LayoutTestController::counterValueForElementById):
        (LayoutTestController::keepWebHistory):
        (LayoutTestController::computedStyleIncludingVisitedInfo):
        (LayoutTestController::nodesFromRect):
        (LayoutTestController::layerTreeAsText):
        (LayoutTestController::pageNumberForElementById):
        (LayoutTestController::numberOfPages):
        (LayoutTestController::pageProperty):
        (LayoutTestController::isPageBoxVisible):
        (LayoutTestController::pageSizeAndMarginsInPixels):
        (LayoutTestController::webHistoryItemCount):
        (LayoutTestController::workerThreadCount):
        (LayoutTestController::notifyDone):
        (LayoutTestController::pathToLocalResource):
        (LayoutTestController::queueLoad):
        (LayoutTestController::setAcceptsEditing):
        (LayoutTestController::setAlwaysAcceptCookies):
        (LayoutTestController::setCustomPolicyDelegate):
        (LayoutTestController::waitForPolicyDelegate):
        (LayoutTestController::setScrollbarPolicy):
        (LayoutTestController::addOriginAccessWhitelistEntry):
        (LayoutTestController::removeOriginAccessWhitelistEntry):
        (LayoutTestController::setMainFrameIsFirstResponder):
        (LayoutTestController::setTabKeyCyclesThroughElements):
        (LayoutTestController::setUseDashboardCompatibilityMode):
        (LayoutTestController::setUserStyleSheetEnabled):
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::setValueForUser):
        (LayoutTestController::setViewModeMediaFeature):
        (LayoutTestController::setWindowIsKey):
        (LayoutTestController::setSmartInsertDeleteEnabled):
        (waitToDumpWatchdogFired):
        (LayoutTestController::setWaitToDump):
        (LayoutTestController::windowCount):
        (LayoutTestController::setPrivateBrowsingEnabled):
        (LayoutTestController::setJavaScriptCanAccessClipboard):
        (LayoutTestController::setXSSAuditorEnabled):
        (LayoutTestController::setFrameFlatteningEnabled):
        (LayoutTestController::setSpatialNavigationEnabled):
        (LayoutTestController::setAllowUniversalAccessFromFileURLs):
        (LayoutTestController::setAllowFileAccessFromFileURLs):
        (LayoutTestController::setAuthorAndUserStylesEnabled):
        (LayoutTestController::setAutofilled):
        (LayoutTestController::disableImageLoading):
        (LayoutTestController::setMockDeviceOrientation):
        (LayoutTestController::setMockGeolocationPosition):
        (LayoutTestController::setMockGeolocationError):
        (LayoutTestController::setGeolocationPermission):
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        (LayoutTestController::addMockSpeechInputResult):
        (LayoutTestController::setIconDatabaseEnabled):
        (LayoutTestController::setJavaScriptProfilingEnabled):
        (LayoutTestController::setSelectTrailingWhitespaceEnabled):
        (LayoutTestController::setPopupBlockingEnabled):
        (LayoutTestController::setPluginsEnabled):
        (LayoutTestController::elementDoesAutoCompleteForElementWithId):
        (LayoutTestController::execCommand):
        (LayoutTestController::findString):
        (LayoutTestController::isCommandEnabled):
        (LayoutTestController::setCacheModel):
        (LayoutTestController::setPersistentUserStyleSheetLocation):
        (LayoutTestController::clearPersistentUserStyleSheet):
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::setApplicationCacheOriginQuota):
        (LayoutTestController::clearApplicationCacheForOrigin):
        (LayoutTestController::localStorageDiskUsageForOrigin):
        (LayoutTestController::originsWithApplicationCache):
        (LayoutTestController::applicationCacheDiskUsageForOrigin):
        (LayoutTestController::clearAllDatabases):
        (LayoutTestController::setDatabaseQuota):
        (LayoutTestController::originsWithLocalStorage):
        (LayoutTestController::deleteAllLocalStorage):
        (LayoutTestController::deleteLocalStorageForOrigin):
        (LayoutTestController::observeStorageTrackerNotifications):
        (LayoutTestController::syncLocalStorage):
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):
        (LayoutTestController::goBack):
        (LayoutTestController::setDefersLoading):
        (LayoutTestController::setAppCacheMaximumSize):
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):
        (LayoutTestController::sampleSVGAnimationForElementAtTime):
        (LayoutTestController::numberOfActiveAnimations):
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):
        (LayoutTestController::overridePreference):
        (LayoutTestController::addUserScript):
        (LayoutTestController::addUserStyleSheet):
        (LayoutTestController::setDeveloperExtrasEnabled):
        (LayoutTestController::setAsynchronousSpellCheckingEnabled):
        (LayoutTestController::showWebInspector):
        (LayoutTestController::closeWebInspector):
        (LayoutTestController::evaluateInWebInspector):
        (LayoutTestController::evaluateScriptInIsolatedWorld):
        (LayoutTestController::removeAllVisitedLinks):
        (LayoutTestController::callShouldCloseOnWebView):
        (LayoutTestController::apiTestNewWindowDataLoadBaseURL):
        (LayoutTestController::apiTestGoToCurrentBackForwardItem):
        (LayoutTestController::setWebViewEditable):
        (LayoutTestController::markerTextForListItem):
        (LayoutTestController::authenticateSession):
        (LayoutTestController::setEditingBehavior):
        (LayoutTestController::abortModal):
        (LayoutTestController::hasSpellingMarker):
        (LayoutTestController::hasGrammarMarker):
        (LayoutTestController::dumpConfigurationForViewport):
        (LayoutTestController::setSerializeHTTPLoads):
        (LayoutTestController::setMinimumTimerInterval):
        (LayoutTestController::setTextDirection):
        (LayoutTestController::allowRoundingHacks):

2011-06-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed, add myself as committer.

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

2011-07-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r90347.
        http://trac.webkit.org/changeset/90347
        https://bugs.webkit.org/show_bug.cgi?id=63886

        Build breaks on Leopard, Chromium-win, WinCairo, and WinCE.
        (Requested by tkent on #webkit).

        * DumpRenderTree/ForwardingHeaders/wtf/StdLibExtras.h: Removed.

2011-07-03  Daniel Bates  <dbates@webkit.org>

        Import Checkout in scm_unittests.py and logging in svn.py to fix
        Python missing global variable errors

        Rubber-stamped by Adam Barth.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py: Import Checkout.
        * Scripts/webkitpy/common/checkout/scm/svn.py: Import logging.

2011-07-02  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=16652
        Firefox and JavaScriptCore differ in Number.toString(integer)

        Added forwarding header.

        * DumpRenderTree/ForwardingHeaders/wtf/StdLibExtras.h: Added.

2011-04-02  Robert Hogan  <robert@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Support third-party cookie policy for Qt clients
        https://bugs.webkit.org/show_bug.cgi?id=45455

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setAlwaysAcceptCookies):
        (LayoutTestController::setAlwaysBlockCookies):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-07-03  Adam Barth  <abarth@webkit.org>

        Factor ReflectionHandler out of the rebaseline server.  Just code motion.

        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py: Added.

2011-07-03  Adam Barth  <abarth@webkit.org>

        Move the rebaseline server out of the commands package and into the
        (new) servers package.  This patch prepares for refactoring this code
        to share server infrastructure with the (forthcoming) garden-o-matic
        command.

        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/__init__.py: Added.
        * Scripts/webkitpy/tool/servers/data/rebaselineserver/loupe.js:
        * Scripts/webkitpy/tool/servers/data/rebaselineserver/main.css:
        * Scripts/webkitpy/tool/servers/data/rebaselineserver/queue.js:
        * Scripts/webkitpy/tool/servers/rebaselineserver.py: Added.

2011-07-01  Adam Barth  <abarth@webkit.org>

        Fix typo in master.cfg, hoping to trigger a master restart.

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

2011-07-01  Adam Barth  <abarth@webkit.org>

        Turn off new-run-webkit-tests and remove some debug logging.

        * Scripts/run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2011-07-01  Adam Barth  <abarth@webkit.org>

        Add some more debug logging to try to understand why we're getting
        stuck acquring the HTTP lock.

        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2011-07-01  Adam Barth  <abarth@webkit.org>

        Refactor NRWT parsing logic in master.cfg to understand that run-webkit-tests might run NRWT
        https://bugs.webkit.org/show_bug.cgi?id=63854

        Reviewed by Dirk Pranke.

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

2011-07-01  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests results does not understand that mac uses test_expectations files
        https://bugs.webkit.org/show_bug.cgi?id=63838

        Reviewed by Adam Barth.

        We've decided to "enable" test_expectations for the Mac port for now.
        It makes the results.html results much more confusing to read, but at least they're
        no longer lying to us.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:

2011-07-01  Adam Barth  <abarth@webkit.org>

        Temporarily disable waiting for ReportCrash to see how this code
        affects performance on the bots.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-07-01  Dmitry Lomov  <dslomov@google.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=63818
        Test bots shouldn't attempt to build TestWebKitAPI on Windows.
        TestWebKitAPI builds as a part of general webkit build and is a
        part of build products archive.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * Scripts/run-api-tests:

2011-07-01  Adam Barth  <abarth@webkit.org>

        We shouldn't wait for ReportCrash while the timeout is running
        https://bugs.webkit.org/show_bug.cgi?id=63837

        Reviewed by Eric Seidel.

        Instead, we should move this check to worker.py.

        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-07-01  Adam Roben  <aroben@apple.com>

        Stop setting unsafe headers on POSTs via XHR from TestFailures page

        Fixes <http://webkit.org/b/63833> TestFailures page causes a bunch of spew in the
        Inspector's console about unsafe headers

        Reviewed by Dan Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (fetchResource): Removed unnecessary code to set Content-Length and Connection headers.

2011-07-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Switch Snow Leopard over to new-run-webkit-tests (except for wk2)
        https://bugs.webkit.org/show_bug.cgi?id=63786

        We're down to one bug blocking the "move to NRWT" bug:
        https://bugs.webkit.org/show_bug.cgi?id=34984
        so we're trying transitioning Snow Leopard to NRWT as an experiment.

        If we run into any blocking issues we'll of course roll this back out
        (or anyone reading this should feel encouraged to).

        * Scripts/run-webkit-tests:

2011-07-01  Adam Barth  <abarth@webkit.org>

        Add a compat shim for --leaks.  Support for --leaks will be added in
        https://bugs.webkit.org/show_bug.cgi?id=63832.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-07-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        ReportCrash destabilizes new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=63795

        ReportCrash chews up too many system resources that it destablizes
        tests run concurrently.  This patch causes us to spin down all the
        worker processes when ReportCrash is running.

        Also, this patch causes the master process to tell the user we're
        waiting for the crash reporter rather than having that be the worker's
        job.  This stops the user from getting spammed with too many "waiting
        for crash reporter" messages and also cleans up some minor UI issues
        with the meter.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:

2011-07-01  Adam Roben  <aroben@apple.com>

        Teach webkitpy about the new format of our ChangeLog template

        r90229 moved the "Need a short description and bug URL" line to the top of the ChangeLog
        template. But webkitpy didn't know this, so the various rollout-related commands were
        leaving that line in the ChangeLog.

        Fixes <http://webkit.org/b/63815> REGRESSION (r90229): webkit-patch rollout and sheriffbot
        rollout are broken

        Reviewed by Dan Bates.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLog.update_with_unreviewed_message): Changed to look for the "Need a short
        description and bug URL" line instead of the "Reviewed by" line as the first line of the
        ChangeLog template.

        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (ChangeLogTest): Updated _new_entry_boilerplate to match what prepare-ChangeLog now
        generates.

2011-07-01  Adam Roben  <aroben@apple.com>

        Make TestFailures stop loading old builds once we've explained all current failures

        We used to do this, but some refactoring in r90165 broke this logic.

        Fixes <http://webkit.org/b/63808> REGRESSION (r90165): TestFailures page always loads all
        builds back to the beginning of time

        Reviewed by Dan Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        (LayoutTestHistoryAnalyzer.prototype.start): Stop fetching old builds once we're told that
        all current failures have been explained.

2011-07-01  Adam Roben  <aroben@apple.com>

        commit-log-editor reorders ChangeLog entries in unexpected ways
        https://bugs.webkit.org/show_bug.cgi?id=63804

        Reviewed by Darin Adler.

        commit-log-editor was changed in r46899 to move the bug title and URL to the top of the
        commit message in order to make git-based tools, which expect the first line of the commit
        message to be a summary of the change, to work better. But this reordering of the ChangeLog
        entry was unpredictable and unexpected.

        I changed prepare-ChangeLog to put the bug title and URL at the top of the ChangeLog entry
        so that commit-log-editor doesn't have to move them. Then I changed commit-log-editor not to
        try to move them.

        * Scripts/commit-log-editor: Partially reverted r46899. We no longer save the "Reviewed by"
        line and try to move it down below the bug title and URL. The order of the text in the
        ChangeLog is now preserved, except that we insert a "Patch by" line just above the "Reviewed
        by" line in cases where the committer and author are not the same person.

        * Scripts/prepare-ChangeLog: Moved the "Reviewed by" line down below the bug title and URL.

2011-07-01  Mihnea Ovidenie  <mihnea@adobe.com>

        Reviewed by Adam Roben.

        [CSSRegions] Add build slave
        https://bugs.webkit.org/show_bug.cgi?id=62372

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        Add an entry for a release build of Mac.

2011-07-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r90213.
        http://trac.webkit.org/changeset/90213
        https://bugs.webkit.org/show_bug.cgi?id=63792

        The SL bot has an errant HTTP server holding port 8080
        (Requested by abarth on #webkit).

        * Scripts/run-webkit-tests:

2011-07-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build after r90163.

        * MiniBrowser/gtk/WebBundle/WebBundleMain.c:
        (didCreatePage):

2011-07-01  Adam Barth  <abarth@webkit.org>

        Exit faster when we get a keyboard interrupt.  Previously, we'd open
        Safari if you ^C NRWT after it found a failure.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:

2011-07-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Switch Snow Leopard over to new-run-webkit-tests (except for wk2)
        https://bugs.webkit.org/show_bug.cgi?id=63786

        We're down to one bug blocking the "move to NRWT" bug:
        https://bugs.webkit.org/show_bug.cgi?id=34984
        so we're trying transitioning Snow Leopard to NRWT as an experiment.

        If we run into any blocking issues we'll of course roll this back out
        (or anyone reading this should feel encouraged to).

        * Scripts/run-webkit-tests:

2011-07-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r90192.
        http://trac.webkit.org/changeset/90192
        https://bugs.webkit.org/show_bug.cgi?id=63788

        Appears to have caused NRWT on Chromium WebKit Vista to hang
        (Requested by abarth on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py:

2011-06-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove the concept of "being wedged" from new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=63767

        Worker processes shouldn't ever become wedged.  My understanding is
        that this code was originally motivated by the old threading-based
        design but no longer servers any purpose.

        Note: If we actually have a problem with the test harness getting
        stuck, buildbot will kill us.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:

2011-06-30  Adam Barth  <abarth@webkit.org>

        The win32 implementation of fork is sad about forking test-webkitpy.
        Hopefully this will heal the bot.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Update new-run-webkit-tests now that the wk2 shared skipped list has moved
        https://bugs.webkit.org/show_bug.cgi?id=63780

        The shared list was moved from mac-wk2 to wk2 as part of
        http://trac.webkit.org/changeset/90125.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-06-30  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Darin Adler.

        Style Checker should flag removal of "developmentRegion = English;" from project.pbxproj.
        https://bugs.webkit.org/show_bug.cgi?id=62022

        Adds XcodeProjectFileChecker to check removal of "developmentRegion".

        * Scripts/webkitpy/style/checker.py: Added XcodeProjectFileChecker as a checker for *.pbxproj.
        * Scripts/webkitpy/style/checkers/xcodeproj.py: Added.
        * Scripts/webkitpy/style/checkers/xcodeproj_unittest.py: Added.

2011-06-30  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        nrwt: make sharding tests needing locks less hard-coded
        https://bugs.webkit.org/show_bug.cgi?id=63112

        This change also changes the manager logic so that it will
        drop the server lock as soon as all of the shards requiring
        the lock have completed.

        This change includes some minor namespace/import changes in the
        unit tests, and also makes the Manager a new-style object, which
        it should've been all along.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py:

2011-06-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove threaded mode from new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=63771

        This mode is not used and is buggy.  Rather than carry around a bunch
        of unused buggy code, we should rip it out and focus on the
        multiprocess implementation.

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-06-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Clean up output from new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=63759

        Printing messages from the child process looks super ugly because of
        the way the pretty-printer works.  Printing a blank line first is a
        hack, but it makes things at least partially sane.

        Also, handle the case where calling sample throws an exception.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:

2011-06-27  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] DRT: Provide LayoutTestController::setDefersLoading and ::goBack support
        https://bugs.webkit.org/show_bug.cgi?id=63489

        Unskipped:
            loader/navigation-while-deferring-loads.html

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::goBack):
        (LayoutTestController::setDefersLoading):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-06-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Dirk Pranke.

        new-run-webkit-tests should stop when I ^C it
        https://bugs.webkit.org/show_bug.cgi?id=63763

        It still doesn't stop fast enough, but at least with this patch it
        doesn't run more tests.

        Also, I tweaked the UI that happens when there's a keyboard interrupt
        to not be amazingly ugly.  There's still a garbage "Te" left on the
        console, but that's a problem for another day.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:

2011-06-30  Adam Roben  <aroben@apple.com>

        Make TestFailures never treat a too-many-failures build as a last-passing build for a test

        Fixes <http://webkit.org/b/63758> TestFailures sometimes incorrectly says that a build was
        the last passing build for a test, when in fact the test wasn't run due to too many failures
        causing old-run-webkit-tests to exit early

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        (LayoutTestHistoryAnalyzer.prototype._incorporateBuildHistory): If there were too many
        failures in this build, assume that all the tests failed in the last build would have failed
        in this build, too, had they been run. Introduced some new local variables to reduce typing,
        and used them throughout.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Fix a regression from r89841 where we wouldn't
        correctly remember whether old-run-webkit-tests exited early due to too many failures for
        builds older than r89610. Also removed an unused parameter while I was at it.

2011-06-30  Adam Roben  <aroben@apple.com>

        Make TestFaiulres only load old-results directories as needed

        Fixes <http://webkit.org/b/63752> Tester pages on TestFailures page load very slowly

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getBuildNames): Moved up into the API section of the class. Now just
        calls through to _getBuildNamesFromResultsDirectory.
        (Builder.prototype.getOldBuildNames): Added. Just calls through to
        _getBuildNamesFromResultsDirectory.
        (Builder.prototype._getBuildNamesFromResultsDirectory): Renamed from getBuildNames. Now
        takes the directory URL as an argument and only fetches that single URL.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        (LayoutTestHistoryAnalyzer.prototype.start): Moved most logic to _analyzeBuilds. First
        analyzes builds from Builder.getBuildNames, then from Builder.getOldBuildNames if needed.
        (LayoutTestHistoryAnalyzer.prototype._analyzeBuilds): Moved logic here from start. (Most
        changes are just indentation.) Now takes a callback to call when we've finished analyzing
        all builds in buildNames so that we can try to fetch more build names if needed.

2011-06-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Anders Carlsson.

        Update MiniBrowser and WebKitTestRunner to use the client version constants.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowLoaderClientInit):
        (browserWindowUIClientInit):
        * MiniBrowser/gtk/WebBundle/WebBundleMain.c:
        (didCreatePage):
        (WKBundleInitialize):
        * MiniBrowser/gtk/main.c:
        (createWKContextWithInjectedBundle):
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (WKBundleInitialize):
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):

2011-06-30  Adam Roben  <aroben@apple.com>

        Identify revisions that modified failing tests on TestFailures page

        Fixes <http://webkit.org/b/63716> TestFailures page should try to infer which commit caused
        a failure by looking at commit logs

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (.existing-bugs-list, .suspect-revisions-list): Made this rule apply to the suspect
        revisions list, too.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        (Trac): Initialize our memory cache.
        (Trac.prototype.getCommitDataForRevisionRange): Added. Fetches the commit log in RSS form,
        then parses out the revision number, Trac's idea of the commit title, and the files modified
        by the commit. (To get the modified files, we rely on the commit message including a
        prepare-ChangeLog-style file list.)
        (Trac.prototype.logURL): Added a new formatAsRSS parameter.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (removePathExtension): Added. Returns a new string with the last dot and everything after it
        removed.
        (sorted): Added sortFunction parameter.
        (Node.prototype.removeAllChildren): Added. Does what it says.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder): Updated for change to _domForRegressionRange.
        (ViewController.prototype._domForRegressionRange): Changed argument order to match
        _domForNewAndExistingBugs. Now takes the list of failing tests and uses it to figure out
        which revisions modified the failing tests and displays the suspect revisions in a list.

2011-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Rename should_kill_dump_render_tree to driver_needs_restart in preparation for supporting WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=63743

        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-06-30  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Anders Carlsson.

        [GTK] Crash observed with nspluginwrapper and flash
        https://bugs.webkit.org/show_bug.cgi?id=62249

        Added a TestNetscapePlugin test which verifies that WebKit properly
        handles situations where InvalidateRect is called with a null instance.

        * DumpRenderTree/TestNetscapePlugIn/Tests/x11/CallInvalidateRectWithNullNPPArgument.cpp: Added.
        (CallInvalidateRectWithNullNPPArgument::CallInvalidateRectWithNullNPPArgument):
        (CallInvalidateRectWithNullNPPArgument::NPP_New):
        * GNUmakefile.am: Add the new file to sources list.

2011-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove redundant tests in TestFailuresTest
        https://bugs.webkit.org/show_bug.cgi?id=63742

        These tests are all already covered by TestFailuresTest.test_loads.
        I also added the missing "T" from TestFailuresest. :)

        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py:

2011-06-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION(r84294): new-run-webkit-tests results.html generate links to diffs.html or diff.png that don't exist
        https://bugs.webkit.org/show_bug.cgi?id=63494

        This patch does two things:

        1) Refactor diff_image to return the image diff instead of writing the
        diff to a file.  This fixes a bunch of hacks and disentangles a bunch
        of code.

        2) When there's a checksum mismatch but not image diff, we no longer
        report an IMAGE failure to results.html.  That fixes the bug in
        question because results.html won't try to link to a non-existent image
        diff.

        * Scripts/webkitpy/common/system/executive_mock.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:

2011-06-28  Hans Wennborg  <hans@chromium.org>

        Reviewed by Tony Chang.

        IndexedDB: Prepare for running layout tests with LevelDB
        https://bugs.webkit.org/show_bug.cgi?id=63593

        The TestShell must always provide a temporary folder for LevelDB,
        not just when the backing store type is overridden.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setOverrideIndexedDBBackingStore):
        (LayoutTestController::clearAllDatabases):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/TestShell.h:

2011-06-30  Zsolt Fehér  <h490267@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [WK2] Create a general wk2 specific LayoutTests/platform/wk2 platform
        qt-wk2, win-wk2, mac-wk2 use this common Skipped list too
        https://bugs.webkit.org/show_bug.cgi?id=61785 

        * Scripts/old-run-webkit-tests:

2011-06-30  Adam Roben  <aroben@apple.com>

        Use a colon to separate test names from failure info on TestFailures

        This matches how the "Possibly Flaky Tests" list works, and is much prettier when the
        failure info itself includes parentheses.

        Fixes <http://webkit.org/b/63722> Crashing symbols on TestFailures page look ugly due to
        double parentheses

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForFailedTest): Use a colon instead of surrounding the failure
        info in parentheses.

2011-06-30  Adam Roben  <aroben@apple.com>

        Robustify PersistentCache against cached data that contains the string ': '

        Fixes <http://webkit.org/b/63721> Exceptions thrown while loading TestFailures page due to
        passing a bad string to JSON.parse

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/PersistentCache.js:
        (PersistentCache._parseDateAndJSONFromString): Manually split the string on the separator
        using indexOf and substring. (String.prototype.split always splits on all instances of the
        separator.)

2011-06-30  Adam Roben  <aroben@apple.com>

        Include the crashing symbol in crash logs links on TestFailures

        Fixes <http://webkit.org/b/63465> Links to crash logs on TestFailures page should include
        the crashing symbol (like links in results.html do)

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Bumped the cache version because we now store
        crashing symbols for crashing tests. Renamed testsForResultTable to parseResultTable because
        it now returns more than just the test names. Specifically, it now looks for crash log links
        and extracts the crashing symbol name from them. Updated callers of parseResultTable to
        match its new behavior. Changed to store the crashing symbol along with the failure type in
        the data we pass to the callback for tests which crashed.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (code): Make <code> elements a little smaller because their contents can be quite long.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForFailureDiagnosis): Include the crashing symbol inside a
        <code> element in the link, if there is a crashing symbol.

2011-06-30  Adam Roben  <aroben@apple.com>

        Use objects instead of strings to represent a test result in TestFailures code

        This will eventually allow us to store more than just the type of failure for each test.
        (E.g., we can store the name of the crashing symbol for tests which crashed.)

        Prep work for <http://webkit.org/b/63465> Links to crash logs on TestFailures page should
        include the crashing symbol (like links in results.html do)

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.failureDiagnosisTextAndURL): Changed to expect a testResult object
        instead of just a failureType string.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector.js:
        (FlakyLayoutTestDetector.prototype.incorporateTestResults): Changed to store a
        testResult-like object for passing tests.
        (FlakyLayoutTestDetector.prototype.flakinessExamples): Changed to expect testResult-like
        objects.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Store a version number along with the cached data
        so we can throw away cached data that's in an old format. Store a testResult object for each
        test instead of just its failure type.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForFailedTest):
        (ViewController.prototype._domForFailureDiagnosis):
        Changed to expect testResult objects instead of failureType strings.

2011-06-30  Adam Roben  <aroben@apple.com>

        Show full commit logs when visiting Trac from TestFailures page

        Fixes <http://webkit.org/b/63715> Links to Trac on TestFailures page
        should show full commit logs

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        (Trac.prototype.logURL): Added new 'showFullCommitLogs' parameter. When specified, we add
        verbose=on to the log URL to tell Trac to show full commit logs.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForRegressionRange): Specify true for showFullCommitLogs.

2011-06-30  Adam Roben  <aroben@apple.com>

        Add a link to file a bug about TestFailures to the TestFailures page

        Fixes <http://webkit.org/b/63466> TestFailures page should include a link to file a bug
        about TestFailures itself

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (aside): Added some styles for the new link. It is positioned in the upper-right and
        hopefully not to glaringly obvious.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype.loaded): Set up our main content element and auxiliary UI.

        (ViewController.prototype._displayBuilder):
        (ViewController.prototype._displayTesters):
        Modify the main content element instead of the entire body, as there are other things in the
        body that we want to preserve.

        (ViewController.prototype._domForAuxiliaryUIElements): Create and return an <aside> element
        that contains a link to file a bug about the TestFailures page.

2011-06-30  Adam Roben  <aroben@apple.com>

        Ignore callbacks that correspond to old navigations of the TestFailures page

        Fixes <http://webkit.org/b/63711> TestFailures page sometimes ignores back/forward
        navigations

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        (LayoutTestHistoryAnalyzer.prototype.start): Check the return value of the callback. If the
        callback returns false, stop fetching more data.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController): Initialize new _navigationID member. This member is used to assign each
        navigation by the user a unique ID.
        (ViewController.prototype.parseHash): Increment the navigation ID.

        (ViewController.prototype._displayBuilder):
        (ViewController.prototype._displayTesters):
        At the start of these functions, record the current navigation ID. Bail out from callbacks
        if the navigation ID has changed, indicating that the user has navigated elsewhere.

2011-06-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add back/forward menu to MiniBrowser toolbar
        https://bugs.webkit.org/show_bug.cgi?id=63445

        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_init): Use a GtkMenuToolButton for navigation
        widgets.
        (browserWindowConstructed): Get the page BackForwardList.
        (browserWindowHistoryItemActivated): Go to activated history item.
        (browserWindowHistoryItemSelected): Show the url of currently
        selected history item in the statusbar.
        (createGtkActionFromBackForwardItem): Create a GtkAction from a
        WKBackForwardListItemRef.
        (browserWindowCreateMenuItemFromBackForwardItem): Create a
        GtkMenuItem from a WKBackForwardListItemRef.
        (browserWindowCreateBackForwardMenu): Create a GtkMenu with the
        given history items.
        (browserWindowUpdateNavigationActions): Update navigation widgets
        sensitivity and history menus.
        (didChangeBackForwardList): Call
        browserWindowUpdateNavigationActions().
        (browserWindowLoaderClientInit): Add didChangeBackForwardList
        callback.

2011-06-30  Dmitry Lomov  <dslomov@google.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=63660
        This enables unit-tests step on Windows and MacOS SnowLeopard.

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

2011-06-30  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Implement the rest of WTR::PlatformWebView
        https://bugs.webkit.org/show_bug.cgi?id=63630

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):

2011-06-29  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        test-webkitpy is spamming lots of messages about updating test expectations
        https://bugs.webkit.org/show_bug.cgi?id=63680

        This patch changes the passing_run() function to capture the
        output to stdout and stderr and assert that it is empty, and
        also specifies --no-new-test-results by default to avoid getting
        "generating baseline" messages for the expected-missing results.

        Also check that we are logging messages when we generate new
        baselines.

        Also fix a minor bug in the way test_tolerance() was
        checking for whether the tests were passing or not.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-06-29  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        DRT: Make Hixie76WebSocketProtocolEnabled preference flag configurable from LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=63532

        LayoutTestController::overridePreference() will be used to change the value of
        the Hixie76WebSocketProtocolEnabled preference flag from layout tests. In this way,
        we can avoid writing a lot of boilerplate code in each port's DumpRenderTree, but
        at least we need to reset preference values in DumpRenderTree every time we start
        a new test because preference values changed in some test should not be leaked
        to the next test.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::overridePreference):
        The name of preference key is defined in WebKit/{mac/WebView,win}/WebPreferenceKeysPrivate.h.
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        Set the default value. This will be called from TestShell::resetTestController().
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues): Set the default value.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Ditto.

2011-06-29  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Adam Barth.

        check-webkit-style fails to detect https://webkit.org/b/XXXXX as a bug number
        https://webkit.org/b/57360

        Modify the regular expression to match https scheme.

        * Scripts/webkitpy/common/checkout/changelog_unittest.py: Added a test case for https://webkit.org/b/XXXXX.
        * Scripts/webkitpy/common/config/urls.py: Modified bug_url_short to match https scheme.

2011-06-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: images page switch actual and expected images before they're loaded
        https://bugs.webkit.org/show_bug.cgi?id=63199

        We now preload the images and keep the DOM nodes in memory instead of
        going back to the MemoryCache all the time.  (Also, remove some nutty
        </img> HTML.)

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:

2011-06-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests should tell you when it creates new expectations
        https://bugs.webkit.org/show_bug.cgi?id=63675

        Unforunately, this patch creates a bunch of test-webkitpy spam because
        we don't understand how Python logging works well enough to stop the
        spam.  :(

        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:

2011-06-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Refactor WebKitDriver.run_test into smaller pieces
        https://bugs.webkit.org/show_bug.cgi?id=63673

        There is no functional change here.  Just moving code around.
        This is in preparation for adding support for #CRASHED and #CRASHED - WebProcess

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-06-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Simplify skipped file finding in preparation for adding wk2 skipped list fallback
        https://bugs.webkit.org/show_bug.cgi?id=63501

        Re-landing after fixing a bug in WebKitPort.baseline_search_path which broke
        the rebaselineserver unit tests.  Also fixed nits brought up by Dirk after previous landing.

        The goal was to add support for wk2 skipped lists.
        However, I found that our skipped list computation was a
        manual hack (which only worked for the mac port).

        So I fixed a FIXME to move the skipped list finding
        into WebKitPort instead of MacPort.
        Doing so required the concept of a "port_name", since previously
        the only name accessible from a port object was name()
        which includes many things beyond "mac" or "chromium", etc.

        Eventually I believe we'll want to re-think the way that we pass
        in a port_name argument to Port subclasses and expect them to parse
        it.  But for now I just added a cls.port_name variable which contains
        the static information needed to compute wk2 names as well as
        compute Skipped list fallback which works for Mac/Win/Qt and Gtk.

        In order to test my new _skipped_file_search_paths method, I
        fixed another FIXME by making it return relative paths.

        I also fixed the test_expectations_path code in WebKitPort to use port_name.
        It was using name() which would return PORT-VERSION so MacPort was overriding
        it to use just PORT.  After fixing test_expectations_path to use port_name
        (and making it aware of webkit2) I was able to remove the MacPort implementation.

        * Scripts/webkitpy/layout_tests/port/base.py:
         - Add port_name() to access "mac", since name() returns "mac-leopard" etc.
         - Document that real_name() seems to have no purpose.
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
         - Add _parse_port_name(), eventually we might call this from WebKitPort directly.
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
         - Add _parse_port_name.
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
         - Add _parse_port_name.
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
         - Move Skipped-file finding code down to WebKitPort
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-06-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r90070.
        http://trac.webkit.org/changeset/90070
        https://bugs.webkit.org/show_bug.cgi?id=63676

        Broke test-webkitpy rebaseline tests (Requested by eseidel2 on
        #webkit).

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.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/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver_unittest.py:

2011-06-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests doesn't support sample-on-timeout
        https://bugs.webkit.org/show_bug.cgi?id=56731

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-06-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Simplify skipped file finding in preparation for adding wk2 skipped list fallback
        https://bugs.webkit.org/show_bug.cgi?id=63501

        The goal was to add support for wk2 skipped lists.
        However, I found that our skipped list computation was a
        manual hack (which only worked for the mac port).

        So I fixed a FIXME to move the skipped list finding
        into WebKitPort instead of MacPort.
        Doing so required the concept of a "port_name", since previously
        the only name accessible from a port object was name()
        which includes many things beyond "mac" or "chromium", etc.

        Eventually I believe we'll want to re-think the way that we pass
        in a port_name argument to Port subclasses and expect them to parse
        it.  But for now I just added a cls.port_name variable which contains
        the static information needed to compute wk2 names as well as
        compute Skipped list fallback which works for Mac/Win/Qt and Gtk.

        In order to test my new _skipped_file_search_paths method, I
        fixed another FIXME by making it return relative paths.

        I also fixed the test_expectations_path code in WebKitPort to use port_name.
        It was using name() which would return PORT-VERSION so MacPort was overriding
        it to use just PORT.  After fixing test_expectations_path to use port_name
        (and making it aware of webkit2) I was able to remove the MacPort implementation.

        * Scripts/webkitpy/layout_tests/port/base.py:
         - Add port_name() to access "mac", since name() returns "mac-leopard" etc.
         - Document that real_name() seems to have no purpose.
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
         - Add _parse_port_name(), eventually we might call this from WebKitPort directly.
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
         - Add _parse_port_name.
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
         - Add _parse_port_name.
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
         - Move Skipped-file finding code down to WebKitPort
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-06-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Dirk Pranke.

        new-run-webkit-tests complains about missing pixel results instead of plopping down new expectations
        https://bugs.webkit.org/show_bug.cgi?id=38063

        This patch changes new-run-webkit-tests to match old-run-webkit-tests
        in generating new expected results when the expected results are
        missing.

        There are still a couple details that are different:

        1) Image baselines aren't generated unless you run with -p.
        2) Render tree dumps are places in the cross-platform directory instead
        of the platform-specific directory.

        I'm inclined to deal with both of these issues in follow-up patches.

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-06-29  Adam Roben  <aroben@apple.com>

        Teach TestFailures to detect possibly flaky tests and list them separately

        Fixes <http://webkit.org/b/61061> <rdar://problem/9452796> TestFailures page blames
        arbitrary revisions for breaking flaky tests

        Reviewed by Dan Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector.js: Added.
        (FlakyLayoutTestDetector): This class identifies flaky tests when given the test results
        from various builds (in reverse-chronological order).
        (FlakyLayoutTestDetector.prototype.incorporateTestResults): Detects flaky tests. Tests move
        monotonically through three states: LastSeenFailing, LastSeenPassing, and PossiblyFlaky.
        (FlakyLayoutTestDetector.prototype.flakinessExamples): Finds examples of flakiness for the
        given test. Essentially, finds all the transitions from passing to failing (or vice-versa)
        and puts them in an array in reverse-chronological order.
        (FlakyLayoutTestDetector.prototype.get possiblyFlakyTests): Returns all tests we've detected
        to be possibly flaky.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        (LayoutTestHistoryAnalyzer): Initialize new members.
        (LayoutTestHistoryAnalyzer.prototype.start): Now passes the callback an object with two
        properties: history and possiblyFlaky. history holds the data this function used to pass to
        the callback, while possiblyFlaky lists all tests that might be flaky and examples of their
        flakiness. Updated documentation comment to match.
        (LayoutTestHistoryAnalyzer.prototype._incorporateBuildHistory): Now uses a
        FlakyLayoutTestDetector to identify possibly flaky tests. Any possibly flaky tests are
        removed from the failure history, since when they started failing is no longer meaningful.
        We tell our caller to keep calling until all current failures have been explained and we've
        gone through 5 builds without any new flaky tests being identified.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (sorted): New helper function to return a sorted copy of an array.
        (Array.prototype.findLast): New helper function. Like findFirst, but finds the last item
        that matches the predicate.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder): Updated for change in the object passed to us by
        the analyzer. Now puts the list of possibly flaky tests after the failure history.
        (ViewController.prototype._domForFailedTest): Moved some code from here...
        (ViewController.prototype._domForFailureDiagnosis): ...to here.
        (ViewController.prototype._domForPossiblyFlakyTests): New function, builds up a list of
        possibly flaky tests and examples of their flakiness and returns it.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in
        FlakyLayoutTestDetector.js.

2011-06-29  Eric Seidel  <eric@webkit.org>

        Adam says cowboys don't review (or unit test).

        * Scripts/webkitpy/tool/commands/download.py:

2011-06-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make port/config.py mockable for easier unit testing
        https://bugs.webkit.org/show_bug.cgi?id=63661

        Fix an exception from the unit tests.

        * Scripts/webkitpy/layout_tests/port/config.py:

2011-06-29  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        * DumpRenderTree/win/ImageDiffWinCairoCommon.vsprops:
        Link against zlib1.dll, not the static zlib.lib.

2011-06-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make port/config.py mockable for easier unit testing
        https://bugs.webkit.org/show_bug.cgi?id=63661

        Right now config.py leaks real system paths for
        webkit_base_dir due to using __file__.  This patch
        adds a filsystem.py wrapper around __file__ so that
        we don't have to jump through hoops in webkit_unittest.py
        to avoid leaking local paths to the unit test results.

        There are probably many more places where we should now
        use filesystem.path_for_module, but starting with just this one.

        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver_unittest.py:

2011-06-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove duplicate methods in filesystem.py
        https://bugs.webkit.org/show_bug.cgi?id=63658

        Looks like there was a bad merge at some point.

        I also removed a bunch of redundant docstrings.

        * Scripts/webkitpy/common/system/filesystem.py:

2011-06-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Pass --no-new-test-results to NRWT on build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=63653

        This is in preparation for https://bugs.webkit.org/show_bug.cgi?id=38063.

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

2011-06-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Adam Barth.

        [GTK] overlapping drag&drop tests fail on NRWT
        https://bugs.webkit.org/show_bug.cgi?id=57640

        Make a GTK test driver that spawns one Xvfb instance per
        thread. This avoids bad interactions in DnD tests between threads.

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2011-06-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89888.
        http://trac.webkit.org/changeset/89888
        https://bugs.webkit.org/show_bug.cgi?id=63609

         "Seems to be causing merging issues on the dashboard, e.g.
        http://test-
        results.appspot.com/dashboards/flakiness_dashboard.html#group=%40ToT%20-%20chromium.org&tests=fast%2Fcanvas"
        (Requested by aboxhall on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-06-29  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [webkitpy] Executive.running_pids() sometimes doesn't correctly process "ps" output
        https://bugs.webkit.org/show_bug.cgi?id=63624

        * Scripts/webkitpy/common/system/executive.py: In some cases the
        ps output lines can contain one or more leading white-spaces, so
        strip it before splitting the pid and command name.

2011-06-29  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Kent Tamura.

        [Chromium] [DRT] ImageDiff should compile in VS2010
        https://bugs.webkit.org/show_bug.cgi?id=63614

        * DumpRenderTree/chromium/ImageDiff.cpp: Include <iterator> for back_inserter.

2011-06-27  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DRT support for setInteractiveFormValidationEnabled
        https://bugs.webkit.org/show_bug.cgi?id=63496

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2011-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make new-run-webkit-tests -2 actually use WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=63572

        new-run-webkit-tests -2 works with this change.  However a zillion
        tests fail since it can't find the right skipped lists for wk2.
        The Skipped-list fixing is covered in bug 63501.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-06-28  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Adam Roben.

        Add more machines to Chromium Mac Release and Chromium Mac Release (Tests)
        https://bugs.webkit.org/show_bug.cgi?id=63500

        Added google-mac-3 and google-mac-4.

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

2011-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Dirk Pranke.

        Remove webkitpy's tiger support now that WebKit no longer supports tiger
        https://bugs.webkit.org/show_bug.cgi?id=63568

        I don't think our support actually fully worked anyway.  Regardless
        tiger is dead now (thankfully)!

        I also unwrapped some short lines and added a couple FIXMEs while
        touring the code.

        No new tests, only removing old ones which tested our Tiger support.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver_unittest.py:

2011-06-28  Eric Seidel  <eric@webkit.org>

        Unreviewed, just fixing a typo.

        Fix misspellings of "thead" to "thread".

        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests needs a --webkit-test-runner option
        https://bugs.webkit.org/show_bug.cgi?id=63439

        This was accidentally fixed in bug 63501 as well.
        The root problem here was that the webkit unit tests were not using
        enough mocks.  I've fixed them here to use more mocks
        which should unbreak windows.

        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests should not run mthml tests when MHTML support is disabled
        https://bugs.webkit.org/show_bug.cgi?id=63549

        This way mhtml tests won't show up as "missing" results on all non-chromium platforms.
        I happen to go looking for what code was deciding that .mht was a supported
        extension, found test_files.py and then removed some redundant doc-strings and
        if branching.

        * Scripts/webkitpy/layout_tests/port/test_files.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-06-28  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Tony Chang.

        Fix filesystem_unittest.FileSystemTest test_read_and_write_file()
        https://bugs.webkit.org/show_bug.cgi?id=63514

        - change write_text_file to write_binary_file
        - check that text_path and binary_path are actually existant files
        - change cleanup block from 'except' to 'finally'

        * Scripts/webkitpy/common/system/filesystem_unittest.py:

2011-06-28  Adam Roben  <aroben@apple.com>

        Roll out r89924 and r89925

        I didn't mean to commit them!

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        NRWT should wait for ReportCrash
        https://bugs.webkit.org/show_bug.cgi?id=63495

        When a test crashes on Mac, ReportCrash confuses us into thinking the
        test times out.

        I'm not sure how to test this in a meaningful way in our current test
        harness...

        * Scripts/webkitpy/common/system/crashlogs.py:
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2011-06-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89881.
        http://trac.webkit.org/changeset/89881
        https://bugs.webkit.org/show_bug.cgi?id=63513

        Makes Qt massively slow (Requested by abarth on #webkit).

        * Scripts/webkitpy/common/system/crashlogs.py:
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2011-06-27  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ojan Vafai.

        Convert json_results_generator.py to output version 4 JSON.
        https://bugs.webkit.org/show_bug.cgi?id=60869

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        NRWT should wait for ReportCrash
        https://bugs.webkit.org/show_bug.cgi?id=63495

        When a test crashes on Mac, ReportCrash confuses us into thinking the
        test times out.

        I'm not sure how to test this in a meaningful way in our current test
        harness...

        * Scripts/webkitpy/common/system/crashlogs.py:
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests should upload crash logs
        https://bugs.webkit.org/show_bug.cgi?id=55907

        NRWT used to have a different name for crash logs.  I've changed the
        name to patch ORWT.

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-06-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        new-run-webkit-tests needs a --webkit-test-runner option
        https://bugs.webkit.org/show_bug.cgi?id=63439

        NRWT doesn't actually know how to run with the WebKitTestRunner yet
        but it does have a --webkit-test-runner option and will build WebKitTestRunner correctly.

        There is a bunch of other little cleanup in this patch which I added as I
        took a tour through all of our hard-coded DumpRenderTree strings.

        * Scripts/webkitpy/common/net/layouttestresults.py: Added FIXME.
        * Scripts/webkitpy/common/system/outputcapture.py: Fixed spacing to pass PEP8.
        * Scripts/webkitpy/layout_tests/layout_package/manager.py: Made the FIXME slightly stronger (bad bug).
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py: test_shell is dead.
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py: Unwrapped silly wrapping.
        * Scripts/webkitpy/layout_tests/port/base.py: Removed two dead methods.
        * Scripts/webkitpy/layout_tests/port/config.py:
         - build_dumprendertree had no business in this class, removed it.
         - Exposed _FLAGS_FROM_CONFIGURATIONS through flag_for_configuration()
         - Exposed _script_path as script_path() (this probably belongs elsewhere).
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
         - Moved these tests to webkit_unittests.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
         - Now respects the --webkit-test-runner option.
         - setup_test_run is empty in base.py too, no need to override it.
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
         - Test the new hotness.
         - Bad, bad, bad!  The old code was using a real Executive during unit-testing!
           I think this code is still hitting disk during the unit tests. :(
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
         - Add the option.
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
         - Remove optional args option.
        * Scripts/webkitpy/tool/commands/commandtest.py:
         - Remove optional args option.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
         - Remove optional args option.

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Dirk Pranke.

        new-run-webkit-tests does not report stderr output
        https://bugs.webkit.org/show_bug.cgi?id=37739

        Almost all the infrastructure appears to be in place to report stderr
        in results.html.  We just need to wire up a bool to tell results.html
        to create the hyperlink.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results.py:
        * Scripts/webkitpy/layout_tests/port/base.py:

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Dirk Pranke.

        webkitpy unit tests should have more descriptive names than just "Test"
        https://bugs.webkit.org/show_bug.cgi?id=63479

        Luckily we kept these classes in separate namespaces in the harness so
        we were actually running them all even though they had the same name.

        * Scripts/webkitpy/common/system/stack_utils_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results_unittest.py:

2011-06-27  Greg Simon  <gregsimon@chromium.org>

        No review necessary.

        Add email addr to contributor list
        https://bugs.webkit.org/show_bug.cgi?id=63478

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

2011-06-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89834.
        http://trac.webkit.org/changeset/89834
        https://bugs.webkit.org/show_bug.cgi?id=63476

        Broke test-webkitpy (Requested by abarth on #webkit).

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/common/system/outputcapture.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        * Scripts/webkitpy/tool/commands/commandtest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2011-06-27  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        Stop copying obsolete WebKit libraries on Windows
        https://bugs.webkit.org/show_bug.cgi?id=63474
        
        Don't copy obsolete WebKit library directories and files on Windows, they no longer exist and just generate extraneous warnings. These include the CharacterSets directory, dnssd.dll, and icudt40.dll.

        * DumpRenderTree/win/DumpRenderTreePostBuild.cmd:
        * MiniBrowser/MiniBrowserPostBuild.cmd:
        * WebKitTestRunner/win/WebKitTestRunnerPostBuild.cmd:

2011-06-27  Ryosuke Niwa  <rniwa@webkit.org>

        Add Wyatt Carss to the list of non-committer contributors.

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

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkitpy should understand crash logs
        https://bugs.webkit.org/show_bug.cgi?id=63468

        We're planning to use this functionality to upload crash logs along
        with test results for new-run-webkit-tests.

        * Scripts/webkitpy/common/system/crashlog.py: Added.
        * Scripts/webkitpy/common/system/crashlog_unittest.py: Added.
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_unittest.py:
        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2011-06-27  Adam Roben  <aroben@apple.com>

        Make LayoutTestResultsLoader cache whether old-run-webkit-tests exited early due to too many
        failures

        Fixes <http://webkit.org/b/63470> TestFailures page for a particular builder forgets
        old-run-webkit-tests exited early after reload

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Store both the set of failing tests and whether
        old-run-webkit-tests exited early due to too many failures in PersistentCache.

2011-06-27  Adam Roben  <aroben@apple.com>

        Make TestFailures load build names from build.webkit.org/old-results too

        Build results are periodically moved from results to old-results. This change makes those
        builds still visible to TestFailures.

        Fixes <http://webkit.org/b/63453> TestFailures page doesn't show information for builds that
        have been moved to build.webkit.org/old-results

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getBuildNames): Extracted code to parse build names from a
        build.webkit.org directory listing into a separate function. Instead of omitting .zip files,
        we now only include directory entries whose names are parseable as build names (since
        old-results sometimes contains other random files/directories from who knows what). We now
        fetch both results and old-results (with a FIXME about loading old-results on demand),
        extract build names from each, and concatenate the two sets of names.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/WebKitBuildbot.js:
        (WebKitBuildbot.prototype.parseBuildName): Changed to return null when the build name isn't
        parseable, rather than throwing an exception.

2011-06-26  Adam Roben  <aroben@apple.com>

        Store analyzed history directly in LayoutTestHistoryAnalyzer instead of in a generic cache

        It seems silly to have a whole generic cache just to store a single object.

        Fixes <http://webkit.org/b/63407> LayoutTestHistoryAnalyzer has a generic cache but doesn't
        need one

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        (LayoutTestHistoryAnalyzer): Replaced this._cache with this._history.
        (LayoutTestHistoryAnalyzer.prototype.start): Ditto.
        (LayoutTestHistoryAnalyzer.prototype._incorporateBuildHistory): Ditto, and removed the
        no-longer-needed history argument.

2011-06-26  Adam Roben  <aroben@apple.com>

        Move some inappropriate code out of Builder

        Fixes <http://webkit.org/b/63406> TestFailure page's Builder class has a bunch of code that
        isn't really about a builder

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getBuildNames): Renamed from _getBuildNames, since it now needs to be
        called by other objects.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        Added. Code came from Builder.
        (LayoutTestHistoryAnalyzer):
        (LayoutTestHistoryAnalyzer.prototype.start):
        (LayoutTestHistoryAnalyzer.prototype._incorporateBuildHistory):

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        Added. Code came from Builder.
        (LayoutTestResultsLoader):
        (LayoutTestResultsLoader.prototype.start):

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder): Changed to use LayoutTestHistoryAnalyzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in new
        scripts.

2011-05-17  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] Implement CCLayerTreeHost and CCLayerTreeHostImpl portions of threaded compositor
        https://bugs.webkit.org/show_bug.cgi?id=58408

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintInvalidatedRegion):

2011-06-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        new-run-webkit-tests needs a --webkit-test-runner option
        https://bugs.webkit.org/show_bug.cgi?id=63439

        NRWT doesn't actually know how to run with the WebKitTestRunner yet
        but it does have a --webkit-test-runner option and will build WebKitTestRunner correctly.

        There is a bunch of other little cleanup in this patch which I added as I
        took a tour through all of our hard-coded DumpRenderTree strings.

        * Scripts/webkitpy/common/net/layouttestresults.py: Added FIXME.
        * Scripts/webkitpy/common/system/outputcapture.py: Fixed spacing to pass PEP8.
        * Scripts/webkitpy/layout_tests/layout_package/manager.py: Made the FIXME slightly stronger (bad bug).
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py: test_shell is dead.
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py: Unwrapped silly wrapping.
        * Scripts/webkitpy/layout_tests/port/base.py: Removed two dead methods.
        * Scripts/webkitpy/layout_tests/port/config.py:
         - build_dumprendertree had no business in this class, removed it.
         - Exposed _FLAGS_FROM_CONFIGURATIONS through flag_for_configuration()
         - Exposed _script_path as script_path() (this probably belongs elsewhere).
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
         - Moved these tests to webkit_unittests.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
         - Now respects the --webkit-test-runner option.
         - setup_test_run is empty in base.py too, no need to override it.
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
         - Test the new hotness.
         - Bad, bad, bad!  The old code was using a real Executive during unit-testing!
           I think this code is still hitting disk during the unit tests. :(
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
         - Add the option.
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
         - Remove optional args option.
        * Scripts/webkitpy/tool/commands/commandtest.py:
         - Remove optional args option.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
         - Remove optional args option.

2011-06-27  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        [WK2] WebKitTestRunner should reset FrameFlattening flag to disable before each test
        https://bugs.webkit.org/show_bug.cgi?id=63457

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):

2011-06-27  Raphael Kubo da Costa  <kubo@profusion.mobi>

        Reviewed by Kent Tamura.

        [EFL] DRT: Add an ewk_view specialization for EFL's DumpRenderTree.
        It will be plugged into the build system as soon as the rest of the
        DRT code is fully upstreamed.
        https://bugs.webkit.org/show_bug.cgi?id=63086

        * DumpRenderTree/efl/DumpRenderTreeView.cpp: Added.
        (onConsoleMessage):
        (onJavaScriptAlert):
        (onJavaScriptConfirm):
        (onJavaScriptPrompt):
        (drtViewTiledAdd):
        * DumpRenderTree/efl/DumpRenderTreeView.h: Added.

2011-06-27  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kent Tamura.

        [EFL] Add an EventSender implementation to EFL's DumpRenderTree along
        with support files.
        Build system changes will be made as soon as the whole DumpRenderTree
        is upstreamed.
        https://bugs.webkit.org/show_bug.cgi?id=61962

        * DumpRenderTree/efl/EventSender.cpp: Added.
        (setEvasModifiers):
        (translateMouseButtonNumber):
        (sendMouseEvent):
        (sendClick):
        (scheduleAsynchronousClickCallback):
        (updateClickCount):
        (modifierFromJSValue):
        (modifiersFromJSValue):
        (mouseDownCallback):
        (mouseUpCallback):
        (mouseMoveToCallback):
        (evasMouseEventFromHorizontalAndVerticalOffsets):
        (mouseScrollByCallback):
        (continuousMouseScrollByCallback):
        (keyPadNameFromJSValue):
        (keyNameFromJSValue):
        (keyDownCallback):
        (scalePageByCallback):
        (getClass):
        (makeEventSender):
        * DumpRenderTree/efl/EventSender.h: Added.

2011-06-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove evil uses of hasattr
        https://bugs.webkit.org/show_bug.cgi?id=63430

        For some reason these classes believe that they may be called with
        various flavors of "option" elements and so carefully check to make
        sure that the options element has their option before checking it.

        We had a set_option_default method which was never called, so I made it
        do what callsites seemed to want it to do and replaced 3 callers
        who previously used hasattr manually to use set_option_default instead.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-06-27  Kent Tamura  <tkent@chromium.org>

        Reviewed by Hajime Morita.

        [Chromium] WebViewHost should be destructed before LayoutTestController, etc.
        https://bugs.webkit.org/show_bug.cgi?id=63427

        ~WebViewHost() navigates to about:blank, so it calls some
        callbacks and LayoutTestController functions.

        * DumpRenderTree/chromium/TestShell.h:
         Move m_printer upper and move m_webViewHost lower.

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move server config files to webkitpy.layout_tests.servers
        https://bugs.webkit.org/show_bug.cgi?id=63436

        The config files belong with the servers.

        * Scripts/webkitpy/layout_tests/port/httpd2.pem: Removed.
        * Scripts/webkitpy/layout_tests/port/lighttpd.conf: Removed.
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        * Scripts/webkitpy/layout_tests/servers/httpd2.pem: Copied from Tools/Scripts/webkitpy/layout_tests/port/httpd2.pem.
        * Scripts/webkitpy/layout_tests/servers/lighttpd.conf: Copied from Tools/Scripts/webkitpy/layout_tests/port/lighttpd.conf.

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move websocket_server and http_server to webkitpy.layout_package.servers
        https://bugs.webkit.org/show_bug.cgi?id=63434

        These classes do not represent ports.  They represent servers.

        * Scripts/new-run-webkit-httpd:
        * Scripts/new-run-webkit-websocketserver:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py: Removed.
        * Scripts/webkitpy/layout_tests/port/http_server_base.py: Removed.
        * Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py: Removed.
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/servers/http_server.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/http_server.py.
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py.
        * Scripts/webkitpy/layout_tests/servers/http_server_integrationtest.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py.
        * Scripts/webkitpy/layout_tests/servers/websocket_server.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/websocket_server.py.

2011-06-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove Chromium and ChromiumMac implementations of driver_name now that everything uses DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=63428

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move apache_http_server.py to webkitpy.layout_package.servers
        https://bugs.webkit.org/show_bug.cgi?id=63433

        The apache_http_server.py is a server, not a port.

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py: Removed.
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/servers: Added.
        * Scripts/webkitpy/layout_tests/servers/__init__.py: Added.
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/apache_http_server.py.

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move rebaseline-chromium-webkit-tests.py to webkitpy.to_be_moved
        https://bugs.webkit.org/show_bug.cgi?id=63432

        This code isn't in the dependency cone of new-run-webkit-tests. It's
        unclear what it's final home should be, but this patch moves it out of
        layout_tests to simply the package.

        * Scripts/rebaseline-chromium-webkit-tests:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py: Removed.
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py: Removed.
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py: Copied from Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py.
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py.

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move update_webgl_conformance_tests.py to webkitpy.to_be_moved
        https://bugs.webkit.org/show_bug.cgi?id=63429

        This package as nothing to do with the layout_tests package.

        * Scripts/update-webgl-conformance-tests:
        * Scripts/webkitpy/layout_tests/update_webgl_conformance_tests.py: Removed.
        * Scripts/webkitpy/layout_tests/update_webgl_conformance_tests_unittest.py: Removed.
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py: Copied from Tools/Scripts/webkitpy/layout_tests/update_webgl_conformance_tests.py.
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/update_webgl_conformance_tests_unittest.py.

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move deduplicate_tests.py into webkitpy.to_be_moved
        https://bugs.webkit.org/show_bug.cgi?id=63426

        deduplicate_tests.py doesn't haven anything to do with layout tests.
        It's really a separate script.  This patch moves it to the (new)
        to_be_moved package so that it doesn't distract us when working on NRWT.

        * Scripts/deduplicate-tests:
        * Scripts/webkitpy/layout_tests/deduplicate_tests.py: Removed.
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py: Removed.
        * Scripts/webkitpy/test/main.py:
        * Scripts/webkitpy/to_be_moved: Added.
        * Scripts/webkitpy/to_be_moved/__init__.py: Added.
        * Scripts/webkitpy/to_be_moved/deduplicate_tests.py: Copied from Tools/Scripts/webkitpy/layout_tests/deduplicate_tests.py.
        * Scripts/webkitpy/to_be_moved/deduplicate_tests_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py.

2011-06-26  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Remove empty directory.

        * Scripts/webkitpy/layout_tests/test_types: Removed.

2011-06-25  Naoki Takano  <honten@chromium.org>

        Reviewed by Eric Seidel.

        Change my entry from contributors to committers.
        https://bugs.webkit.org/show_bug.cgi?id=63043

        * Scripts/webkitpy/common/config/committers.py: Change my e-mail from takano.naoki@gmail.com to honten@chromium.org. And move the entry to commiters from contributors.

2011-06-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [Chromium] Update WebKit for WEBKIT_FRAME_TO_DOCUMENT_API_MOVE
        https://bugs.webkit.org/show_bug.cgi?id=63394

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::queueLoad):

2011-06-25  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction after r89426.

        * WebKitTestRunner/Configurations/WebKitTestRunnerCFLite.vsprops:
          Link with Cairo DLL for new functionality.
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp: Include compatibility
          code for snprintf.

2011-06-25  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        run-bindings-tests does not work on Chromium Windows.
        https://bugs.webkit.org/show_bug.cgi?id=63382

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Removed run-bindings-tests as a build step for cr-win.

2011-06-25  Dan Bernstein  <mitz@apple.com>

        Try to fix the Qt and Chromium builds.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setEncodedAudioData):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:

2011-06-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Add an option to enable legacy rounding hacks
        https://bugs.webkit.org/show_bug.cgi?id=63363

        Added layoutTestController.allowRoundingHacks() and implemented it
        on OS X.

        * DumpRenderTree/LayoutTestController.cpp:
        (allowRoundingHacksCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::allowRoundingHacks):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::allowRoundingHacks):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::allowRoundingHacks):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::allowRoundingHacks):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::allowRoundingHacks):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::allowRoundingHacks):

2011-06-24  Adam Roben  <aroben@apple.com>

        Include the directory containing the failing tests in titles of bugs filed from TestFailures
        when all the tests won't fit

        Fixes <http://webkit.org/b/63350> Short bug titles from TestFailures page give no indication
        which tests are failing

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (longestCommonPathPrefix): Added. Given a set of paths, returns the longest common prefix
        that ends in a path separator.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForNewAndExistingBugs): When we can't fit all the test names
        in the title, first try to include the longest common prefix of the test names, then, if
        that's still too long or there's no common prefix, fall back to not including any
        information about which tests are failing.

2011-06-24  Adam Roben  <aroben@apple.com>

        Include links to Trac in bugs filed from TestFailures

        Fixes <http://webkit.org/b/63348> Bugs filed from TestFailures page should include links to
        Trac for suspect revisions

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        (Trac.prototype.changesetURL): New function, returns the URL for a particular revision in
        Trac.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForNewAndExistingBugs): If there's only one suspect revision,
        include a link to Trac for it in the first sentence of the description. Otherwise include a
        link to the suspect range after the list of failing tests.

2011-06-24  Nat Duca  <nduca@chromium.org>

        Unreviewed, rolling out r89694.
        http://trac.webkit.org/changeset/89694
        https://bugs.webkit.org/show_bug.cgi?id=58408

        Test shell still not ready for animate changes.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintInvalidatedRegion):

2011-06-24  Adam Roben  <aroben@apple.com>

        Fix typos introduced in r89696

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Pass the result data's constituent parts to the
        callback, since that's what it expects.

2011-06-24  Adam Roben  <aroben@apple.com>

        Make TestFailures correctly remember whether old-run-webkit-tests exited early

        Fixes <http://webkit.org/b/63342> TestFailures page incorrectly claims test run ran to
        completion after reload

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Instead of just storing the number of failures
        in the PeristentCache, store an object that contains both the number of failures and whether
        old-run-webkit-tests exited early.

2011-06-24  Adam Roben  <aroben@apple.com>

        Add links to regression ranges in Trac to the TestFailures page

        Fixes <http://webkit.org/b/61060> <rdar://problem/9452153> TestFailures page should provide
        links to regression ranges in Trac

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js: Added.
        (Trac): This new class represents a particular instance of Trac for a single project.
        (Trac.prototype.logURL): Returns the URL that can be used to see the log of the given
        repository path between the two specified revisions
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController): Added new trac argument.
        (ViewController.prototype._displayBuilder): Moved code to create the DOM for the
        passed/failed builds from here...
        (ViewController.prototype._domForRegressionRange): ...to here. Now also includes a link to
        Trac if there are multiple suspect revisions.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in
        Trac.js and pass a Trac instance for trac.webkit.org to the ViewController.

2011-05-17  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] Implement CCLayerTreeHost and CCLayerTreeHostImpl portions of threaded compositor
        https://bugs.webkit.org/show_bug.cgi?id=58408

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintInvalidatedRegion):

2011-06-24  Dominic Cooney   <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        Convert shadow DOM-related tests to use window.internals
        https://bugs.webkit.org/show_bug.cgi?id=61671

        Remove ensureShadowRoot, shadowRoot, shadowPseudoId and
        removeShadowRoot from layoutTestController; these have been
        replaced by equivalents in window.internals instead.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-06-24  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Dirk Schulze.

        Make run-bindings-tests remove its temporary directories.
        https://bugs.webkit.org/show_bug.cgi?id=63320

        * Scripts/run-bindings-tests:

2011-06-23  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Chromium] Invalid write inside WebKit::FrameLoaderClientImpl::dispatchDidClearWindowObjectInWorld
        https://bugs.webkit.org/show_bug.cgi?id=63216

        Deleted m_webViewHost which looks leaked.
        
        * DumpRenderTree/chromium/TestShell.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::~TestShell):

2011-06-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build.

        * WebKitTestRunner/GNUmakefile.am:

2011-06-23  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed, add myself as committer.

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

2011-06-23  Nat Duca  <nduca@chromium.org>

        Unreviewed, add myself as committer.

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

2011-06-23  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: move http locking code into manager
        https://bugs.webkit.org/show_bug.cgi?id=63103

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-06-23  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by James Robinson.

        [chromium] Add support for running layout tests with accelerated rendering
        https://bugs.webkit.org/show_bug.cgi?id=63274

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-06-23  Adam Roben  <aroben@apple.com>

        Avoid fetching JSON data when possible on TestFailures page to determine if
        old-run-webkit-tests exited early

        As of r89610, results.html includes information about whether old-run-webkit-tests exited
        early, so we don't need to look at JSON data to get this information for builds newer than
        that.

        Fixes <http://webkit.org/b/63281> TestFailures page fetches build JSON for every build,
        which is slow and limits history to the last build master restart

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype._getFailingTests): Moved code dealing with results.html into a new
        function. If we're dealing with a build that has early-exit information in results.html,
        don't bother fetching JSON data and go straight to parsing results.html. Otherwise first use
        the JSON data to determine if old-run-webkit-tests exited early, and then parse results.html
        (as before).

2011-06-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        sheriffbot can no longer restart
        https://bugs.webkit.org/show_bug.cgi?id=63221

        Fixed and unit tested.

        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-06-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] [WebKit2] WebKitTestRunner does not properly load TestNetscapePlugin
        https://bugs.webkit.org/show_bug.cgi?id=63287

        Send the path to the TestNetscapePlugin to the WKTR via an environment variable
        so that the plugin loads properly.

        * Scripts/old-run-webkit-tests: Pass the appropriate environment variable to WKTR.
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::getEnvironmentVariableAsUTF8String): Added this helper which abstracts away some
        of the work for getting an environment variable and converting it to UTF-8.
        (WTR::TestController::initializeInjectedBundlePath): Use the helper.
        (WTR::TestController::initializeTestPluginDirectory): Get the path from an environment variable now.

2011-06-23  Adam Roben  <aroben@apple.com>

        Record whether old-run-webkit-tests aborted early in results.html

        Fixes <http://webkit.org/b/63280> results.html gives no indication of whether
        old-run-webkit-tests stopped running tests early

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
        (top level): Switched to heredoc syntax for printing the start of results.html for clarity.
        Added a <style> element with some styles for the new message. If we stopped running early,
        put the reason why at the top of results.html.
        (stopRunningTestsEarlyIfNeeded): Store the message we print in the new
        $stoppedRunningEarlyMessage global.

2011-06-23  Adam Roben  <aroben@apple.com>

        Cache some of the TestFailures page's data in localStorage

        This makes reloading TestFailures much faster. Right now we only store the number of failing
        tests and the list of failing tests for each build. We may choose to store more later, but
        it's easy to run up against quota limits.

        Fixes <http://webkit.org/b/61520> TestFailures page should take advantage of LocalStorage
        APIs (or similar) to improve loading performance

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Changed to use the new PersistentCache object.
        (Builder.prototype.startFetchingBuildHistory): Changed to pass whether or not we're still
        fetching data to the callback.
        (Builder.prototype._getFailingTests): Changed to use the new PersistentCache object. We now
        store the tests in the cache just before calling the callback. (The previous code in this
        function relied on being able to modify the tests object after storing it in the cache and
        having the cached version be updated. This worked while it was a non-serialized cache, but
        PersistentCache uses serialization.)

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/PersistentCache.js: Added.
        (PersistentCache): This object wraps localStorage. It uses JSON to serialize/deserialize
        values, and stores the date that each value was initially stored along with it. This is
        later used for pruning the cache.
        (PersistentCache.contains): Checks whether the key exists in localStorage.
        (PersistentCache.get): Fetch the string we stored in localStorage and extract the original
        value out of it.
        (PersistentCache.set): Serialize the value, add the date to it, and store it in
        localStorage. If this fails due to quota limits, empty the whole cache and try again.
        (PersistentCache.prune): Delete any cached data that is deemed old enough.
        (PersistentCache._addDateToJSONString): Prepend the current date to the string.
        (PersistentCache._emptyCache): Delete everything from localStorage.
        (PersistentCache._parseDateAndJSONFromString): Split apart the date and the JSON string and
        return them.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder): Updated for change to callback signature. When
        we finish fetching data, prune the PersistentCache. While I was here I also fixed a bug
        where we'd never show the new bug link for tests for which we couldn't determine a passing
        revision.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in
        PersistentCache.js.

2011-06-23  Adam Roben  <aroben@apple.com>

        Make finding existing bugs and filing new bugs work on TestFailures even when lots of tests are failing

        One bug this fixes is <http://webkit.org/b/61660> New bug links on TestFailures page often
        contain titles that are so long they are rejected by Bugzilla

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Bugzilla.js:
        (Bugzilla.prototype.quickSearch): Use fetchResource to POST the search query rather than
        using a query string on the URL. If the search query is very long, using a query string can
        cause the request to be rejected due to the URL being too long. POSTing avoids this issue.
        (Bugzilla.maximumBugTitleLength): Added this constant based on Bugzilla's implementation.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (.new-bug-form): Hide the form that we secretly use to file a new bug.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (fetchResource): Added. Code came from getResource. If we're using a GET request, add the
        query parameters to the URL. Otherwise, send them as the body of the request along with the
        appropriate headers.
        (getResource): Now just calls through to fetchResource.
        (urlEncodedQueryParameters): Added. Moved some code here...
        (addQueryParametersToURL): ...from here.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForNewAndExistingBugs): Shorten the title to just mention the
        number of failing tests if mentioning all the tests would make the title too long. Improved
        the description for large numbers of failures by listing the tests one-per-line instead of
        just having them be comma-separated, which was hard to read. Use a form to file the new bug
        instead of a link so that we can POST the form data. (Using a URL with a query string can
        result in the URL being too long.) The new bug link now just submits the form.

2011-06-23  Adam Roben  <aroben@apple.com>

        Show closed bugs on the TestFailures page in addition to open ones

        Fixes <http://webkit.org/b/63194> TestFailures page should show closed bugs, too

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Bugzilla.js:
        (Bugzilla.prototype.quickSearch): Added code to extract the bug's status and store it in the
        returned data.
        (Bugzilla.isOpenStatus): New function, returns true if the passed-in status indicates that
        the associated bug is still open.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (addQueryParametersToURL): Add a missing semicolon.
        (Node.prototype.appendChildren): New function, like appendChild but takes an array-like
        object and appends each of the values stored within.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForNewAndExistingBugs): Prepend 'ALL' to the query so closed
        bugs will be included in the results. Split the returned bugs into two sets: those which are
        open, and those which are closed. Put the open bugs at the top level of the list, and the
        closed bugs in a second level.

2011-06-23  Adam Roben  <aroben@apple.com>

        Don't count new tests as failures on the TestFailures page

        Fixes <http://webkit.org/b/63254> TestFailures page calls new tests "failures", even though
        they aren't

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Don't add the number of new tests to the number
        of failures.

2011-06-23  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        nrwt: make TestInput objects printable
        https://bugs.webkit.org/show_bug.cgi?id=63225

        This makes debugging slighlty easier.

        * Scripts/webkitpy/layout_tests/layout_package/test_input.py:

2011-06-22  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

        test-webkitpy --all errors out because scm_unittest.py can't find module checkout
        https://bugs.webkit.org/show_bug.cgi?id=62943

        Remove "from .checkout import Checkout" from scm_unittest.py since it's included
        by Scripts/webkitpy/common/checkout/__init__.py.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:

2011-06-22  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Mark Rowe.

        Add window.internals to WebKit2's WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=61073

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pxbproj:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/InjectedBundleCFLite.vsprops:
        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops:
        * WebKitTestRunner/Configurations/InjectedBundleCoreFoundation.vsprops:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2011-06-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make sheriff-bot rollout messages a little nicer
        https://bugs.webkit.org/show_bug.cgi?id=63107

        itertools.chain.from_iterable is new in 2.6,
        use itertools.chain(*list) for 2.5 compat.

        * Scripts/webkitpy/tool/bot/irc_command.py:

2011-06-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make sheriff-bot robust against exceptions from commands
        https://bugs.webkit.org/show_bug.cgi?id=63211

        sheriff-bot was acting strange this afternoon.
        We don't know if this will fix the cause, but
        at least it adds some unit tests and catches
        one possible cause.

        * Scripts/webkitpy/tool/bot/sheriffircbot.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-06-22  Mark Rowe  <mrowe@apple.com>

        Reviewed by David Levin.

        <http://webkit.org/b/63212> TestWebKitAPI Xcode project has bogus settings since r86287

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Fix the reference to libgtest.a to
        be relative to the built products directory rather than using a hard-coded path. Remove the
        explicit settings of FRAMEWORK_SEARCH_PATHS, HEADER_SEARCH_PATHS and LIBRARY_SEARCH_PATHS
        as they're all unnecessary. If they were necessary they should be set in the .xcconfig file
        rather than in the .xcodeproj directly.

2011-06-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: remove obsolete port.shut_down_http_server method
        https://bugs.webkit.org/show_bug.cgi?id=59993

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.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/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2011-06-22  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Andreas Kling.

        Move macpherson from contributor list to committer list.
        https://bugs.webkit.org/show_bug.cgi?id=63179

        * Scripts/webkitpy/common/config/committers.py:
        Move macpherson from contributor list to committer list.

2011-06-22  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        check-webkit-style should detect returning (Own|Ref)Ptr instead of the Pass*Ptr version.
        https://bugs.webkit.org/show_bug.cgi?id=63204

        * Scripts/webkitpy/style/checkers/cpp.py: Added a check for the return value and combined
          with similar code for the parameter checking.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Removed pass_ptr checks from
          those done for single lines since they don't make sense in that case (variable decls look like function decls).
          Removed some redundant comments (one of which was slightly wrong).
          Added checks for the new functionality and minor other test changes.

2011-06-22  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Add libsoup to libWebCoreInternals build.
        https://bugs.webkit.org/show_bug.cgi?id=62066

        * GNUmakefile.am:

2011-06-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: handle missing httpd cleanly
        https://bugs.webkit.org/show_bug.cgi?id=62027

        We had reverted the change in r89414, so this adds it back in
        (modifying check_sys_deps() in port/base.py to check for an
        installed web server).

        This change then fixes the change in r89414 to stub out the
        check_sys_deps() in the test port so that the unit tests run correctly.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:

2011-06-22  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        check-webkit-style should check for invalid uses of RefPtr/OwnPtr as parameters.
        https://bugs.webkit.org/show_bug.cgi?id=63188

        * Scripts/webkitpy/style/checkers/cpp.py: Added the check.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added tests.

2011-06-22  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        Add a buildbot for testing ENABLE(CSS3_FLEXBOX)
        https://bugs.webkit.org/show_bug.cgi?id=62891

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

2011-06-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        nrwt: don't look for http lock when running the test port
        https://bugs.webkit.org/show_bug.cgi?id=63158

        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/port/test.py:

2011-06-22  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Set up plugin tests
        https://bugs.webkit.org/show_bug.cgi?id=63066

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::initializeTestPluginDirectory):
        Use the QTWEBKIT_PLUGIN_PATH environment variable as the path
        of the test plugin like DRT does.

2011-06-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Ojan Vafai.

        Make sheriff-bot rollout messages a little nicer
        https://bugs.webkit.org/show_bug.cgi?id=63107

        It annoyed me this afternoon that I had to convert sheriff-bots "r12345" revisions
        into urls myself.  So I have now fixed its "preparing" message to include a url.

        I also figured that I should make the messages mention all of the responsible parties
        so that rollouts are never surprises.  If you're in the channel and were involved
        in a patch, you will see if someone is using sheriff-bot to rollout a patch.

        As part of doing this I also changed (and tested) _parse_args to fail-fast
        when given invalid args.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-06-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        run-webkit-websocketserver fails to stop websocket server
        https://bugs.webkit.org/show_bug.cgi?id=63123

        There's a ten-character change in new-run-webkit-websocketserver
        that fixes the actual bug, and then we update the code in
        new-run-webkit-httpd to do the actual stop call, and add more tests
        (refactoring the existing test code so that it is shared).

        * Scripts/new-run-webkit-httpd:
        * Scripts/new-run-webkit-websocketserver:
        * Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py:

2011-06-22  Adam Roben  <aroben@apple.com>

        Add links to existing bugs related to failing tests on TestFailures page

        I changed the layout of the page a little to make it easier to read with all the new
        information. Passing/failing revisions have been moved down below the list of tests to be
        closer to the existing bugs and the new bug link. And each set of tests and its relevant
        information is in a light gray box.

        Fixes <http://webkit.org/b/61665> TestFailures page should link to existing bugs when
        possible

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Bugzilla.js: Added.
        (Bugzilla): This new class represents a single Bugzilla instance.
        (Bugzilla.prototype.quickSearch): Searches Bugzilla using its Quick Search functionality,
        passing the resulting bug titles and URLs to the callback when complete. If called multiple
        times with the same query before the query returns, caches the callbacks so that only one
        query is sent over the wire. When the query completes, all pending callbacks are called.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (#failure-history): Reduce the margin/padding on the top-level list a bit.
        (#failure-history > li): Put each set of tests in a gray box, and indent most information
        inside the box.
        (.test-list): Unindent the list of failing tests so it is visually at the top level.
        (.new-and-existing-bugs): Reduce the space at the bottom of this area so that the bottom of
        each box isn't a big empty space.
        (.existing-bugs-list): Use a smaller text size for existing bugs, since their titles can be
        quite long.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (addQueryParametersToURL): New function extracted from
        ViewController.prototype._domForNewAndExistingBugs.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController): Take and store an optional Bugzilla instance.
        (ViewController.prototype._displayBuilder): Give the top-level list an id for styling
        purposes and move the list of failing tests above all other information. Only show bug
        information once we've determined the most-recent passing revision for a set of tests. It's
        not that useful to file a new bug before this information has been determined, and searching
        for existing bugs before we've figured out which tests started failing at the same time
        would end up giving you information about a bunch of unrelated tests.
        (ViewController.prototype._domForNewAndExistingBugs): Renamed from _domForNewBugLink. Now
        returns a DocumentFragment instead of an HTMLParagraphElement. If we don't have a Bugzilla
        instance, just returns an empty DocumentFragment. Starts a search for bugs related to the
        failing tests, and adds links to the bugs when the search completes.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pass a
        Bugzilla instance for bugs.webkit.org to the ViewController.

2011-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Apply current view settings to newly created views in GtkLauncher
        https://bugs.webkit.org/show_bug.cgi?id=63142

        * GtkLauncher/main.c:
        (createWebViewCb):

2011-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Use GOption to parse main arguments in GtkLauncher
        https://bugs.webkit.org/show_bug.cgi?id=63060

        Instead of getting the settings from the view, create a new
        settings object not associated with any view so that we can parse
        the command line arguments before creating the view. It will also
        allows to use the same settings for more than one view if we
        eventually support passing more than one uri from the command
        line.

        * GtkLauncher/main.c:
        (parseOptionEntryCallback): Make this function static. Also use
        g_ascii_strtoll/g_ascii_strtod to parse int/float values instead
        of atoi/atof to provide better error messages. And always fill the
        error struct when the function fails.
        (getOptionEntriesFromWebKitWebSettings): Use an array of
        GOptionEntry structs instead of a GArray, since that is what
        g_option_group_add_entries() expects and the array size doesn't
        change.
        (addWebSettingsGroupToContext): Helper function to add the
        websettings group to the option context.
        (main): Create the option context to parse command line arguments.

2011-06-22  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Adam Roben.

        [GTK] Implement pixel dump support for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=58242

        * DumpRenderTree/gtk/GNUmakefile.ImageDiff.am: Added.
        * GNUmakefile.am: Separate out the ImageDiff bits of the GNUmakefile.
        * Scripts/old-run-webkit-tests: Update to add support for the GTK+ port.
        * WebKitTestRunner/GNUmakefile.am: Added Cairo specific files to the build.
        * WebKitTestRunner/TestInvocation.cpp: Moved this code to the platform-independent
        file so that we can share it across platforms.
        (WTR::TestInvocation::compareActualHashToExpectedAndDumpResults):
        * WebKitTestRunner/TestInvocation.h: Updated method list.
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp: Added Cairo implementation.
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Updated to use new helper.

2011-06-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89414.
        http://trac.webkit.org/changeset/89414
        https://bugs.webkit.org/show_bug.cgi?id=63130

        It broke webkitpy tests (Requested by Ossy on #webkit).

        * Scripts/webkitpy/layout_tests/port/base.py:

2011-06-22  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>

        Reviewed by Dirk Pranke.

        [NRWT] Print error message when there is no httpd present on the system
        https://bugs.webkit.org/show_bug.cgi?id=62027

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:

2011-06-21  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.
        Fix crashes in new-run-webkit-tests resulting from the
        change to the http_server logic in r89400. Python 2.5
        on Mac 10.5 has some weird error paths.

        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/common/system/executive.py:

2011-06-21  MORITA Hajime  <morrita@google.com>

        Unreviewed, rolling out r89401 and r89403.
        http://trac.webkit.org/changeset/89401
        http://trac.webkit.org/changeset/89403
        https://bugs.webkit.org/show_bug.cgi?id=62970

        Breaks mac build and mistakenly enables the spellcheck API

        * Scripts/build-webkit:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2011-06-21  Kent Tamura  <tkent@chromium.org>

        [Mac] Sort Xcode project files.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2011-06-20  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Spellcheck API should be build-able.
        https://bugs.webkit.org/show_bug.cgi?id=62970

        * Scripts/build-webkit:

2011-06-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: attempt #3 at fixing server startup/shutdown
        https://bugs.webkit.org/show_bug.cgi?id=62829

        Attempt yet again to make starting and stopping servers
        reliable. It turns out that apache has races between when the
        ctl process exists and when it writes/removes the pid file.
        This change accounts for the races.

        * Scripts/new-run-webkit-httpd:
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py: Added.
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-06-21  Dmitry Lomov  <dslomov@google.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=63080
        Unit-tests step on test-only bot is broken.
        Removing the step until run-api-tests is fixed.

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

2011-06-20  Dmitry Lomov  <dslomov@google.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=63017
        "Unit tests" step on bots should provide more information in case of failure.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: added --verbose flag to UnitTests step.

2011-06-20  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: order shards by name, not number of tests
        https://bugs.webkit.org/show_bug.cgi?id=62753

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:

2011-06-20  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        we should only log the test names to the tests_run.txt files during layout_tests
        https://bugs.webkit.org/show_bug.cgi?id=62751

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-06-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue/ews-bots should run run-bindings-tests for every patch
        https://bugs.webkit.org/show_bug.cgi?id=63010

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2011-06-20  Chang Shu  <cshu@webkit.org>

        Reviewed by Adam Barth.

        fast/js/sputnik/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code tests fail when showModalDialog isn't supported
        https://bugs.webkit.org/show_bug.cgi?id=53676

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2011-06-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        buildbots should run run-bindings-tests
        https://bugs.webkit.org/show_bug.cgi?id=63001

        run-bindings-tests takes 2.4 seconds on my machine, so
        I expect this will not be noticeable on the bots.

        I also removed tiger-specific checks since Tiger is no
        longer a supported platform for webkit.

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

2011-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build after r89249.

        * GtkLauncher/main.c:
        (main):

2011-06-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: remove LayoutTestController::setTimelineProfilingEnabled.
        https://bugs.webkit.org/show_bug.cgi?id=62994

        * DumpRenderTree/LayoutTestController.cpp:
        (closeWebInspectorCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-06-20  Lukasz Slachciak  <l.slachciak@samsung.com>

        Reviewed by Martin Robinson.

        [GTK] General mechanism for adjusting WebKitWebSettings in GtkLauncher.
        https://bugs.webkit.org/show_bug.cgi?id=55308

        * GtkLauncher/main.c: Added general mechanism for adjusting WebKitWebSettings.
        (parseOptionEntryCallback): Callback for parsing option entry.
        (getOptionEntriesFromWebKitWebSettings): Basing on the WebKitWebSettings properties prepare
        list of option entries.
        (transformStringToBoolean): Transform function for boolean convertion used by parseOptionEntryCallback.
        (transformStringToInt): Transform function for int convertion used by parseOptionEntryCallback.
        (transformStringToFloat): Transform function for float convertion used by parseOptionEntryCallback.
        (parseAdditionalOptions): Help function parsing additional commandline options.
        (main): Added call to parseAdditionalOptions.

2011-06-20  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] [WK2] Compile error in ActivateFontsQt.cpp on Mac
        https://bugs.webkit.org/show_bug.cgi?id=62869

        Add QFont include to fix "incomlete type QFont" error.

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:

2011-06-19  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Reviewed by Martin Robinson.

        [GTK] Enable Media Stream feature and make it default on
        https://bugs.webkit.org/show_bug.cgi?id=60394

        * Scripts/build-webkit:

2011-06-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89198.
        http://trac.webkit.org/changeset/89198
        https://bugs.webkit.org/show_bug.cgi?id=62953

        Chromium breakage on "Linux Tests" (Requested by senorblanco
        on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-06-18  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

        Git.push_local_commits_to_server() should use passed username and
        password when we don't have cached credentials
        https://bugs.webkit.org/show_bug.cgi?id=62941

        Fixes a issue where Git.push_local_commits_to_server() would always look
        for cached credentials regardless of whether a username and password
        were passed as arguments. Instead, if given both a username and password
        then we shouldn't look for cached credentials (since we were explicitly given
        credentials).

        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py: Added unit tests.

2011-06-18  Daniel Bates  <dbates@rim.com>

        Rubber-stamped by Eric Seidel.

        Remove run-javascriptcore-tests --skip-build option; Instead add --build/no-build options
        https://bugs.webkit.org/show_bug.cgi?id=62767

        Part 3 of 3

        Remove the command-line option --skip-build now that the master BuildBot has been restarted
        following <http://trac.webkit.org/changeset/89138>.

        Instead, specify --no-build to get analogous functionality.

        * Scripts/run-javascriptcore-tests:

2011-06-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: fix test sorting
        https://bugs.webkit.org/show_bug.cgi?id=58691

        This changes the sorting to use a "natural" sort order such that
        foo2.html sorts before foo13.html, and sorts the tests so
        that all the tests in a directory are run before any test in a
        subdirectory.

        This change also adds a split() method to the filesystem since
        that is needed to cluster files into a directory otherwise.

        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py:

2011-06-18  Evan Martin  <evan@chromium.org>

        Reviewed by Darin Adler.

        Compiler warning in double->int conversion in TestNetscapePlugIn
        https://bugs.webkit.org/show_bug.cgi?id=51554

        This code is providing a JS API for removing a property by numeric ID.
        We get it from JS as a double, and must convert it to an int before using it.

        Test: LayoutTests/plugins/npruntime/remove-property.html

        * DumpRenderTree/TestNetscapePlugIn/Tests/NPRuntimeRemoveProperty.cpp:
        (NPRuntimeRemoveProperty::TestObject::invoke):

2011-06-18  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Don't exit webkit-patch when running on Win32 python
        https://bugs.webkit.org/show_bug.cgi?id=55811

        Most of the basic actions work in the meantime,
        so let people play with in on Win32 now.

        * Scripts/webkit-patch:

2011-06-18  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ojan Vafai.

        Convert json_results_generator.py to output version 4 JSON.
        https://bugs.webkit.org/show_bug.cgi?id=60869

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-06-18  Berend-Jan Wever  <skylined@chromium.org>

        Reviewed by Eric Seidel.

        Some names with spaces are incorrectly reported as not containing spaces
        while running prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=55572

        * Scripts/VCSUtils.pm: Updated CHANGE_LOG_NAME check for spaces to allow
          non-alphanumeric characters in names.

2011-06-18  Michael Saboff  <msaboff@apple.com>

        Reviewed by Eric Seidel.

        Enhancement: New Script to Format malloc_history output as tree
        https://bugs.webkit.org/show_bug.cgi?id=56378

        New script to process malloc_history output to tree format.

        * Scripts/malloc-tree: Added.

2011-06-17  Dmitry Lomov  <dslomov@google.com>

        Reviewed by Daniel Bates.

        https://bugs.webkit.org/show_bug.cgi?id=62918 
        Pass configuration to UnitTests step in master.cfg

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

2011-06-17  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Eric Seidel.

        [EFL] Add Evas-based ImageDiff implementation.
        https://bugs.webkit.org/show_bug.cgi?id=61942

        Build system changes will be performed as soon as the complete
        DumpRenderTree implementation is upstreamed.

        * DumpRenderTree/efl/ImageDiff.cpp: Added.
        (pixelFromImageData):
        (differenceImageFromDifferenceBuffer):
        (computeDistanceBetweenPixelComponents):
        (calculatePixelDifference):
        (calculateDifference):
        (getTemporaryFile):
        (printImage):
        (printImageDifferences):
        (resizeEcoreEvasIfNeeded):
        (readImageFromStdin):
        (parseCommandLineOptions):
        (shutdownEfl):
        (abortWithErrorMessage):
        (initEfl):
        (main):

2011-06-17  Tony Chang  <tony@chromium.org>

        Reviewed by Dirk Pranke.

        [chromium] force rebaseline-chromium-webkit-tests to use the chromium port
        https://bugs.webkit.org/show_bug.cgi?id=62907

        This fixes a bug where the ImageDiff on the user's machine doesn't
        match the logic used on the Chromium buildbots.  This has the downside
        of requiring that the Chromium ImageDiff is built, but it turns out
        that even with --tolerance 0, the CG ImageDiff will allow small pixel
        differences through.

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-06-17  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build correction.

        * DumpRenderTree/win/DumpRenderTreeCairo.vsprops:
        Update WinCairo property sheet to link against the Cairo DLL,
        now that we are using a more recent Cairo build. 

2011-06-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Brian Weinstein.

        Create a simple example of using the COM-based C++ listeners.
        A new onclick event is attached (via C++) to the WebKit logo
        in the default test pattern displayed on startup.  Clicking on
        the logo causes a message box to be displayed.
        https://bugs.webkit.org/show_bug.cgi?id=61885

        * WinLauncher/DOMDefaultImpl.h: Added.  Stub implementation of
          the WebScriptObject and DOMEventListener.
        * WinLauncher/WinLauncher.cpp:
        (SimpleEventListener::SimpleEventListener): Example implementation
          of a simple DOM event listener.
        (SimpleEventListener::handleEvent): 
        (WinLauncherWebHost::didFinishLoadForFrame): Added implementation
         to bind a C++ method to the 'onclick' event for the WebKit logo.
        (_tWinMain):
        * WinLauncher/WinLauncher.h:
        * WinLauncher/WinLauncher.vcproj: Add new DOMDefaultImpl.h file.

2011-06-17  Chang Shu  <cshu@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] [WK2] Support undo/redo in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=62809

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):

2011-06-17  Daniel Bates  <dbates@rim.com>

        Rubber-stamped by Eric Seidel.

        Remove run-javascriptcore-tests --skip-build option; Instead add --build/no-build options
        https://bugs.webkit.org/show_bug.cgi?id=62767

        Part 2 of 3

        Update the BuildBot master.cfg to use the new --no-build run-javascriptcore-tests
        command line option instead of --skip-build.

        We'll remove --skip-build from run-javascriptcore-test in a follow up patch once the
        master buildbot picks up the change.

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

2011-06-17  Daniel Bates  <dbates@rim.com>

        Rubber-stamped by Eric Seidel.

        Remove run-javascriptcore-tests --skip-build option; Instead add --build/no-build options
        https://bugs.webkit.org/show_bug.cgi?id=62767

        Part 1 of 3

        Towards renaming the option --skip-build to --no-build. Add --build/--no-build options to
        run-javascriptcore-tests. Also, add a remark about these options to the usage message
        printed by run-javascriptcore-tests.

        We'll remove --skip-build in a follow up patch once the master buildbot picks up the changes.

        * Scripts/run-javascriptcore-tests: Additionally, remove unnecessary initialization
          of $showHelp.

2011-06-17  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Replace GdkRectangle by cairo_rectangle_int_t
        https://bugs.webkit.org/show_bug.cgi?id=60687

        Replace GdkRectangle by cairo_rectangle_int_t.

        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp: Replace GdkRectangle by cairo_rectangle_int_t.
        (createBitmapContextFromWebView):
        * DumpRenderTree/gtk/TextInputController.cpp: Ditto.
        (firstRectForCharacterRangeCallback):

2011-06-16  Dmitry Lomov  <dslomov@google.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=62603
        Run run-api-tests on bots in debug mode.
        Release mode is disabled due to https://bugs.webkit.org/show_bug.cgi?id=61812.

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

2011-06-16  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Eric Seidel.

        [EFL] DumpRenderTree: Add GCController, PixelDumpSupport and
        WorkQueueItem.
        They will be plugged into the build system once the EFL's DRT is
        fully upstreamed.
        https://bugs.webkit.org/show_bug.cgi?id=61958

        * DumpRenderTree/efl: Added.
        * DumpRenderTree/efl/GCControllerEfl.cpp: Added.
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):
        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp: Added.
        (createBitmapContextFromWebView):
        * DumpRenderTree/efl/WorkQueueItemEfl.cpp: Added.
        (LoadItem::invoke):
        (LoadHTMLStringItem::invoke):
        (ReloadItem::invoke):
        (ScriptItem::invoke):
        (BackForwardItem::invoke):
        * DumpRenderTree/efl/WorkQueueItemEfl.h: Added.
        (WorkQueueItem::~WorkQueueItem):
        (LoadItem::LoadItem):
        (LoadHTMLStringItem::LoadHTMLStringItem):
        (ScriptItem::ScriptItem):
        (LoadingScriptItem::LoadingScriptItem):
        (LoadingScriptItem::invoke):
        (NonLoadingScriptItem::NonLoadingScriptItem):
        (NonLoadingScriptItem::invoke):
        (BackForwardItem::BackForwardItem):
        (BackItem::BackItem):
        (ForwardItem::ForwardItem):

2011-06-16  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, make sure the waf build checks the webKitBranchBuild
        preference like the perl scripts do.

        * waf/build/build_utils.py:
        * waf/build/settings.py:

2011-06-16  Tommy Widenflycht  <tommyw@google.com>

        Reviewed by Tony Gentilcore.

        MediaStream API: Runtime enabled features
        https://bugs.webkit.org/show_bug.cgi?id=62798

        Add the WebRuntimeFeatures API for Media Streams and enable the feature by default in DumpRenderTree.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2011-06-16  Torsten Kurbad  <gentoo@tk-webart.de>

        Reviewed by Eric Seidel.

        Add support for sys.platform == 'linux3' by relaxing
        conditional statements and/or extending lookup dicts.
        This way, Linux kernels >=3.0-rc1 get supported in the
        build process.
        https://bugs.webkit.org/show_bug.cgi?id=62730

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/file_lock.py:
        * Scripts/webkitpy/common/system/path_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-06-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r88796.
        http://trac.webkit.org/changeset/88796
        https://bugs.webkit.org/show_bug.cgi?id=62790

        It made fast/dom/nodesFromRect-basic.html time out on Qt,
        64-bit, debug mode (Requested by Ossy on #webkit).

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::nodesFromRect):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/qt/PlainTextControllerQt.cpp:
        (PlainTextController::plainText):
        * DumpRenderTree/qt/PlainTextControllerQt.h:

2011-06-15  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Revert the patches in r88995 and r88999; the http servers don't
        seem to be shutting down reliably.

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-06-15  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Add some debugging messages to triage problems introduced in
        r88995.

        * Scripts/webkitpy/layout_tests/port/http_server_base.py:

2011-06-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: should clean up stale server processes from a previous run
        https://bugs.webkit.org/show_bug.cgi?id=62615

        This change fixes cases where NRWT might start a server and then
        exit, leaving the server still running. Now NRWT should detect
        this case and clean up on the next run, without shutting down
        any processes it didn't start.

        This change also fixes a bug in executive.kill_process on UNIX
        where zombies weren't being handled properly.

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-06-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: fix http, websocket server startup, shutdown
        https://bugs.webkit.org/show_bug.cgi?id=62180

        This change refactors all of the server-related code to
        have consistent semantics. It pushes the start()/stop()
        logic into the base class and adds four much smaller routines
        for specialization:
        _prepare_config() - for optionally writing config files etc.
            to disk prior to starting the server
        _remove_stale_log_files()
        _spawn_process() - the actual launch of the subprocess
        _cleanup_after_stop() - and custom cleanup code

        Prior to this change the three server implementations were
        fairly inconsistent, leading to lots of weirdness on the bots
        with servers being left around, etc.

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-06-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        webkitpy: clean up code prior to functional changes for server startup/shutdown
        https://bugs.webkit.org/show_bug.cgi?id=62256

        This patch does a bunch of minor cleanup of the code, but there
        should be no functional changes except that all of the modules
        will now use the same exception type. Other changes include
        removing unused code paths and functions, pushing 'name' and
        'pid_file' into the base class of the server objects, and using
        the Filesystem object instead of the codecs, tempfile, and
        shutils modules.

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-06-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        webkitpy: add integration tests for new-run-webkit-httpd, stop calling shut_down_http_server
        https://bugs.webkit.org/show_bug.cgi?id=62251

        shut_down_http_server() was a total hack that was only used by
        new-run-webkit-httpd, so I've moved the code there and switched
        to using executive.kill_process() for the common case. The
        method itself will be removed in the patch on bug 59993.

        * Scripts/new-run-webkit-httpd:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py: Added.
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-06-15  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Fix test-webkitpy failure introduced in r88986.

        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-06-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        NRWT: doesn't support webarchives, has stale skipping logic.
        https://bugs.webkit.org/show_bug.cgi?id=58293

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-06-15  Jeremy Orlow  <jorlow@webkit.org>

        Change my email to @webkit.org

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

2011-06-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by David Hyatt.

        CSS 2.1: Support replaced elements with relative intrinsic sizes
        https://bugs.webkit.org/show_bug.cgi?id=15849

        CSS 2.1 failure: html4/replaced-intrinsic-ratio-001
        https://bugs.webkit.org/show_bug.cgi?id=53099

        Recognize *.htm tests in the old & new DRT implementation, needed for the vanilla css2.1 html4 tests.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/test_files.py:

2011-06-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add a statusbar to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=62634

        It shows the url of the current hovered link.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowConstructed): Create the GtkSatusbar.
        (mouseDidMoveOverElement): Update statusbar text.
        (browserWindowUIClientInit): Add implementation for
        mouseDidMoveOverElement().
        * MiniBrowser/gtk/GNUmakefile.am: Add new files to compilation.
        * MiniBrowser/gtk/WebBundle/WebBundleMain.c: Added.
        (mouseDidMoveOverElement): Pass the url of the current hovered
        link to the UI process.
        (didCreatePage): Set the UI client adding an implementation for
        mouseDidMoveOverElement().
        (WKBundleInitialize):
        * MiniBrowser/gtk/main.c:
        (createWKContextWithInjectedBundle): Create a global context with
        the injected bundle.
        (loadURI): Use the global context.
        (main):

2011-06-14  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        https://bugs.webkit.org/show_bug.cgi?id=62495
        Bug 62495 - combine windows and mac kill-old-processes script
        Add a platform agnostic script.  Remove the recently added mac flavor.
        Note: Leaving the windows one alone, since it is currently used by the WebKit bots.
        
        * BuildSlaveSupport/kill-old-processes: Added.
        * BuildSlaveSupport/mac: Removed.
        * BuildSlaveSupport/mac/kill-old-processes: Removed.

2011-06-14  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: handle worker exceptions cleanly
        https://bugs.webkit.org/show_bug.cgi?id=62614

        This change modifiers new-run-webkit-tests to handle exceptions
        raised by worker threads better, by:
        - capturing the worker's stack and logging it in the manager
        - propagating the worker's exception in the caller correctly
        - attempting to cancel the workers and clean up even when
          we get an unexpected exception

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-06-14  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] fast/dom/HTMLScriptElement/nested-execution.html failed
        https://bugs.webkit.org/show_bug.cgi?id=62227

        QtWebkit does not yet support different CacheModels. This change will 
        expose setCacheModel() with a stub implementation, which is enough to pass the LayoutTest.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setCacheModel):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-06-14  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] tst_QWebFrame::overloadedSlots() fails
        https://bugs.webkit.org/show_bug.cgi?id=37319

        Since we don't implictly convert 'document' object to QWebElement
        in metacalls anymore, change the controller to expect QVariantMap instead.

        The method plainText() was updated to use QVariantMap as well to let the bridge
        do the conversion directly for us.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::nodesFromRect):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/qt/PlainTextControllerQt.cpp:
        (PlainTextController::plainText):
        * DumpRenderTree/qt/PlainTextControllerQt.h:

2011-06-14  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Remove dead code in DumpRenderTree/TestNetscapePlugIn/main.cpp
        https://bugs.webkit.org/show_bug.cgi?id=62630

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New): remove dead variable 'forceCarbon'

2011-06-13  Hayato Ito  <hayato@chromium.org>

        Reviewed by Ojan Vafai.

        [NRWT] Fix a WebKitDriver so that it returns an actual hash value if DRT returns that.
        https://bugs.webkit.org/show_bug.cgi?id=59188

        A current WebKitDriver doesn't try to return an actual hash value if DRT does not return an image.
        WebKitDriver should always return an actual hash value if DRT returns that.

        No tests since I'll add sample reftests to make sure mismatch reftests work later,
        which should be in a separate patch.

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-06-13  Kent Tamura  <tkent@chromium.org>

        [Chromium-win] Fix two wrong assertions exposed by r88757.

        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp:
        (WebThemeEngineDRTWin::paintTrackbar):

2011-06-13  Alexey Proskuryakov  <ap@apple.com>

        Added an updated e-mail address for Matt Lilek, to make Bugzilla autocomplete
        and commit queue happy.

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

2011-06-13  Chris Rogers  <crogers@google.com>

        Unreviewed build fix.

        Build fix to chromium DRT until we can rebaseline some tests
        https://bugs.webkit.org/show_bug.cgi?id=62608

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2011-06-13  Chris Rogers  <crogers@google.com>

        Reviewed by Dirk Pranke.

        Add Web Audio support to chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=62306

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        (LayoutTestController::setEncodedAudioData):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::encodedAudioData):
        (LayoutTestController::shouldDumpAsAudio):
        (LayoutTestController::setShouldDumpAsAudio):
        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (DRTPrinter::handleAudioHeader):
        (TestShellPrinter::handleAudioHeader):
        * DumpRenderTree/chromium/TestEventPrinter.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::dump):

2011-06-13  Jaehun Lim  <ljaehun.lim@samsung.com>

        Reviewed by Eric Seidel.

        [EFL] Add load error handler to EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=62347

        Add a handler function of "load,error" to EWebLauncher.
        EWebLauncher now displays a simple error page on load errors.

        * EWebLauncher/main.c:
        (on_load_error):
        (browserCreate):

2011-06-13  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] [Qt] Eliminate duplicate TestNetscapePlugin implementation
        https://bugs.webkit.org/show_bug.cgi?id=62385

        Remove duplicate TestNetscapePlugIn implementation. Having two copies
        of this code makes keeping it in sync much more difficult. The files are
        almost identical and this change ports the X11 changes to main.cpp.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New): Do not set the plugin as windowless always. Doing this breaks
        some results on Qt and this seems to be unnecessary for the moment.
        (keyEventToChar): Added this helper which converts a X11 keycode into a char.
        (handleEventX11): Use the handler to properly convert the keycode. Do not print
        adjustCursorEvent output. The tests currently do not trigger this for Cocoa and thus
        it should not be in the results.
        (NPP_GetValue): Properly handle NPPVpluginNeedsXEmbed and make it clearer why the
        XP_UNIX block is first by guarding against using a null instance.
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro: Update source list add
        the XP_UNIX define for Linux.
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp: Removed.
        * GNUmakefile.am: Update source list.

2011-06-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r88671.
        http://trac.webkit.org/changeset/88671
        https://bugs.webkit.org/show_bug.cgi?id=62591

        "didn't work" (Requested by dpranke on #webkit).

        * Scripts/new-run-webkit-httpd:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-06-13  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        New test method on TestNetscapePlugin for https://bugs.webkit.org/show_bug.cgi?id=61482.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:

2011-06-13  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        webkitpy: add integration tests for new-run-webkit-httpd, stop calling shut_down_http_server
        https://bugs.webkit.org/show_bug.cgi?id=62251

        shut_down_http_server() was a total hack that was only used by
        new-run-webkit-httpd, so I've moved the code there and switched
        to using executive.kill_process() for the common case. The
        method itself will be removed in the patch on bug 59993.

        * Scripts/new-run-webkit-httpd:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py: Added.
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-06-13  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        rename ENABLE_NEW_FLEXBOX to ENABLE_CSS3_FLEXBOX
        https://bugs.webkit.org/show_bug.cgi?id=62578

        * Scripts/build-webkit:

2011-06-13  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        rename ENABLE_FLEXBOX to ENABLE_NEW_FLEXBOX
        https://bugs.webkit.org/show_bug.cgi?id=62545

        * Scripts/build-webkit:

2011-06-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Export an API similar to WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=57820

        Build GtkLauncher2 for WebKit2. It's actually the same GtkLauncher
        code, but linking to libwebkit2gtk.

        * GNUmakefile.am:
        * GtkLauncher/main.c:
        (createBrowser):
        (main):

2011-06-12  MORITA Hajime  <morrita@google.com>

        Unreviewed, rolling out r88625.
        http://trac.webkit.org/changeset/88625
        https://bugs.webkit.org/show_bug.cgi?id=61073

        Breaks SL Webkit2 Tests

        * WebKitTestRunner/Configurations/InjectedBundleCFLite.vsprops:
        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops:
        * WebKitTestRunner/Configurations/InjectedBundleCoreFoundation.vsprops:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2011-06-12  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] LayoutTestController needs setTextDirection implementation
        https://bugs.webkit.org/show_bug.cgi?id=62442

        Implements LayoutController.setTextDirection.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setTextDirection):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-06-12  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Hajime Morita.

        Add window.internals to WebKit2's WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=61073

        Test: fast/harness/internals-object.html

        * WebKitTestRunner/Configurations/InjectedBundleCFLite.vsprops:
        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops:
        * WebKitTestRunner/Configurations/InjectedBundleCoreFoundation.vsprops:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame): initialize window.internals
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2011-06-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r88616.
        http://trac.webkit.org/changeset/88616
        https://bugs.webkit.org/show_bug.cgi?id=62517

        It broke editing/text-iterator/findString.html (Requested by
        tonikitoo on #webkit).

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-06-12  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] LayoutTestController needs setTextDirection implementation
        https://bugs.webkit.org/show_bug.cgi?id=62442

        Implements LayoutController.setTextDirection.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setTextDirection):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-06-10  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: 'images' links on results.html don't work
        https://bugs.webkit.org/show_bug.cgi?id=62194

        Use relative path when generating images-diffs.html

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        Added _output_testname.

2011-06-10  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        Script to kill old processes on Mac.
        This matches the windows version.
        https://bugs.webkit.org/show_bug.cgi?id=62479  
        
        * BuildSlaveSupport/mac: Added.
        * BuildSlaveSupport/mac/kill-old-processes: Added.

2011-06-10  Adam Barth  <abarth@webkit.org>

        Reviewed by James Robinson.

        When sheriffbot reports failures on IRC instead of saying "(and more..)" it should say the number of tests that are failing
        https://bugs.webkit.org/show_bug.cgi?id=62489

        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:

2011-06-10  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        add a compile guard ENABLE(FLEXBOX)
        https://bugs.webkit.org/show_bug.cgi?id=62049

        * Scripts/build-webkit:

2011-06-10  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dimitri Glazkov.

        <rdar://problem/9562114> Fix DumpRenderTree build for production configuration.

        Ensure that DumpRenderTree can find libWebCoreTestSupport.dylib and the associated
        header file.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:

2011-06-09  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed rolling out r88471, because it broke plugin tests on Qt.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventX11):
        (NPP_GetValue):
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp: Added.
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_destroy_instance):
        (webkit_test_plugin_set_window):
        (executeScript):
        (webkit_test_plugin_new_stream):
        (webkit_test_plugin_destroy_stream):
        (webkit_test_plugin_stream_as_file):
        (webkit_test_plugin_write_ready):
        (webkit_test_plugin_write):
        (webkit_test_plugin_print):
        (keyEventToChar):
        (webkit_test_plugin_handle_event):
        (webkit_test_plugin_url_notify):
        (webkit_test_plugin_get_value):
        (webkit_test_plugin_set_value):
        (NP_GetMIMEDescription):
        (NP_Initialize):
        (NP_Shutdown):
        (NP_GetValue):
        * GNUmakefile.am:

2011-06-09  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] Implement the next bit of the TextInputController (hasMarkedText and markedRange)
        https://bugs.webkit.org/show_bug.cgi?id=55603

        Add callbacks to support hasMarkedText and markedRange and also clean up existing 
        TextInputController support.

        * DumpRenderTree/gtk/TextInputController.cpp:
        (setMarkedTextCallback): Accept parameters in terms of start and length, instead
        of start and end. This matches the other ports. Do not use GLib style early returns.
        (hasMarkedTextCallback): Added.
        (markedRangeCallback): Added.
        (insertTextCallback): Cleanup as described above.
        (unmarkTextCallback): Cleanup as described above.
        (firstRectForCharacterRangeCallback): Cleanup as described above.
        (selectedRangeCallback): Cleanup as described above.

2011-06-09  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: support webaudio in chromium driver
        https://bugs.webkit.org/show_bug.cgi?id=62226

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-06-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Added a test for Vector::reverse()
        https://bugs.webkit.org/show_bug.cgi?id=62393

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/VectorReverse.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2011-06-09  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Andreas Kling.

        [GTK] [Qt] Eliminate duplicate TestNetscapePlugin implementation
        https://bugs.webkit.org/show_bug.cgi?id=62385

        Remove duplicate TestNetscapePlugIn implementation. Having two copies
        of this code makes keeping it in sync much more difficult. The files are
        almost identical and this change ports the X11 changes to main.cpp.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (keyEventToChar): Added this helper which converts a X11 keycode into a char.
        (handleEventX11): Use the handler to properly convert the keycode. Do not print
        adjustCursorEvent output. The tests currently do not trigger this for Cocoa and thus
        it should not be in the results.
        (NPP_GetValue): Properly handle NPPVpluginNeedsXEmbed.
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro: Update source list.
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp: Removed.
        * GNUmakefile.am: Update source list.

2011-06-09  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Tony Chang.

        Test plugin should support event logging on the windows port.
        https://bugs.webkit.org/show_bug.cgi?id=61721

        The WebKit win port interprets a 0 return from plugin NPP_HandleEvent()
        calls to mean the plugin handled the event.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventWin): Return 0 for each event on windows.

2011-06-09  Chang Shu  <cshu@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] [WK2] Many editing tests failed on missing shouldBeginEditingInDOMRange:range printout
        https://bugs.webkit.org/show_bug.cgi?id=62381

        Activate QGraphicsScene and setFocus on QGraphicsItem to make sure the view has the focus.
        QWKPagePrivate::isViewFocused() will check it later.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2011-06-09  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        Teach Qt about window.internals
        https://bugs.webkit.org/show_bug.cgi?id=61074

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::initJSObjects):

2011-06-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Disable running layout tests on Mac EWS bots (and fix cr-linux bots to run them again)
        https://bugs.webkit.org/show_bug.cgi?id=62362

        The mac bots are failing inspector tests.  We don't know why yet.
        So for now, turning run-webkit-tests off for the mac-ews.

        Also noticed that due to the wrong variable name the cr-linux
        bots weren't running tests!

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:

2011-06-09  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonac.

        [Qt][WK2] Canvas tests make css2.1 ones failing
        https://bugs.webkit.org/show_bug.cgi?id=53427

        Adding a workaround for this issue by mimicing the behaviour of DumpRenderTree.
        Since the Qt port should eventually go to QRawFont, this issue will be resolved
        in the future. Both clearMemoryCaches() and removeAllApplicationFonts() are
        needed for the workaround.

        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp:
        (WTR::LayoutTestController::platformInitialize):

2011-06-09  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Provide a way in DRT to check the platform name
        https://bugs.webkit.org/show_bug.cgi?id=56855

        Patch for adding 'platformName' static property to DRT's
        LayoutController and provide platform specific implementations.

        In principle, this feature will be only of interest for writing
        accessibility tests, so that's why it's only implemented in the
        Mac, Gtk and Win platforms.

        * DumpRenderTree/LayoutTestController.h: New method platformName().
        * DumpRenderTree/LayoutTestController.cpp:
        (getPlatformNameCallback): New callback for 'platformName'.
        (LayoutTestController::staticValues): New static property.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::platformName): Implemented.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::platformName): Implemented.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::platformName): Implemented.

2011-06-08  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by James Robinson.

        Add mikelawther to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=62354

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

2011-06-08  Kent Tamura  <tkent@chromium.org>

        [Chromium] Fix a typo.

        * DumpRenderTree/chromium/WebThemeControlDRTWin.cpp:
        (WebThemeControlDRTWin::draw):

2011-06-08  Kent Tamura  <tkent@chromium.org>

        Reviewed by Hajime Morita.

        [Chromium] Support vertical sliders in Windows DRT
        https://bugs.webkit.org/show_bug.cgi?id=62352

        * DumpRenderTree/chromium/WebThemeControlDRTWin.cpp:
        (WebThemeControlDRTWin::draw):
          Paint VerticalSliderThumbType and VerticalSliderTrackType.
        * DumpRenderTree/chromium/WebThemeControlDRTWin.h:
          Add VerticalSliderTrackType and VerticalSliderThumbType.
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp:
        (WebThemeEngineDRTWin::paintTrackbar):
          Convert Windows identifiers to the internal identifiers for vertical sliders.

2011-06-08  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        add a short-flag for --experimental-fully-parallel
        https://bugs.webkit.org/show_bug.cgi?id=62321

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-06-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: don't turn the tree red when there are new passes
        https://bugs.webkit.org/show_bug.cgi?id=62311

        Look for "new passes" instead of "passed unexpectedly" in evaluateCommand
        to match commandComplete.

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

2011-06-08  Tom Hudson  <tomhudson@google.com>

        Reviewed by Mihai Parparita.

        Allow sorting in RebaselineServer based on 'metric' field in unexpected_results.json
        https://bugs.webkit.org/show_bug.cgi?id=60964

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
        Add 'Sort tests by metric' link.
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
        (disableSorting): Activate 'Sort tests by metric' link.
        (enableSorting): Deactivate 'Sort tests by metric' link.
        (selectDirectory): Call enableSorting()/disableSorting() depending
        on currently selected failure type, and sort tests if requested.
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
        New .disabled-control class for deactivated links.

2011-06-08  Tom Sepez  <tsepez@chromium.org>

        Reviewed by Adam Barth.

        Add web permissions callbacks for mixed content blocking.
        https://bugs.webkit.org/show_bug.cgi?id=61946

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setAllowDisplayOfInsecureContent):
        (LayoutTestController::setAllowRunningOfInsecureContent):
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/WebPermissions.cpp:
        (WebPermissions::allowDisplayingInsecureContent):
        (WebPermissions::allowRunningInsecureContent):
        (WebPermissions::setDisplayingInsecureContentAllowed):
        (WebPermissions::setRunningInsecureContentAllowed):
        (WebPermissions::reset):
        * DumpRenderTree/chromium/WebPermissions.h:

2011-06-08  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        webkitpy: fix typo causing us to skip the port unit tests in chromium_linux
        https://bugs.webkit.org/show_bug.cgi?id=62259

        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:

2011-06-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: master.cfg errors when nrwt successfully runs test
        https://bugs.webkit.org/show_bug.cgi?id=62303

        Access self.incorrectLayoutLines instead of incorrectLayoutLines in evaluateCommand.

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

2011-06-08  Greg Simon  <gregsimon@chromium.org>

        Reviewed by Dimitri Glazkov.

        Control Indexeddb backends from LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=61000

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setOverrideIndexedDBBackingStore):
        (LayoutTestController::clearAllDatabases):
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-06-08  Andreas Kling  <kling@webkit.org>

        Add Pierre Rossi to contributors list for EZ-CC.

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

2011-06-08  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Andreas Kling.

        Add Ilya Sherman to list of committers
        https://bugs.webkit.org/show_bug.cgi?id=62270

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

2011-06-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: Bot master should print useful information on waterfall/console for nrwt
        https://bugs.webkit.org/show_bug.cgi?id=62178

        Added commandComplete and evaluateCommand for NewRunWebKitTests class
        to parse new-run-webkit-tests' results.

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

2011-06-07  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        webkitpy: add a popen() call to executive
        https://bugs.webkit.org/show_bug.cgi?id=62179

        This change adds a popen() wrapper call to the Executive object.
        This will allow other webkitpy scripts that currently call
        subprocess directly to use Executive, instead.

        No additional tests are necessary (the existing tests cover the code).

        * Scripts/webkitpy/common/system/executive.py:

2011-06-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove repeated IPC traffic from SetRenderTreeSize message
        https://bugs.webkit.org/show_bug.cgi?id=62244

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        Add stub for didLayoutForFrame.

2011-06-07  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        rebaseline-chromium-webkit-tests: fix baselining order for linux, linux_x86_64
        https://bugs.webkit.org/show_bug.cgi?id=62241

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-06-07  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Enable tests on the mac-ews

        When we bring the mac-ews back up, we're going to try running tests!

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:

2011-06-07  Dmitry Lomov  <dslomov@google.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=62215
        Allow comparisons with 0 in LIKELY and UNLIKELY macros.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-06-07  Nico Weber  <thakis@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] -Wdelete-non-virtual-dtor pass for DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=62210

        The change to TestEventPrinter fixes a latent bug, because
        objects are deleted through the TestEventPrinter type, but none
        of the subclasses have destructors or non-POD members.

        The changes to NotificationPresenter and WebViewHost do _not_ to fix a
        real bug, they just make clang's -Wdelete-non-virtual-dtor happy. As
        discussed at http://codereview.chromium.org/7094005/, we prefer making
        leaf class destructors virtual over making the leaf classes final.

        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::~NotificationPresenter):
        * DumpRenderTree/chromium/NotificationPresenter.h:
        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (TestEventPrinter::~TestEventPrinter):
        * DumpRenderTree/chromium/TestEventPrinter.h:
        * DumpRenderTree/chromium/WebViewHost.h:

2011-06-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Dirk Pranke.

        [chromium] Chromium bots on build.webkit.org don't upload results.html
        https://bugs.webkit.org/show_bug.cgi?id=61961

        Don't fix the path on chromium port erroneously.

        * BuildSlaveSupport/test-result-archive:

2011-06-06  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ build by ensuring that the autogenerated sources
        necessary for libWebCoreInternals are recorded in a predeclared
        variable before assigning to BUILT_SOURCES.

        * GNUmakefile.am: Predeclare libwebcoreinternals_built_sources.

2011-06-06  Yong Li  <yoli@rim.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=62097
        Fix the problem that integral bitfield check incorrectly barked at ?: expressions.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-06-06  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Enable feature/symbol detection in NWRT/GTK
        https://bugs.webkit.org/show_bug.cgi?id=62136

        Disable feature detection through DRT, since we don't support it,
        and set the libwebcore patch correctly so that symbol detection
        through 'nm' works.

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2011-06-06  Shishir Agrawal  <shishir@chromium.org>

        Reviewed by Tony Gentilcore.

        Add a "prerender" state for page visibility.
        https://bugs.webkit.org/show_bug.cgi?id=62062

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setPageVisibility):

2011-06-06  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Implement download feature for QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=61865

        Buildfix for --minimal and CONFIG+=qt_minimal build after r88161.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow):
        * QtTestBrowser/launcherwindow.h:

2011-06-06  Barát Tibor  <Barat.Tibor@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt] Implement download feature for QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=61865

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::downloadRequest):
        (LauncherWindow::fileDownloadFinished):
        * QtTestBrowser/launcherwindow.h:

2011-06-04  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        Make DumpRenderTree initialize window.internals.
        https://bugs.webkit.org/show_bug.cgi?id=61076

        * DumpRenderTree/win/DumpRenderTreeCommon.vsprops: link WebCoreTestSupport.
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didClearWindowObjectForFrameInStandardWorld):

2011-06-06  Alexandru Chiculita  <achicu@adobe.com>

        Reviewed by Kent Tamura.

        Add ENABLE_CSS_EXCLUSIONS support for build-webkit script
        https://bugs.webkit.org/show_bug.cgi?id=61628

        * Scripts/build-webkit:

2011-06-06  Mihnea Ovidenie  <mihnea@adobe.com>

        Reviewed by Kent Tamura.

        Add ENABLE(CSS_REGIONS) guard for CSS Regions support
        https://bugs.webkit.org/show_bug.cgi?id=61631

        * Scripts/build-webkit:

2011-06-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the GTK+ build.

        * GNUmakefile.am: Use javascriptcore_cflags when building libWebCoreInternals.

2011-06-05  Alexey Proskuryakov  <ap@apple.com>

        Add an e-mail address for Cameron McCormack that matches Bugzilla (so that auto-completion
        works properly).

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

2011-06-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Update git branch build dir handling to match what other
        WebKit scripts expect, so other scripts work properly with wx.

        * waf/build/build_utils.py:
        * waf/build/settings.py:

2011-06-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Restore the PPC build and allow users to specify architectures
        to build on Mac.

        * waf/build/settings.py:
        * wx/install-unix-extras:

2011-06-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fixes for recent trunk changes.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setTextDirection):
        * waf/build/settings.py:

2011-06-04  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ build.

        * GNUmakefile.am: Add some missing newline escape.

2011-06-03  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the GTK+ bulid.

        * GNUmakefile.am: Add JSDOMWrapper.cpp to the libWebCoreInternals
        source list.

2011-06-03  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        nrwt: should skip chromium test expectation overrides on upstream bots
        https://bugs.webkit.org/show_bug.cgi?id=61888

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2011-06-03  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: minor logging, code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=62055

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-06-03  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the build failure on the GTK+ 32-bit Release bot.

        * GNUmakefile.am: Add JSInternal.{cpp,h} to the BUILT_SOURCES list.

2011-05-31  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Ryosuke Niwa.

        [GTK] Support smart replace for the pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=61734

        Call into the DumpRenderTreeSupportGtk hooks to toggle smart replace.
        This is required to produce consistent test results.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Set the smart replace setting to on by default.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setSmartInsertDeleteEnabled): Added an implementation of this
        methods which calls into DumpRenderTreeSupportGtk.

2011-06-03  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dimitri Glazkov.

        Teach Gtk build about window.internals
        https://bugs.webkit.org/show_bug.cgi?id=61071

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewWindowObjectCleared): Inject the new internals object when the
        window object clears.
        * GNUmakefile.am: Add new source files and includes necessary for window.internals.
        Also do a little bit of cleanup.

2011-06-03  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        Worker may not be stopped after LT.
        https://bugs.webkit.org/show_bug.cgi?id=61847

        Re-submit a variant of the first fix for this bug. It's possible
        that actually calling cleanup() in the worker threads was taking
        too long and we triggered the assertions in the manager thread.

        I've bumped up the timeout in the manager and added better
        diagnostics. I also cleaned up the cleanup() code a bit because
        there was some unnecessary if-checks.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-06-03  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: fix duplicate logging regression
        https://bugs.webkit.org/show_bug.cgi?id=61981

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:

2011-06-03  Robert Kroeger  <rjkroege@chromium.org>

        Reviewed by Adam Barth.

        Modified addTouchPoint to correctly re-use touchPoint id values starting
        from the lowest not-un-use touchPoint id as is done by the embedder
        APIs. (Fixes BUGCR36415)

        https://bugs.webkit.org/show_bug.cgi?id=62016

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::addTouchPoint):

2011-06-03  Cary Clark  <caryclark@google.com>

        Reviewed by Eric Seidel.

        Draw DRT scroll bar thumb with CG when WebKit renders with Skia
        https://bugs.webkit.org/show_bug.cgi?id=61534

        Skia on Mac uses Skia to render WebKit, and CG
        to render UI elements. The CG elements need a
        transcribed graphics context that preserves the
        canvas matrix, and the canvas clip.

        The SkiaBitLocker utility class sets up a CGContext
        from the SkCanvas, locks the bitmap's bits, and
        releases the lock when the class goes out of scope.

        The SkiaBitLocker implementation is described by
        this patch:
        http://codereview.chromium.org/7031006/

        When WebKit uses Skia for rendering, the WebCanvas
        is an SkCanvas. Create an equivalent CGContext to
        draw the scrollbar thumb.

        As the Chrome Mac port does not yet use Skia, this
        patch has no effect and requires no tests.

        * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm:
        (WebThemeEngineDRTMac::paintHIThemeScrollbarThumb):

2011-06-03  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix.

        Fix typo.

        * Scripts/old-run-webkit-tests:

2011-06-03  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Print error message when there is no httpd present on the system
        https://bugs.webkit.org/show_bug.cgi?id=61939

        * Scripts/old-run-webkit-tests: Propose to run with --no-httpd.
        * Scripts/webkitperl/httpd.pm:

2011-06-03  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Chromium] cpu-profiler-profiling layout test is flaky on Linux Debug.
        https://bugs.webkit.org/show_bug.cgi?id=61533

        Skip cpu-profiler-profiling in debug, implement a fast headless alternative.

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        (DRTDevToolsAgent::setJavaScriptProfilingEnabled):
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setJavaScriptProfilingEnabled):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setJavaScriptProfilingEnabled):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setJavaScriptProfilingEnabled):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-06-02  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        NRWT needs a way to log to a file without including backspaces without needing --verbose
        https://bugs.webkit.org/show_bug.cgi?id=60328

        This change modifies NRWT so that if it can tell if it is
        writing to a terminal, it will overwrite any messages printed
        in the 'one-line-progress' and 'updates' print options, and if
        not (or if --verbose was specified) the messages will be printed
        without backspaces.

        If the overwriting updates are disabled, one-line-progress will
        only print every 10 seconds instead of on every update. This
        ensures that we still get updates once in a while while the
        tests are running, even if we're not in --verbose mode. Note
        that one-line-progress will now still be printed in --verbose,
        since it's useful as long as you're not flooded with the
        updates.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:

2011-06-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] autogen.sh is run twice for each buld on the bots
        https://bugs.webkit.org/show_bug.cgi?id=61951

        * Scripts/webkitdirs.pm: Only check the previous autotools arguments
        for the WebKit project. This prevents build-jsc runs from forcing subsequent
        build-webkit runs to re-rerun autogen.sh.

2011-06-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87946.
        http://trac.webkit.org/changeset/87946
        https://bugs.webkit.org/show_bug.cgi?id=61965

        Cause NRWT to break (Requested by abarth|gardener on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-06-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Add build logistics and plumbing for window.internals object.
        https://bugs.webkit.org/show_bug.cgi?id=60313

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added linking new WebCoreTestSupport library.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::bindJSObjectsToWindow): Added injection code.
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]): Ditto.

2011-06-02  Hao Zheng  <zhenghao@chromium.org>

        Reviewed by Dirk Pranke.

        Call cleanup() explicitly at the end of worker.run().
        https://bugs.webkit.org/show_bug.cgi?id=61847

        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-06-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r87926.
        http://trac.webkit.org/changeset/87926
        https://bugs.webkit.org/show_bug.cgi?id=60313

        Fails to find WebCoreTestSupport.dylib on bots.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::bindJSObjectsToWindow):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]):

2011-05-21  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Add build logistics and plumbing for window.internals object.
        https://bugs.webkit.org/show_bug.cgi?id=60313

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added linking new WebCoreTestSupport library.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::bindJSObjectsToWindow): Added injection code.
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]): Ditto.

2011-06-02  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Eric Seidel.

        Adjust efl coding style to more efl directories
        https://bugs.webkit.org/show_bug.cgi?id=61903

        * Scripts/webkitpy/style/checker.py: Adjust efl coding style to efl directories.

2011-06-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        old-run-webkit-tests: add support for audio files
        https://bugs.webkit.org/show_bug.cgi?id=57992

        * Scripts/old-run-webkit-tests:

2011-06-01  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Adam Barth.

        Implement layoutTestController.setImagesAllowed for controlling the respective behavior of the WebPermissionClient
        https://bugs.webkit.org/show_bug.cgi?id=34314

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setImagesAllowed):
        (LayoutTestController::setStorageAllowed):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebPermissions.cpp: Copied from Tools/DumpRenderTree/chromium/WebPermissions.h.
        (WebPermissions::WebPermissions):
        (WebPermissions::~WebPermissions):
        (WebPermissions::allowImages):
        (WebPermissions::allowStorage):
        (WebPermissions::setImagesAllowed):
        (WebPermissions::setStorageAllowed):
        (WebPermissions::reset):
        * DumpRenderTree/chromium/WebPermissions.h:

2011-06-01  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Tony Chang.

        Test plugin should support event logging on the windows port.
        https://bugs.webkit.org/show_bug.cgi?id=61721

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventWin): Well, handle them.

2011-06-01  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Use correct file name for dragging out images.
        https://bugs.webkit.org/show_bug.cgi?id=24887

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::dumpFilenameBeingDragged):
        * DumpRenderTree/chromium/EventSender.h:

2011-06-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: make webaudio work w/o content-length header
        https://bugs.webkit.org/show_bug.cgi?id=61819

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-06-01  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Andreas Kling.

        [Qt][WK2] Add QGLWidget viewport support to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=61802

        Add command line parameter and menu item to MiniBrowser application 
        enabling use of QGLWidget for browser viewport.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::toggleGLViewport):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):

2011-06-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Print out autogen arguments when they differ from the last set, to help
        with debugging build issues.

        * Scripts/webkitdirs.pm: Print out previous and current build arguments
        when they differ.

2011-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] run-launcher should run MiniBrowser in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=61858

        * Scripts/run-launcher: Check whether -2 command line option has
        been passed and run MiniBrowser instead of GtkLauncher.

2011-05-31  Hao Zheng  <zhenghao@chromium.org>

        Reviewed by Dirk Pranke.

        Fix exception in verbose printing mode.
        https://bugs.webkit.org/show_bug.cgi?id=61723

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:

2011-05-31  Yong Li  <yoli@rim.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=54807
        We have been assuming plain bitfields (like "int a : 31") are always signed integers.
        However some compilers can treat them as unsigned. For example, RVCT 4.0 states plain
        bitfields (declared without either signed or unsigned qualifiers) are treats as unsigned.
        http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0348c/Babjddhe.html
        Although we can use "--signed-bitfields" flag to make RVCT 4.0 behave as most other compilers,
        always using "signed"/"unsigned" qualifier to declare integral type bitfields is still a good
        rule we should have in order to make our code independent from compilers and compiler flags.

        * Scripts/webkitpy/style/checkers/cpp.py:

2011-05-31  Hironori Bono  <hbono@chromium.org>

        Reviewed by Eric Seidel.

        Add a JavaScript function layoutTestController.setTextDirection().
        https://bugs.webkit.org/show_bug.cgi?id=50952

        This change adds a new JavaScript function setTextDirection() to the
        LayoutTestController class of Safari and Chrome to write layout tests
        that changes the text direction of an editable element.

        * DumpRenderTree/LayoutTestController.cpp:
        (setTextDirectionCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setTextDirection):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setTextDirection):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setTextDirection):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setTextDirection):

2011-05-31  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] User-agent list of Qt test browsers is very outdated
        https://bugs.webkit.org/show_bug.cgi?id=61531

        The user can edit the user-agent manually, so there's no need to have
        a super complete and up to date list, but it's nice to have it
        minimally updated.

        * MiniBrowser/qt/useragentlist.txt:
        * QtTestBrowser/useragentlist.txt:

2011-03-30  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Adam Roben.

        [GTK] [WebKit2] Implement a basic WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=57068

        Add an implementation of WebKitTestRunner for GTK+.

        * Scripts/build-webkittestrunner: Added knowledge of GTK+ TestRunner.
        * Scripts/old-run-webkit-tests: Ditto.
        * Scripts/run-launcher: Ditto.
        * Scripts/webkitdirs.pm: Ditto.
        * WebKitTestRunner/GNUmakefile.am: Added.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp: Added.
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleGtk.cpp: Copied from Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp.
        * WebKitTestRunner/InjectedBundle/gtk/LayoutTestControllerGtk.cpp: Copied from Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp.
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp: Added.
        * WebKitTestRunner/gtk/TestControllerGtk.cpp: Added.
        * WebKitTestRunner/gtk/TestInvocationGtk.cpp: Copied from Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp.
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/gtk/main.cpp: Copied from Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp.
        (main): Added.

2011-05-31  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: doesn't wait for children if it gets a ctrl-c
        https://bugs.webkit.org/show_bug.cgi?id=60241

        * Scripts/new-run-webkit-tests:

2011-05-31  Eric Seidel  <eric@webkit.org>

        Reviewed by David Kilzer.

        webkitpy should create zips with zip -9
        https://bugs.webkit.org/show_bug.cgi?id=61789

        Dave Kilzer suggested we add this to make zips uploaded to bugzilla smaller.

        * Scripts/webkitpy/common/system/workspace.py:
        * Scripts/webkitpy/common/system/workspace_unittest.py:

2011-05-31  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt] Implement find feature for QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=61425

        Buildfix for --minimal and CONFIG+=qt_minimal build.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::createChrome):
        * QtTestBrowser/launcherwindow.h:

2011-05-31  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt] Implement find feature for QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=61425

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::createChrome):
        (LauncherWindow::showFindBar):
        (LauncherWindow::find):
        * QtTestBrowser/launcherwindow.h:

2011-05-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement JavaScript dialogs in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=61725

        * MiniBrowser/gtk/BrowserWindow.c:
        (WKStringGetCString): Helper function to get a UTF-8 c string from
        a WKStringRef.
        (WKURLGetCString): Helper function to get a UTF-8 c string from a
        WKURLRef.
        (browserWindowUpdateURL): Update to use WKURLGetCString.
        (didReceiveTitleForFrame): Update to use WKStringGetCString.
        (createMessageDialog): Create a GtkMessageDialog.
        (runJavaScriptAlert):
        (runJavaScriptConfirm):
        (runJavaScriptPrompt):
        (browserWindowUIClientInit):

2011-05-29  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket closing handshake
        https://bugs.webkit.org/show_bug.cgi?id=35721

        * Scripts/webkitpy/thirdparty/__init__.py:
        Pull in pywebsocket 0.6b1. We need to update pywebsocket
        to get the right behavior of closing handshake.

2011-05-29  Daniel Bates  <dbates@rim.com>

        Reviewed by David Kilzer.

        REGRESSION (r86515): svn-apply ignores diffs that omit line count in chunk range
        https://bugs.webkit.org/show_bug.cgi?id=61162

        Fixes an issue where svn-apply may ignore a diff that contains a chunk range line
        that omits a line count. In particular, the chunk range regular expression does
        not match a chunk range line that omits a line count. GNU diff(1) will omit the
        line count in the chunk range if the line count is exactly 1. For example, appending
        a new line to the end of an existing file F that contains exactly one line of text will
        be represented in a diff with a chunk range line that omits the line count for F.

        * Scripts/VCSUtils.pm:
          (parseChunkRange): Added.
        * Scripts/webkitperl/VCSUtils_unittest/parseChunkRange.pl: Added.
        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
          - Added unit test "Git: Append new line to the end of an existing file".

2011-05-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        EWS builds patches that fail to build twice, which seems useless and slows down the bots
        https://bugs.webkit.org/show_bug.cgi?id=55585

        This patch switches all the early warning system bots over to the new
        PatchAnalysisTask-based infrastructure.  This patch makes these bots
        more efficient (in the case where patches fail to build) and paves the
        way for running tests on these bots!

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py:
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2011-05-28  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Kent Tamura.

        Add bashi as a committer.

        https://bugs.webkit.org/show_bug.cgi?id=61685

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

2011-05-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        When checking whether the tree is red, the EWS posts a link to the wrong log
        https://bugs.webkit.org/show_bug.cgi?id=61072

        We need to cache the original script error because that contains the
        failure log we want to upload.  If we don't cache that script error,
        self._script_error will get overwritten when we sanity check the clean
        tree (and it also has test failures).

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
            - This testing approach is slightly goofy.  We'd like to use
              assertRaisesRegexp, but that's not available until Python 2.7.
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:

2011-05-27  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Adam Barth.

        Add layoutTestController.setStorageAllowed() to control whether access
        to the localStorage API is enabled via the WebPermissionClient
        https://bugs.webkit.org/show_bug.cgi?id=61581

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setStorageAllowed):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::createNewWindow):
        * DumpRenderTree/chromium/TestShell.h:
        * DumpRenderTree/chromium/WebPermissions.h: Added.
        (WebPermissions::WebPermissions):
        (WebPermissions::allowStorage):
        (WebPermissions::setStorageAllowed):
        (WebPermissions::reset):

2011-05-27  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        NRWT: clean up metered_stream code in preparation for 'nooverwriting' patch
        https://bugs.webkit.org/show_bug.cgi?id=60326

        This patch removes a lot of the complexity from the
        metered_stream implementation that was unnecessary since there
        was only one caller and the logic could be coordinated better.

        There should be no functional changes in this patch, just code
        getting deleted and cleaned up.

        * Scripts/webkitpy/layout_tests/layout_package/metered_stream.py:
        * Scripts/webkitpy/layout_tests/layout_package/metered_stream_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:

2011-05-27  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        NRWT: minor cleanup in printing module
        https://bugs.webkit.org/show_bug.cgi?id=60329

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:

2011-05-27  Steve Lacey  <sjl@chromium.org>

        Reviewed by David Levin.

        Add sjl@chromium.org as a committer.

        https://bugs.webkit.org/show_bug.cgi?id=61672

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

2011-05-27  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        NRWT: remove --print detailed-progress
        https://bugs.webkit.org/show_bug.cgi?id=60324

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-05-27  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        NRWT: debug messages from the workers are being logged twice
        https://bugs.webkit.org/show_bug.cgi?id=60428

        It looks like when the workers are run in separate processes
        we end up getting two copies of every log message they print.
        This has to do with the multiprocessing module on UNIX cloning
        the log configuration in a way I wasn't expecting, and so two
        log handlers end up getting registered.

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-05-27  Adam Roben  <aroben@apple.com>

        Always decode tester names from location.hash

        When navigating directly to a tester-specific URL (e.g.,
        <http://build.webkit.org/TestFailures/#/Windows%207%20Release%20(Tests)>), you could end up
        with a URL-encoded tester name in the page, and then the encoded name could make its way
        into Bugzilla bugs. Bad!

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype.parseHash): Pass the tester name we got from location.hash through
        decodeURIComponent before trying to use it.

2011-05-27  Adam Roben  <aroben@apple.com>

        Remove testing code that snuck into r87528

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForNewBugLink): Remove a line I was using for some testing.

2011-05-27  Adam Roben  <aroben@apple.com>

        Add links to TestFailures to easily file bugs about failing tests

        Fixes <http://webkit.org/b/61636> <rdar://problem/9514886> TestFailures page should have
        links to file bugs for failing tests

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.resultsPageURL): New helper function to return the URL to results.html
        for a particular build.
        (Builder.prototype._getFailingTests): Use resultsPageURL.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder): Add links to file bugs about each set of
        failures.
        (ViewController.prototype._domForBuildName): Use resultsPageURL.
        (ViewController.prototype._domForNewBugLink): Added. Creates an element that represents the
        new bug link. The bug has a title, description, and URL already filled in for you!

2011-05-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87464.
        http://trac.webkit.org/changeset/87464
        https://bugs.webkit.org/show_bug.cgi?id=61643

        client-close/server-close tests are flaky on Chromium Mac and
        Windows (Requested by aklein on #webkit).

        * Scripts/webkitpy/thirdparty/__init__.py:

2011-05-27  Alexey Proskuryakov  <ap@apple.com>

        Added Douglas Davidson to contributors list for easier CC'ing.

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

2011-05-26  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Fix worldID and destinationDomain argument names
        https://bugs.webkit.org/show_bug.cgi?id=61571

        As part of working on r87423, I noticed a couple of inconsistencies in
        argument names:
        - We would use worldId in .h files but worldID in .cpp files.
          Standardize on the latter
        - SecurityOrigin::addOriginAccessWhitelistEntry would take a
          destinationDomains argument, even though the actual parameter was for
          a single domain (renamed to be singular).

        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::evaluateScriptInIsolatedWorld):

2011-05-26  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket closing handshake
        https://bugs.webkit.org/show_bug.cgi?id=35721

        * Scripts/webkitpy/thirdparty/__init__.py:
        Pull in pywebsocket 0.6b1. We need to update pywebsocket
        to get the right behavior of closing handshake.

2011-05-26  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Andreas Kling.

        WebKitTestRunner needs layoutTestController.setAuthorAndUserStylesEnabled
        https://bugs.webkit.org/show_bug.cgi?id=42676

        Implemented layoutTestController.setAuthorAndUserStylesEnabled for WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setAuthorAndUserStylesEnabled):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-05-26  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] QtTestBrowser "Switch User Agent" dialog is broken
        https://bugs.webkit.org/show_bug.cgi?id=61527

        The setMaximumHeight() call is unecessary and breaks the dialog at
        least on my setup.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::showUserAgentDialog):

2011-05-02  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Roben.

        [Qt] Allow popup windows from plugins when initiated by a user gesture

        https://bugs.webkit.org/show_bug.cgi?id=41292

        Support parameters introduced in plugin-initiate-popup-window.html

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_handle_event):

2011-05-26  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Support cross-origin XMLHttpRequest in isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=59843

        Expose setIsolatedWorldSecurityOrigin in LayoutTestController.

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

2011-05-25  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Status bar, toolbar, and menu bar checks should be in the injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=61474
        <rdar://problem/9468337>

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Add empty entries in the WKBundlePageUIClient.

2011-05-26  Andreas Kling  <kling@webkit.org>

        Unreviewed, correct address to webkit-committers mailing list.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:

2011-05-25  Adam Roben  <aroben@apple.com>

        Don't assume that builds finish in the order they were started

        Fixes <http://webkit.org/b/61464> TestFailures page shows failures from a not-most-recent
        build when one slave is taking a long time to finish a build

        Reviewed by Antti Koivisto.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getMostRecentCompletedBuildNumber): Don't assume that all builds that are
        newer than the oldest in-progress build are also themselves in progress. Just check whether
        each build is actually in progress (as signified by its presence in the currentBuilds set).

2011-05-25  Adam Roben  <aroben@apple.com>

        Correctly detect cases where only a single test failed/crashed/timed out

        Fixes <http://webkit.org/b/61463> TestFailures page doesn't show testers with only a single
        failing test

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Don't require "test cases" to be plural. It
        will be singular when only a single test fails/crashes/times out.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayTesters): Only pluralize "test" when more than one test
        failed/crashed/timed out.

2011-05-26  Tom Hudson  <tomhudson@google.com>

        Reviewed by Tony Chang.

        Add flags to Chromium ImageDiff to write image comparison metrics on
        stdout.
        https://bugs.webkit.org/show_bug.cgi?id=60569

        * DumpRenderTree/chromium/ImageDiff.cpp:
        (Image::createFromStdin): Fix spelling.
        (maxOf3): New function to do 3-way maximum.
        (getRedComponent): Extract red component from ABGR packed encoding.
        (getGreenComponent): Extract green component from ABGR packed encoding.
        (getBlueComponent): Extract blue component from ABGR packed encoding.
        (weightedPercentageDifferent): Determine % of pixels different in two
        images multiplied by intensity difference of each pixel.
        (printHelp): Document new arguments.
        (compareImages): Parameterize.
        (untestedCompareImages): Parameterize.
        (diffImages): Parameterize; write results on stdout if requested.
        (main): Parse new arguments.

2011-05-25  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        WebKitTestRunner needs layoutTestController.setPrivateBrowsingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=42697

        Implemented layoutTestController.setPrivateBrowsingEnabled for WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setPrivateBrowsingEnabled):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-05-25  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION (WebKit2): Crash in Flash on USA Today photo gallery
        https://bugs.webkit.org/show_bug.cgi?id=61428
        <rdar://problem/9457006>

        Reviewed by Adam Roben.

        The crash occurs when Flash posts a message to a window that it
        creates, and in processing the message, it calls NPN_Evaluate to
        evaluate JavaScript that removes the plug-in from the page. Flash then
        crashes when we return to Flash code.

        This test emulates that behavior.

        * DumpRenderTree/TestNetscapePlugIn/win/CallJSThatDestroysPlugin.cpp: Added.
        (CallJSThatDestroysPlugin::CallJSThatDestroysPlugin):
        Initialize member vars.
        (CallJSThatDestroysPlugin::~CallJSThatDestroysPlugin):
        Remove our custom property from the message window, and destroy it.
        (CallJSThatDestroysPlugin::NPP_Destroy):
        Set m_isDestroyed, log that the plug-in was destroyed, and notify the
        layout test controller that we're done.
        (wndProc):
        Get the PluginTest object, and call its runTest() function.
        (CallJSThatDestroysPlugin::NPP_New):
        Setup the test: register a class for the message-only window, create
        it, and post a message to it to run the test.
        (CallJSThatDestroysPlugin::runTest):
        Execute JS that removes the plug-in from the page, and if we're not
        destroyed, log a success message.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        Add new test to project.

2011-05-25  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        webkitpy's NetworkTransaction shouldn't use mechanize
        https://bugs.webkit.org/show_bug.cgi?id=61450

        mechanize.HTTPError is just an alias for urllib2.HTTPError, so
        use urllib2 directly.  Re-add NetworkTransaction to
        test_results_uploader.py (reverting r87124).

        * Scripts/webkitpy/common/net/networktransaction.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results_uploader.py:

2011-05-25  Kevin Ollivier  <kevino@theolliviers.com>

        [Chromium] Unreviewed build fix. Do not define WTF/JS_EXPORT_PRIVATE to JS_EXPORTDATA
        until the port begins using those export macros.

        * DumpRenderTree/chromium/config.h:

2011-05-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87257.
        http://trac.webkit.org/changeset/87257
        https://bugs.webkit.org/show_bug.cgi?id=61457

        This broke layout tests, see bug 61431. (Requested by
        hwennborg on #webkit).

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

2011-05-25  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] fast/css/disabled-author-styles.html failed
        https://bugs.webkit.org/show_bug.cgi?id=61438

        Implemented API setAuthorAndUserStylesEnabled in LayoutTestControllerQt.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setAuthorAndUserStylesEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-05-25  Adam Roben  <aroben@apple.com>

        Identify, rather than skip, builds where run-webkit-tests exited early due to too many failures

        Fixes <http://webkit.org/b/61441> TestFailures page should show when run-webkit-tests
        started exiting early due to too many crashes, timeouts, or failures

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Rather than returning -1 ("unknown") when
        run-webkit-tests exits early due to too many failures, pass that information in another
        argument to the callback.
        (Builder.prototype.startFetchingBuildHistory): Updated the documentation comment to reflect
        the new structure of the object passed to the callback.
        (Builder.prototype._getFailingTests): Updated to expect a tooManyFailures boolean from
        getNumberOfFailingTests and to pass that along to our own callbacks.
        (Builder.prototype._incorporateBuildHistory): Updated to expect a tooManyFailures boolean
        from _getFailingTests and to store that value in the history object.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (.info): Added.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder): Updated for change in structure to the history
        object and to add a note when run-webkit-tests exited early due to too many failures.
        (ViewController.prototype._displayTesters): Renamed testersAndFailureCounts to
        latestBuildInfos since each entry now contains more than just the tester and failure count.
        Now displays a message for testers where the latest build exited early due to too many
        failures. Updated to expect a tooManyFailures boolean from getNumberOfFailingTests and to
        store that value in latestBuildInfos.

2011-05-24  Keishi Hattori  <keishi@webkit.org>

        Reviewed by Kent Tamura.

        Disable textfield implementation of <input type=color>. Add INPUT_COLOR feature flag. Add input color sanitizer.
        https://bugs.webkit.org/show_bug.cgi?id=61273

        * Scripts/build-webkit: Added INPUT_COLOR feature flag.

2011-05-24  Greg Simon  <gregsimon@chromium.org>

        Reviewed by Dimitri Glazkov.

        Control Indexeddb backends from LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=61000

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setOverrideIndexedDBBackingStore):
        (LayoutTestController::clearAllDatabases):
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-05-24  Robert Hogan  <robert@webkit.org>

        Reviewed by Ryosuke Niwa.

        [Qt] Fix fast/events/selectstart-by-single-click-with-shift.html
        https://bugs.webkit.org/show_bug.cgi?id=61393

        * DumpRenderTree/qt/EventSenderQt.h:
        * DumpRenderTree/qt/EventSenderQt.cpp:
        (getModifiers): static function for interpreting modifiers
        (EventSender::mouseDown): Respect keyboard modifiers
        (EventSender::keyDown): use new static function
        (EventSender::sendOrQueueEvent): whitespace fix

2011-05-24  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Adam Barth.

        Adding MHTML reading support.
        https://bugs.webkit.org/show_bug.cgi?id=7168

        * Scripts/build-webkit:
        * Scripts/old-run-webkit-tests:
        * Scripts/webkitperl/features.pm:
        * Scripts/webkitpy/layout_tests/port/test_files.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-05-24  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Remove most style checks on Source/ThirdParty/glu, since it doesn't
        follow WebKit style.
        https://bugs.webkit.org/show_bug.cgi?id=61365

        * Scripts/webkitpy/style/checker.py:

2011-05-24  Adam Roben  <aroben@apple.com>

        Don't allow forcing builds through the build.webkit.org web interface

        Someone has been forcing bogus builds.

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

2011-05-24  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Adam Roben.

        WebKitTestRunner needs layoutTestController.setJavaScriptCanAccessClipboard
        https://bugs.webkit.org/show_bug.cgi?id=42669

        Fixes the regression issue caused by patch 94265. The patch didn't intialize the setting before the 
        layouttest starting, it will make the test cases after editing/execCommand/clipboard-access.html failed.
        Because that case changed the setting.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):

2011-05-24  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [ORWT]Make --skipped=only option work with parameters with LayoutTests/ prefix
        https://bugs.webkit.org/show_bug.cgi?id=61052

        * Scripts/old-run-webkit-tests:

2011-05-24  Adam Roben  <aroben@apple.com>

        Make TestFailures show how many tests are failing on each tester, and omit testers with no failures

        Fixes <http://webkit.org/b/61063> <rdar://problem/9460533> TestFailures page shows testers
        that don't have any failing tests, which isn't useful

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Buildbot.js:
        (Buildbot.prototype.getTesters): Renamed from getTesterNames. Now returns Builder objects
        instead of name strings.
        (Buildbot.prototype._buildersForNames): Added. Helper function to convert an array of
        builder names into an array of builders.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getMostRecentCompletedBuildNumber): Added. Returns the build number of
        the most recently completed build, or -1 if there is no such build.
        (Builder.prototype.getNumberOfFailingTests): Added. Returns the number of tests that failed
        in the given build, or -1 if the number could not be determined. Some of this code came from
        _getFailingTests.
        (Builder.prototype._getBuildJSON): Added. Code came from _getFailingTests.
        (Builder.prototype._getFailingTests): Changed to use new _getBuildJSON and
        getNumberOfFailingTests functions.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayTesters): Get the current number of test failures for each
        tester and show it in the list. Omit testers that have no failures at all. We keep the
        testers and failure counts in an array and sort it before displaying the current data, as
        the order in which data will be fetched is unpredictable.

2011-05-23  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [nrwt] don't use NetworkTranslation when uploading results
        https://bugs.webkit.org/show_bug.cgi?id=61315

        This avoids autoinstalling mechanize.  It didn't matter anyway
        because test_results_uploader.py wasn't using mechanize to make the
        request so NetworkTransaction::run wasn't doing anything extra
        (it only matters if it catches mechanize.HTTPError).

        * Scripts/webkitpy/layout_tests/layout_package/test_results_uploader.py:

2011-05-23  Tony Chang  <tony@chromium.org>

        Reviewed by Dirk Pranke.

        [chromium] fix the rebaseline tool to work with Linux GPU failures
        https://bugs.webkit.org/show_bug.cgi?id=61312

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-05-23  Darin Adler  <darin@apple.com>

        Ignore generated .pyc files in a directory full of python code.

        * Scripts/webkitpy/common/checkout/scm: Added property svn:ignore.

2011-05-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        sheriffbot should give more details about the failures in IRC
        https://bugs.webkit.org/show_bug.cgi?id=61233

        With this patch, sheriffbot will annonce the set of failing tests,
        which might help folks triage the problem.

        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:

2011-05-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87078.
        http://trac.webkit.org/changeset/87078
        https://bugs.webkit.org/show_bug.cgi?id=61294

        Patch contains errors and seems likely to break a bunch of
        bots (Requested by abarth on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-05-23  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ojan Vafai.

        Convert json_results_generator.py to output version 4 JSON.
        https://bugs.webkit.org/show_bug.cgi?id=60869

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-05-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Move generation of shell_command from port to executive
        https://bugs.webkit.org/show_bug.cgi?id=61251

        After move it's possible to use the code in other places too.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/system/executive.py:

2011-05-23  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.setJavaScriptCanAccessClipboard
        https://bugs.webkit.org/show_bug.cgi?id=42669

        Implement setJavaScriptCanAccessClipboard in WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setJavaScriptCanAccessClipboard):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-05-22  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Fix policyDelegate in Qt DRT
        https://bugs.webkit.org/show_bug.cgi?id=61247

        Use the 'policy delegate' implemented in FrameLoaderClient
        for layout tests. The partial implementation in DumpRenderTreeQt
        is redundant, so remove it.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::acceptNavigationRequest):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::waitForPolicyDelegate):

2011-05-22  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Use double quotes for filename arguments
        https://bugs.webkit.org/show_bug.cgi?id=61250

        Windows does not support single quotes on the command line,
        so replace them with double quotes.

        * Scripts/prepare-ChangeLog:

2011-05-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs layoutTestController.pauseTransitionAtTimeOnElementWithId
        https://bugs.webkit.org/show_bug.cgi?id=42550
        
        Implement pauseTransitionAtTimeOnElementWithId in WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        Copy the code for pausing animations, FIXME comments and all.
        (WTR::LayoutTestController::pauseTransitionAtTimeOnElementWithId):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-05-20  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by Stephen White.

        Adding myself to the committers list.

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

2011-05-19  Adam Roben  <aroben@apple.com>

        Test that the WebKit2 UI process doesn't crash when starting a download

        Test for <http://webkit.org/b/61142> <rdar://problem/9471680> REGRESSION (r86812): Crash
        (preceded by assertion) in fastMalloc when downloading a file

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2/18-characters.html: Added.

        * TestWebKitAPI/Tests/WebKit2/DownloadDecideDestinationCrash.cpp: Added.
        (TestWebKitAPI::decidePolicyForNavigationAction): Start a download.
        (TestWebKitAPI::decideDestinationWithSuggestedFilename): Record that the download was
        started, cancel the download, and return a bogus string.

        (TestWebKitAPI::setContextDownloadClient):
        (TestWebKitAPI::setPagePolicyClient):
        Simple helper functions.

        (TestWebKitAPI::TEST): Load 18-characters.html, which should trigger a download thanks to
        our policy client, and run until we know that the download was started. If we haven't
        crashed, we win!

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/copy-resources.cmd:
        Added new files.

2011-05-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Ryosuke Niwa.

        Fix style errors in DumpRenderTree/chromium/.
        https://bugs.webkit.org/show_bug.cgi?id=61172

        * DumpRenderTree/chromium/CppBoundClass.cpp:
        (CppBoundClass::getAsCppVariant):
        (CppBoundClass::bindToJavascript):
        * DumpRenderTree/chromium/CppBoundClass.h:
        (CppBoundClass::GetterCallback::~GetterCallback):
        (CppBoundClass::CppBoundClass):
        (CppBoundClass::Callback::~Callback):
        (CppBoundClass::MemberCallback::MemberCallback):
        (CppBoundClass::MemberCallback::~MemberCallback):
        (CppBoundClass::MemberGetterCallback::MemberGetterCallback):
        (CppBoundClass::MemberGetterCallback::~MemberGetterCallback):
        * DumpRenderTree/chromium/CppVariant.h:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        (DRTDevToolsAgent::~DRTDevToolsAgent):
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::sendFrontendLoaded):
        * DumpRenderTree/chromium/DRTDevToolsClient.h:
        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/EventSender.cpp:
        (SavedEvent::SavedEvent):
        (EventSender::EventSender):
        (EventSender::keyDown):
        * DumpRenderTree/chromium/EventSender.h:
        * DumpRenderTree/chromium/ImageDiff.cpp:
        (Image::Image):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::WorkQueue::reset):
        (WorkItemBackForward::WorkItemBackForward):
        (WorkItemLoadingScript::WorkItemLoadingScript):
        (WorkItemNonLoadingScript::WorkItemNonLoadingScript):
        (WorkItemLoad::WorkItemLoad):
        (WorkItemLoadHTMLString::WorkItemLoadHTMLString):
        (LayoutTestController::pathToLocalResource):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::WorkItem::~WorkItem):
        (LayoutTestController::WorkQueue::WorkQueue):
        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        (MockSpellCheck::MockSpellCheck):
        (MockSpellCheck::~MockSpellCheck):
        * DumpRenderTree/chromium/MockSpellCheck.h:
        * DumpRenderTree/chromium/NotificationPresenter.h:
        (NotificationPresenter::NotificationPresenter):
        * DumpRenderTree/chromium/Task.cpp:
        (WebTask::WebTask):
        * DumpRenderTree/chromium/Task.h:
        (TaskList::TaskList):
        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (DRTPrinter::DRTPrinter):
        (TestShellPrinter::TestShellPrinter):
        * DumpRenderTree/chromium/TestNavigationController.cpp:
        (TestNavigationEntry::TestNavigationEntry):
        (TestNavigationEntry::~TestNavigationEntry):
        (TestNavigationController::TestNavigationController):
        (TestNavigationController::reload):
        (TestNavigationController::loadEntry):
        (TestNavigationController::didNavigateToEntry):
        * DumpRenderTree/chromium/TestNavigationController.h:
        (TestShellExtraData::TestShellExtraData):
        * DumpRenderTree/chromium/TestShell.cpp:
        (dumpHistoryItem):
        * DumpRenderTree/chromium/TestShell.h:
        (TestParams::TestParams):
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (TestShell::waitTestFinished):
        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::startWorkerContext):
        (TestWebWorker::terminateWorkerContext):
        (TestWebWorker::postMessageToWorkerContext):
        (TestWebWorker::clientDestroyed):
        (TestWebWorker::postMessageToWorkerObject):
        (TestWebWorker::postExceptionToWorkerObject):
        (TestWebWorker::postConsoleMessageToWorkerObject):
        (TestWebWorker::confirmMessageFromWorkerObject):
        (TestWebWorker::reportPendingActivity):
        (TestWebWorker::workerContextClosed):
        (TestWebWorker::~TestWebWorker):
        * DumpRenderTree/chromium/TextInputController.cpp:
        * DumpRenderTree/chromium/WebThemeControlDRTWin.h:
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.h:
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp:
        (WebThemeEngineDRTWin::paintButton):
        (WebThemeEngineDRTWin::paintMenuList):
        (WebThemeEngineDRTWin::paintTrackbar):
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.h:
        (WebThemeEngineDRTWin::WebThemeEngineDRTWin):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::navigate):
        (WebViewHost::updateSessionHistory):
        (WebViewHost::paintInvalidatedRegion):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-05-19  Dmitry Lomov  <dslomov@google.com>

        Reviewed by Adam Roben.

        Detect hangs in run-api-tests
        https://bugs.webkit.org/show_bug.cgi?id=48043

        * Scripts/run-api-tests: Added test timeouts

2011-05-19  Dmitry Lomov  <dslomov@google.com>

        Reviewed by Adam Roben.

        run-api-tests should run one test per process
        https://bugs.webkit.org/show_bug.cgi?id=61088

        * Scripts/run-api-tests: Resurrecting the previous revison of this file, with fixes to system call under Windows, 
        return code, and parsing GTest output format.

2011-05-15  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt][GTK] plugins/get-url-with-javascript-url.html fails
        https://bugs.webkit.org/show_bug.cgi?id=60834
        Fix unix test plugin for plugins/get-url-with-javascript-url.html

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_stream):
        (webkit_test_plugin_write_ready):
        (webkit_test_plugin_write):

2011-05-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86869, r86873, r86875, and r86877.
        http://trac.webkit.org/changeset/86869
        http://trac.webkit.org/changeset/86873
        http://trac.webkit.org/changeset/86875
        http://trac.webkit.org/changeset/86877
        https://bugs.webkit.org/show_bug.cgi?id=61139

        broke builds and debug DRT (Requested by rniwa on #webkit).

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::bindJSObjectsToWindow):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]):

2011-05-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Add build logistics and plumbing for window.internals object.
        https://bugs.webkit.org/show_bug.cgi?id=60313

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added linking new WebCoreTestSupport library.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::bindJSObjectsToWindow): Added injection code.
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]): Ditto.

2011-05-19  Zsolt Fehér  <h490267@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt] Implement eventSender.scalePageBy
        https://bugs.webkit.org/show_bug.cgi?id=60015

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::scalePageBy):
        * DumpRenderTree/qt/EventSenderQt.h:

2011-05-19  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Kent Tamura.

        [Chromium] IME candidate window appears wrong position in an iframe
        https://bugs.webkit.org/show_bug.cgi?id=61023

        Call the focused frame's firstRectForCharacterRange() instead of the
        main frame so that DRT behaves as the same as Chromium.

        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::firstRectForCharacterRange):

2011-05-18  Adam Roben  <aroben@apple.com>

        Add a new page to build.webkit.org to help find when tests started failing

        The page is accessible at <http://build.webkit.org/TestFailures/>. It is pretty minimalist
        right now, but already shows some useful information. It's somewhat similar to webkit-patch
        failure-reason and sheriffbot, and perhaps can be combined with them eventually. It's a
        little more convenient than either of them, though, because it's all done in the browser
        (and thus it's easy to go directly to the relevant test results).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Buildbot.js: Added.
        (Buildbot): This class represents a Buildbot server.
        (Buildbot.prototype.buildURL): Returns the URL for the summary page for a particular build.
        (Buildbot.prototype.builderNamed): Returns a Builder with the given name.
        (Buildbot.prototype.getTesterNames): Fetches the names of all testers and passes them to the
        callback.
        (Buildbot.prototype.parseBuildName): Breaks up a build name into its constituent parts. Must
        be implemented by a derived class that understands this server's build naming scheme.
        (Buildbot.prototype.resultsDirectoryURL): Returns the URL for the results directory for a
        particular build.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js: Added.
        (Builder): This class represents one builder on the buildbot.
        (Builder.prototype.buildURL): Returns the URL for the summary page for a particular build.
        (Builder.prototype.failureDiagnosisTextAndURL): Returns data that provides a little more
        information about a particular test failure.
        (Builder.prototype.startFetchingBuildHistory): Periodically calls the callback with
        information about when tests started failing.
        (Builder.prototype.resultsDirectoryURL): Returns the URL for the results directory for a
        particular build.
        (Builder.prototype._getBuildNames): Fetches the names of all builds and passes them to the
        callback.
        (Builder.prototype._getFailingTests): Fetches the results.html page for the given build and
        extracts all the failing tests listed in it, passing them to the callback.
        (Builder.prototype._incorporateBuildHistory): Gets the failing tests for the specified
        build, merges them into the build history, and calls the callback telling it whether the
        next build should be fetched to provide more information.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        Added. Just some simple styles.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js: Added.
        (createDefinitionList): Takes an array of pairs and turns them into a DL element.
        (getResource): Wrapper around XMLHttpRequest.
        (Array.prototype.findFirst): Finds the first element matching the given predicate and
        returns it.
        (Array.prototype.last): Returns the last element of the array.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js: Added.
        (ViewController): This class contains the main logic for displaying the page.
        (ViewController.loaded): Just calls through to parseHash.
        (ViewController.parseHash): Either starts analyzing failures on a particular builder, or
        shows the list of all testers so one can be chosen. This function is called when the page
        loads and whenever we get a hashchange event.
        (ViewController._displayBuilder): Asks the builder to fetch build history, and displays it
        as it is fetched. The display ends up grouping tests by when they started failing.
        (ViewController._displayTesters): Gets the list of testers and displays it.

        (ViewController._domForBuildName):
        (ViewController._domForFailedTest):
        Helper functions to create descriptions and links for a particular build or failed test.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/WebKitBuildbot.js: Added.
        (WebKitBuildbot): Calls up to the base class constructor with the correct base URL.
        (WebKitBuildbot.prototype.parseBuildName): Parses a build.webkit.org-style build name.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Added. Just
        loads all the files and sets up a ViewController, which does the rest.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html: Added a link to the new
        page.

2011-05-18  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt] Implement layoutTestController.setValueForUser()
        https://bugs.webkit.org/show_bug.cgi?id=60956

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setValueForUser):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-05-16  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        plugins/invalidate_rect.html fails on linux ports

        - Make the unix test netscape plugin recognize the onPaintEvent
          and windowedPlugin parameters.

        https://bugs.webkit.org/show_bug.cgi?id=54051

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventX11):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::displayInvalidatedRegion):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_handle_event):

2011-05-17  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] move Lucid 64 bit results into LayoutTests/platform/chromium-linux
        https://bugs.webkit.org/show_bug.cgi?id=60895

        Update the tools to handle the move.  Lucid 32 results now go in
        chromium-linux-x86 and the default platform on Linux is now x86_64.

        * Scripts/webkitpy/layout_tests/deduplicate_tests.py: Default to x86_64
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py: Default to Lucid
        * Scripts/webkitpy/layout_tests/port/base.py: ditto
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py: Update directory fallback and default to Lucid 64
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py: Update tests to default to x86_64
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py: Update bot names.
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py: Whitespace cleanup.

2011-05-17  Adam Roben  <aroben@apple.com>

        Make run-api-tests work on Windows when there are spaces in the path

        Fixes <http://webkit.org/b/60954> REGRESSION (r86511): run-api-tests fails if there are
        spaces in the path to TestWebKitAPI.exe

        Reviewed by David Levin.

        * Scripts/run-api-tests:
        (runTestTool): Use the "direct object" form of system() to avoid having the path to
        TestWebKitAPI.exe be split by the shell.

2011-05-16  Ian Henderson  <ianh@apple.com>

        Reviewed by Joseph Pecoraro.

        Page::goToItem doesn't work while loading is deferred
        https://bugs.webkit.org/show_bug.cgi?id=60412

        Add setDefersLoading and goBack methods to LayoutTestController.  We
        need to use goBack() instead of history.back() because the latter goes
        through NavigationScheduler, hence doesn't exhibit the bug.

        * DumpRenderTree/LayoutTestController.cpp:
        (goBackCallback):
        (setDefersLoadingCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::goBack):
        (LayoutTestController::setDefersLoading):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::goBack):
        (LayoutTestController::setDefersLoading):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::goBack):
        (LayoutTestController::setDefersLoading):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::goBack):
        (LayoutTestController::setDefersLoading):

2011-05-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        TestWebKitAPI should build with clang if it can
        https://bugs.webkit.org/show_bug.cgi?id=60918

        * TestWebKitAPI/Configurations/CompilerVersion.xcconfig:
        Update CompilerVersion.xcconfig to match others.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add CompilerVersion.xcconfig to the project.

        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        (TestWebKitAPI::didFailProvisionalLoadWithErrorForFrame):
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        (TestWebKitAPI::didSameDocumentNavigationForFrame):
        Add some casts to quiet warnings from clang.

2011-05-16  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by David Levin.

        add dpranke as a reviewer
        https://bugs.webkit.org/show_bug.cgi?id=60919

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

2011-05-16  Robert Hogan  <robert@webkit.org>

        Reviewed by Anders Carlsson.

        [Gtk] plugins/get-url-notify-with-url-that-fails-to-load.html crashes on buildbot

        https://bugs.webkit.org/show_bug.cgi?id=60838

        The unix test plugin needs to call the test's NPP_URLNotify
        rather than the browsers.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_url_notify):

2011-05-16  Brent Fulgham  <bfulgham@webkit.org>

        Rubber-stamped by Adam Roben.

        Adding myself as a reviewer.
        * Scripts/webkitpy/common/config/committers.py:

2011-05-16  Sam Weinig  <sam@webkit.org>

        Fix typo pointed out by Dave Levin.

        * TestWebKitAPI/PlatformUtilities.h:
        (TestWebKitAPI::Util::assertWKStringEqual):
        Strig -> String.

2011-05-16  Sam Weinig  <sam@webkit.org>

        Reviewed by David Levin.

        Convert api tester over to using gtest expectations directly
        https://bugs.webkit.org/show_bug.cgi?id=60862

        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::toSTD):
        * TestWebKitAPI/PlatformUtilities.h:
        (TestWebKitAPI::Util::assertWKStrigEqual):
        Add convenience macro to compare WK2 strings. Add some overloads of toSTD to make
        the implementation of the macro simpler.

        * TestWebKitAPI/Test.h:
        Remove TEST_ASSERT forwarder.

        [Test changes elided]

2011-05-16  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/60913> C++ exceptions should not be enabled when building with llvm-gcc-4.2
        <rdar://problem/9446430>

        Reviewed by Mark Rowe.

        * MiniBrowser/Configurations/Base.xcconfig: Fixed typo.
        * TestWebKitAPI/Configurations/Base.xcconfig: Ditto.
        * WebKitTestRunner/Configurations/Base.xcconfig: Ditto.

2011-05-16  Jon Lee  <jonlee@apple.com>

        Reviewed by Simon Fraser.

        Can't horizontally scroll iframes and overflow because wheel events are always accepted
        https://bugs.webkit.org/show_bug.cgi?id=60779

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Set new default method to nil.

2011-05-16  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Tools.pro misses include(common.pri)
        https://bugs.webkit.org/show_bug.cgi?id=60883

        It includes features.pri, which depends on common.pri (the build is
        not broken today with the default options, but this is the right
        thing to do).

        * Tools.pro:

2011-05-15  Dominic Cooney  <dominicc@chromium.org>

        Unreviewed: adding myself to committers.py.

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

2011-05-15  Daniel Bates  <dbates@webkit.org>

        Reviewed by Chris Jerdonek.

        svn-apply can't handle Git diff that only changes executable bit
        https://bugs.webkit.org/show_bug.cgi?id=60848

        Fixes an issue where svn-{apply, unapply} fail to handle a Git diff for a file
        that only has an executable bit change.

        * Scripts/VCSUtils.pm:
          - Modified regex $chunkRangeRegEx to match chunk range with ending text, say: @@ -2,6 +2,18 @@ foo().
        (parseDiff): Modified to count the number of text chunks in the diff. This should also help towards
        fixing <https://bugs.webkit.org/show_bug.cgi?id=29684>.
        * Scripts/svn-apply:
        (patch): Only use standard patch tool if the patch is non-empty and for a text file (i.e. not a binary patch).
        * Scripts/svn-unapply:
        (patch): Ditto.
        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
          - Updated expected results for test cases to account for numTextChunks.
          - Fixed malformed chunk range in test cases: "Git: simple", and "Git: Git diff followed by SVN diff".
          - Added test case "Git: file that only has an executable bit change".
        * Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:
          - Updated expected results for test cases to account for numTextChunks.

2011-05-15  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * TestWebKitAPI/win/main.cpp:
        (main):

2011-05-15  Sam Weinig  <sam@webkit.org>

        Reviewed by David Levin.

        Make API tester more gtest friendly
        https://bugs.webkit.org/show_bug.cgi?id=60859

        * Scripts/run-api-tests:
        Numerous changes:
        - Remove logic to run tests one at a time.
        - Remove logic to build up a list of tests, instead just pass --gtest_list_tests to 
          the test runner and allow gtest to print it for us.
        - Forward stdout from the test tool to stdout, even in non-verbose runs.
        - Run test tool from the current working directory instead of the root webkit
          directory.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Move plist to be with other bundle sources.

        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController):
        (TestWebKitAPI::TestsController::run):
        * TestWebKitAPI/TestsController.h:
        * TestWebKitAPI/mac/main.mm:
        Simplify TestController down to a single run function. We should consider removing the class
        entirely at some point.

2011-05-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86504.
        http://trac.webkit.org/changeset/86504
        https://bugs.webkit.org/show_bug.cgi?id=60853

        "Broke Qt EventSender in editing/selection tests" (Requested
        by mwenge on #webkit).

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        (WebCore::DumpRenderTree::initJSObjects):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (WebCore::DumpRenderTree::eventSender):
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_set_window):
        (webkit_test_plugin_handle_event):

2011-05-12  Robert Hogan  <robert@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] fix http/tests/plugins/plugin-document-has-focus.html

        The support for this test added to the unix test plugin here
        may allow other platforms to pass it (nearly everyone
        skips it). On Qt it required a bit of trickiness with
        the page's EventSender object to get it working fully though,
        so only unskipping Qt here.

        https://bugs.webkit.org/show_bug.cgi?id=60722

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::eventSender):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::createWindow):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_set_window):
        (webkit_test_plugin_handle_event):

2011-05-14  Arno Renevier  <arno@renevier.net>

        Reviewed by Martin Robinson.

        make run-gtk-tests executable
        https://bugs.webkit.org/show_bug.cgi?id=59278

        * Scripts/run-gtk-tests:

2011-05-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        NPP_URLNotify is not called if a URL passed to NPN_GetURLNotify fails to load
        https://bugs.webkit.org/show_bug.cgi?id=60823
        <rdar://problem/9430386>

        Add test that calls NPN_GetURLNotify on a URL that can't be loaded, and checks if NPP_URLNotify is called.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/GetURLNotifyWithURLThatFailsToLoad.cpp: Added.
        (GetURLNotifyWithURLThatFailsToLoad::GetURLNotifyWithURLThatFailsToLoad):
        (GetURLNotifyWithURLThatFailsToLoad::NPP_New):
        (GetURLNotifyWithURLThatFailsToLoad::NPP_URLNotify):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:

2011-05-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86476.
        http://trac.webkit.org/changeset/86476
        https://bugs.webkit.org/show_bug.cgi?id=60832

        It made plugins/get-url-notify-with-url-that-fails-to-
        load.html crash on GTK (Requested by Ossy on #webkit).

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/GetURLNotifyWithURLThatFailsToLoad.cpp: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:

2011-05-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        NPP_URLNotify is not called if a URL passed to NPN_GetURLNotify fails to load
        https://bugs.webkit.org/show_bug.cgi?id=60823
        <rdar://problem/9430386>

        Add test that calls NPN_GetURLNotify on a URL that can't be loaded, and checks if NPP_URLNotify is called.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/GetURLNotifyWithURLThatFailsToLoad.cpp: Added.
        (GetURLNotifyWithURLThatFailsToLoad::GetURLNotifyWithURLThatFailsToLoad):
        (GetURLNotifyWithURLThatFailsToLoad::NPP_New):
        (GetURLNotifyWithURLThatFailsToLoad::NPP_URLNotify):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:

2011-05-13  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * DumpRenderTree/TestNetscapePlugIn/Tests/GetURLWithJavaScriptURL.cpp:

2011-05-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        NPN_GetURL with a javascript: URL doesn't send back the result in the stream
        https://bugs.webkit.org/show_bug.cgi?id=60810

        Add a test that calls NPN_GetURL on a javascript: URL and checks that it gets back the expected result.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:
        Add files.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        Add new NPN and NPP wrappers and sort them according to the order they appear in npfunctions.h

        * DumpRenderTree/TestNetscapePlugIn/Tests/GetURLWithJavaScriptURL.cpp: Added.
        (GetURLWithJavaScriptURL::GetURLWithJavaScriptURL):
        (GetURLWithJavaScriptURL::NPP_New):
        (GetURLWithJavaScriptURL::NPP_NewStream):
        (GetURLWithJavaScriptURL::NPP_DestroyStream):
        (GetURLWithJavaScriptURL::NPP_WriteReady):
        (GetURLWithJavaScriptURL::NPP_Write):
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_NewStream):
        (NPP_WriteReady):
        (NPP_Write):
        (NPP_URLNotify):
        call the PluginTest NPP wrappers.

2011-05-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86447.
        http://trac.webkit.org/changeset/86447
        https://bugs.webkit.org/show_bug.cgi?id=60809

        "Broke some uses of EventSender object on Qt" (Requested by
        mwenge on #webkit).

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::createWindow):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (WebCore::DumpRenderTree::eventSender):
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_set_window):
        (webkit_test_plugin_handle_event):

2011-05-13  Robert Hogan  <robert@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] fix http/tests/plugins/plugin-document-has-focus.html

        The support for this test added to the unix test plugin here
        may allow other platforms to pass it (nearly everyone
        skips it). On Qt it required a bit of trickiness with
        the page's EventSender object to get it working fully though,
        so only unskipping Qt here.

        https://bugs.webkit.org/show_bug.cgi?id=60722

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::eventSender):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::createWindow):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_set_window):
        (webkit_test_plugin_handle_event):

2011-05-13  Adam Roben  <aroben@apple.com>

        Exclude the Leopard NRWT bot from the core builder set

        Fixes <http://webkit.org/b/60392> Leopard Intel Release (NRWT) shouldn't be a core builder

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot.__init__): Tighten up the Leopard regexp to only allow the non-NRWT Leopard bots
        in the core builder set.

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (BuildBotTest.test_builder_name_regexps): Updated to match the current set of builders and
        regexps.

2011-05-13  Adam Roben  <aroben@apple.com>

        Group all the NRWT bots together

        This also gets the new NRWT bots out of the middle of Apple's bots. Since these new NRWT
        bots are experimental, it seems best not to clutter up the non-experimental bots with
        experimental ones.

        Fixes <http://webkit.org/b/60769> New "(NRWT)" bots are right in the middle of Apple's bots
        on build.webkit.org

        Reviewed by Dan Bernstein.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Moved the "(NRWT)" bots next to the
        Chromium testers, which also use new-run-webkit-tests.

2011-05-13  Adam Roben  <aroben@apple.com>

        Add a plugin test that dumps the plugin window's rect

        Part of the test for <http://webkit.org/b/60194> <rdar://problem/9383760> REGRESSION
        (r79167): Windowed plugins in Google Reader don't move when the article list is scrolled

        Reviewed by Dan Bernstein.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/DumpWindowRect.cpp: Added.
        (DumpWindowRect::DumpWindowRect): Just call up to the base class.
        (DumpWindowRect::performWindowGeometryTest): Find our window rect relative to the test
        harness window and log it.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Added DumpWindowRect.

2011-05-13  Adam Roben  <aroben@apple.com>

        Move code required for most tests of plugin window geometry into a base class

        WebKit2's asynchronous plugin window positioning makes testing window geometry tricky. By
        having all the trickiness in a shared base class, writing new window geometry tests will be
        much easier.

        Fixes <http://webkit.org/b/60776> It's hard to write tests that check plugin window geometry

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/WindowRegionIsSetToClipRect.cpp:
        (WindowRegionIsSetToClipRect::WindowRegionIsSetToClipRect): Changed to inherit from the new
        WindowGeometryTest base class. Most of the code from this class was moved to the new base
        class.
        (WindowRegionIsSetToClipRect::performWindowGeometryTest): Renamed from checkWindowRegion.
        This is called by the base class when it is safe to check the window's geometry. Note that
        the m_didCheckWindowRegion logic was removed completely; it has never been needed and was
        just vestigial code from an earlier version of this test.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Added new
        WindowGeometryTest class.

        * DumpRenderTree/TestNetscapePlugIn/win/WindowGeometryTest.cpp: Added. Code came from
        WindowRegionIsSetToClipRect.
        (WindowGeometryTest::finishTest): This is the only change from WindowRegionIsSetToClipRect.
        We now call the new virtual performWindowGeometryTest function instead of checkWindowRegion.
        Subclasses can implement that function to perform their own tests.

        * DumpRenderTree/TestNetscapePlugIn/win/WindowGeometryTest.h: Added.

2011-05-13  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Missing 2nd #EOF if WebProcess is killed.
        https://bugs.webkit.org/show_bug.cgi?id=60761

        If the WebProcess is killed, only one #EOF is yielded
        by WebKitTestRunner. However, run-webkit-test wait for
        a second #EOF, which signals the finishing of pixel dump.
        Since this never happens, run-webkit-test waits forever.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dump):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:

2011-05-13  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [NRWT] chromium-linux tests shouldn't run on other platforms
        https://bugs.webkit.org/show_bug.cgi?id=60162

        Remove _tests_for_other_platforms defs because r82753
        implemented it properly in the baseclass in webkit.py.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2011-05-12  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Remove unused option of EWeblauncher
        https://bugs.webkit.org/show_bug.cgi?id=60747

        Remove sudo-workaround option.
        This option is not used and make other option wrong.

        * EWebLauncher/main.c:

2011-05-12  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        Fix config.json to address missing WK2 builder/tester config.
        Fix naming of machines (xserve not macpro)

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

2011-05-12  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        Add SnowLeopard Debug builder and Test bot.
        apple-xserve-8 = SL Debug Tester.
        apple-xserve-9 = SL Debug Builder.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2011-05-12  Adam Barth  <abarth@webkit.org>

        This patch disables sheriffbot's bug postings.  He's just been way too
        spammy recently due to test flakiness.

        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:

2011-05-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Anders Carlsson.

        After relaunching an unresponsive web process, web page stops responding to mouse movement
        https://bugs.webkit.org/show_bug.cgi?id=60669
        <rdar://problem/9409934>
        
        This test follows the steps needed to reproduce this bug:
        1) Hang the web process
        2) While the web process is hung, move the mouse (so WebPageProxy thinks it is processing a mouse move event)
        3) Kill and restart the WebProcess
        4) Move the mouse
        
        We are testing that we receive mouse move events after the WebProcess has restarted.

        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame): Set a flag that we finished loading.
        (TestWebKitAPI::processDidBecomeUnresponsive): Kill the web process once we become unresponsive.
        (TestWebKitAPI::processDidCrash): Reload the page when the process crashes, which restarts the web process.
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash_Bundle.cpp: Added.
        (TestWebKitAPI::MouseMoveAfterCrashTest::MouseMoveAfterCrashTest):
        (TestWebKitAPI::MouseMoveAfterCrashTest::didReceiveMessage):
        * TestWebKitAPI/Tests/WebKit2/mouse-move-listener.html: Added.

        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::simulateMouseMove): Sends the messages that simulate a mouse move.
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::simulateMouseMove): Ditto.

        Add new files.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj:
        * TestWebKitAPI/win/copy-resources.cmd:

2011-05-12  Tomasz Morawski  <t.morawski@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Added initialization/shutdown for ecore_file library
        https://bugs.webkit.org/show_bug.cgi?id=60457

        Added initialization and shuthown for ecore_file library and replaced
        realpath function to ecore_file_realpath.

        * EWebLauncher/main.c:
        (quit):
        (findThemePath):
        (main):

2011-05-12  Young Han Lee  <joybro@company100.net>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement layoutTestController.layerTreeAsText()
        https://bugs.webkit.org/show_bug.cgi?id=60367

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::layerTreeAsText):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-05-11  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        Teach validate-committer-lists how to validate committers bugzilla_email()
        https://bugs.webkit.org/show_bug.cgi?id=60651

        It turns out we currently have 9 committers with invalid values for their
        bugzilla_email field (meaning we don't know what email is their bugzilla account).
        "Alexander Kellett" <lypanov@mac.com>
        "Andre Boule" <aboule@apple.com>
        "Cameron McCormack" <cam@webkit.org>
        "Chris Petersen" <cpetersen@apple.com>
        "Eli Fidler" <eli@staikos.net>
        "Matt Lilek" <webkit@mattlilek.com>
        "Pierre d'Herbemont" <pdherbemont@free.fr>
        "Scott Violet" <sky@chromium.org>
        "Adam Treat" <treat@kde.org>

        Most of those haven't committed in a very long time, so it's not suprising
        that we haven't noticed that their bugzilla emails are bogus.

        * Scripts/validate-committer-lists:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:

2011-05-11  Dmitry Lomov  <dslomov@google.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=59561
        Switch TestWebKitAPI to GTest

        Fixes Makefiles and WinCairo build as well

        * Makefile:
        * Scripts/build-api-tests:
        * Scripts/run-api-tests:
        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops:
        * TestWebKitAPI/Test.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/VectorBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController):
        (TestWebKitAPI::TestsController::dumpTestNames):
        (TestWebKitAPI::TestsController::runTestNamed):
        (TestWebKitAPI::TestsController::runAllTests):
        * TestWebKitAPI/TestsController.h:
        * TestWebKitAPI/mac/main.mm:
        (main):

2011-05-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Add Luke Macpherson to committers.py as a Contributor
        https://bugs.webkit.org/show_bug.cgi?id=60639

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

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 4/12: Update the build script to enable 3D rendering by default for Qt.

        * Scripts/build-webkit:

2011-05-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        REGRESSION (r86161): WKPreferences API test failing on Windows
        https://bugs.webkit.org/show_bug.cgi?id=60658

        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST):

2011-05-11  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ojan Vafai.

        Modify jsonresults_unittest.py to use a dict format for its test data, and modify jsonresults.py to flatten hierarchical directory structures in input JSON.
        https://bugs.webkit.org/show_bug.cgi?id=60521

        First steps towards making the results JSON all hierarchical.

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2011-05-11  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, adding new LayoutTestController method stubs.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::localStorageDiskUsageForOrigin):
        (LayoutTestController::applicationCacheDiskUsageForOrigin):

2011-05-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        [WebKit2] exceededDatabaseQuota function on WKPageUIClient needs to provide information
        about the usage for both the origin overall and the database in question.
        https://bugs.webkit.org/show_bug.cgi?id=60573

        * WebKitTestRunner/TestController.cpp:
        (WTR::exceededDatabaseQuota):

2011-05-10  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        Adding myself as a reviewer.
        https://bugs.webkit.org/show_bug.cgi?id=60587

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

2011-05-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Csaba Osztrogonác.

        queues.webkit.org should show 1000+ instead of 1000 when we hit the query limit
        https://bugs.webkit.org/show_bug.cgi?id=60614

        AppEngine has a result limit of 1000.  We hit that when trying
        to find out how many patches the style-queue (and other queues)
        have passed in the last 30 days.  So lets display 1000+ instead
        of 1000 to avoid confusion. (Ossy was asking about this in #webkit tonight.)

        I also made the status pages show "never" instead of just "ago" when we
        haven't seen a pass or boot message in the last 1000 messages.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/templates/queuestatus.html:

2011-05-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        sheriffbot shouldn't spam bugs when it can't figure out who to blame
        https://bugs.webkit.org/show_bug.cgi?id=60613

        This patch limits the number of bugs sheriffbot will spam to three.
        Ideally, we'd come up with some smarter huerstics, but hopefully this
        will cut down on the bugmail spam for slow bots.

        * Scripts/webkitpy/tool/commands/sheriffbot.py:

2011-05-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS bots should be robust against test-webkitpy hangs
        https://bugs.webkit.org/show_bug.cgi?id=60579

        Added a killAfterTimeout subroutine, which takes a child_pid
        and timeout, and will setup a watchdog process to kill that child
        after the timeout.  killAfterTimeout will waitpid on the child.

        * EWSTools/start-queue.sh:

2011-05-10  MORITA Hajime  <morrita@google.com>

        Unreviewed, moved myself to the reviewers list.

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

2011-05-10  Anton D'Auria  <adauria@apple.com>

        Reviewed by David Levin.

        StorageTracker should report actual local storage usage on disk
        https://bugs.webkit.org/show_bug.cgi?id=60558

        * DumpRenderTree/LayoutTestController.cpp:
        (localStorageDiskUsageForOriginCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::localStorageDiskUsageForOrigin):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::localStorageDiskUsageForOrigin):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::localStorageDiskUsageForOrigin):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::localStorageDiskUsageForOrigin):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::localStorageDiskUsageForOrigin):

2011-05-10  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add ApplicationCache API to get disk usage per origin
        https://bugs.webkit.org/show_bug.cgi?id=57127

        Added test that loads two frames with ~15Kb image, checks usage,
        deletes app cache, verifies usage is 0.

        * DumpRenderTree/LayoutTestController.cpp:
        (applicationCacheDiskUsageForOriginCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp: Added stub.
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::applicationCacheDiskUsageForOrigin):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Added stub.
        (LayoutTestController::applicationCacheDiskUsageForOrigin):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::applicationCacheDiskUsageForOrigin):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp: Added stub.
        (LayoutTestController::applicationCacheDiskUsageForOrigin):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Added stub.
        (LayoutTestController::applicationCacheDiskUsageForOrigin):

2011-05-10  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Unreviewed, adding Rafael Antognolli as a committer.

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

2011-05-10  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Add WebCore::Setting to block displaying and/or running insecure content on secure pages
        https://bugs.webkit.org/show_bug.cgi?id=58378

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setAllowDisplayOfInsecureContent):
        (LayoutTestController::setAllowRunningOfInsecureContent):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        Add plumbing for new settings to Chromium DRT.

2011-05-10  Enrica Casucci  <enrica@apple.com>

        Reviewed by Beth Dakin.

        Added my name to the reviewers list and removed my name from
        to committer-only list.

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

2011-05-10  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style shouldn't filter the errors using the modified lines for the xml and test expectations checkers.
        https://bugs.webkit.org/show_bug.cgi?id=60466

        * Scripts/webkitpy/style/checker.py: (unrelated) style fix.
        * Scripts/webkitpy/style/checker_unittest.py: Remove the file_path check since
          that property was removed.
        * Scripts/webkitpy/style/checkers/test_expectations.py: Turn off the line
          filtering for errors.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py: Add testing to
          verify that the line filtering is turned off.
        * Scripts/webkitpy/style/checkers/xml.py: Turn off the line filtering for errors
          and remove the unused file_path parameter.
        * Scripts/webkitpy/style/checkers/xml_unittest.py: Add testing to verify that the
          line filtering is turned off (and fix test_no_error).
        * Scripts/webkitpy/style/error_handlers.py: Added a way to turn off the filtering
          of errors based on the lines changed in the patch.
        * Scripts/webkitpy/style/error_handlers_unittest.py: Added a test for turning off
          the filtering.

2011-05-10  Adam Roben  <aroben@apple.com>

        Update some plugin tests to work with WebKit2's asynchronous windowed plugin positioning on Windows

        Fixes <http://webkit.org/b/60442> <rdar://problem/9403200> REGRESSION (r85795):
        platform/win/plugins/window-geometry-initialized-before-set-window.html and
        platform/win/plugins/window-region-is-set-to-clip-rect.html failing on Windows 7 Release
        (WebKit2 Tests)

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/NPNInvalidateRectInvalidatesWindow.cpp:
        (NPNInvalidateRectInvalidatesWindow::NPP_SetWindow): Moved some code from here to the new
        WindowedPluginTest::testHarnessWindow function.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/WindowGeometryInitializedBeforeSetWindow.cpp:
        (WindowGeometryInitializedBeforeSetWindow::NPP_SetWindow): Only check the window's size, not
        its position. In WebKit2, the position won't have been set yet, so we can't test it. But it
        turns out only the size mattered for <http://webkit.org/b/46716>, which this test was
        created for.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/WindowRegionIsSetToClipRect.cpp:
        (WindowRegionIsSetToClipRect::WindowRegionIsSetToClipRect): Converted to be a
        WindowedPluginTest, and initialized new members.
        (WindowRegionIsSetToClipRect::startTest): Make our plugin window visible, and set things up
        to ensure we get a WM_WINDOWPOSCHANGED message about it becoming visible.
        (WindowRegionIsSetToClipRect::finishTest): Check that the window region is what we expect,
        then clean up and tell the test harness we're done.
        (WindowRegionIsSetToClipRect::checkWindowRegion): Moved code to check the window region here
        from NPP_SetWindow. Changed to use the fancy new log() function instead of pluginLog().
        (WindowRegionIsSetToClipRect::showTestHarnessWindowIfNeeded): Show the test harness's window
        if it is hidden. This is needed to ensure we get a WM_WINDOWPOSCHANGED message when our own
        window becomes visible.
        (WindowRegionIsSetToClipRect::hideTestHarnessWindowIfNeeded): Hide the test harness's window
        if it was hidden at the start of the test.
        (WindowRegionIsSetToClipRect::wndProc): When our timer fires, tell the UI process to paint.
        This should cause our window to become visible and our window region to get set. When we get
        a WM_WINDOWPOSCHANGED message, we can finally finish the test.
        (WindowRegionIsSetToClipRect::NPP_GetValue): Return our script object.
        (WindowRegionIsSetToClipRect::ScriptObject::hasMethod): We only have one method:
        "startTest".
        (WindowRegionIsSetToClipRect::ScriptObject::invoke): Call through to the PluginTest object.

        * DumpRenderTree/TestNetscapePlugIn/win/WindowedPluginTest.cpp:
        (WindowedPluginTest::testHarnessWindow):
        * DumpRenderTree/TestNetscapePlugIn/win/WindowedPluginTest.h:
        Added this helper function. Code came from NPNInvalidateRectInvalidatesWindow.

2011-05-10  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add new qt-4.8 platform for layout testing
        https://bugs.webkit.org/show_bug.cgi?id=60544

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitdirs.pm:

2011-05-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86108.
        http://trac.webkit.org/changeset/86108
        https://bugs.webkit.org/show_bug.cgi?id=60533

        Broke makefile based builds and Cairo (Requested by weinig on
        #webkit).

        * Scripts/build-api-tests:
        * Scripts/run-api-tests:
        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops:
        * TestWebKitAPI/Test.h:
        (TestWebKitAPI::Test::~Test):
        (TestWebKitAPI::Test::name):
        (TestWebKitAPI::Test::Register::Register):
        (TestWebKitAPI::Test::Register::create):
        (TestWebKitAPI::Test::Test):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/VectorBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController):
        (TestWebKitAPI::TestsController::dumpTestNames):
        (TestWebKitAPI::TestsController::runTestNamed):
        (TestWebKitAPI::TestsController::testFailed):
        (TestWebKitAPI::TestsController::registerCreateTestFunction):
        * TestWebKitAPI/TestsController.h:
        * TestWebKitAPI/mac/main.mm:
        (main):

2011-05-09  Hayato Ito  <hayato@chromium.org>

        Reviewed by Ojan Vafai.

        Skip reftests if pixel tests are disabled.

        https://bugs.webkit.org/show_bug.cgi?id=59078

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-05-09  Chang Shu  <cshu@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DumpRenderTreeQt needs an implementation of unmarkText
        https://bugs.webkit.org/show_bug.cgi?id=60499

        The implementation is similar to gtk.

        * DumpRenderTree/qt/TextInputControllerQt.cpp:
        (TextInputController::unmarkText):
        * DumpRenderTree/qt/TextInputControllerQt.h:

2011-05-09  James Robinson  <jamesr@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] Teach new-run-webkit-tests to follow symlinks when trying to determine the arch of DumpRenderTree on linux
        https://bugs.webkit.org/show_bug.cgi?id=60520

        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:

2011-05-09  Dmitry Lomov  <dslomov@google.com>

        Reviewed by Sam Weinig.

        Switch TestWebKitAPI to GTest
        https://bugs.webkit.org/show_bug.cgi?id=59561

        * Scripts/build-api-tests:
        * Scripts/run-api-tests:
        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops:
        * TestWebKitAPI/Test.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/VectorBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController):
        (TestWebKitAPI::TestsController::dumpTestNames):
        (TestWebKitAPI::TestsController::runTestNamed):
        (TestWebKitAPI::TestsController::runAllTests):
        * TestWebKitAPI/TestsController.h:
        * TestWebKitAPI/mac/main.mm:
        (main):

2011-05-09  Igor Oliveira  <igor.oliveira@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] DRT eventSender.addTouchPoint method is not setting the start position
        https://bugs.webkit.org/show_bug.cgi?id=60487

        When adding a new touch point, the start position of this point needs to be set.

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::addTouchPoint):

2011-05-09  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=57137

        Unskip plugins/embed-prefers-plugins-for-images.html

        Add image/png mime-type to test netscape plugin on Unix.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (NP_GetMIMEDescription):

2011-05-09  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ojan Vafai.

        Pull jsonresults_unittest test cases out into separate test methods.
        https://bugs.webkit.org/show_bug.cgi?id=60418

        * TestResultServer/model/jsonresults_unittest.py:

2011-05-09  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] fix fast/dom/Geolocation/window-close-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=60458

        Update all pages with Mock position/error/permission.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setGeolocationPermission):
        (LayoutTestController::setMockGeolocationError):
        (LayoutTestController::setMockGeolocationPosition):

2011-05-09  Shishir Agrawal  <shishir@chromium.org>

        Reviewed by Tony Gentilcore.

        Implement Page Visibility API.
        https://bugs.webkit.org/show_bug.cgi?id=54181

        * DumpRenderTree/LayoutTestController.cpp:
        (setPageVisibilityCallback):
        (resetPageVisibilityCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::setPageVisibility):
        (LayoutTestController::resetPageVisibility):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::resetPageVisibility):
        (LayoutTestController::setPageVisibility):
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-05-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Testing EWS spins on patches with a large number of failures
        https://bugs.webkit.org/show_bug.cgi?id=60441

        In cases where the tree has a small number of persistent failures but a
        patch has a large number of failures, we weren't believing any results.
        That lead to us retrying the patch forever while we waited for
        trustworthy results that would never come.

        This patch loosens the semantics of unexpected_failures to return a
        subset (rather than the exact set) of unexpected failures.  In the case
        where the tree has a bounded number of failures and the patch has an
        unbounded number of failures, we can accurately compute such a subset
        and reject the patch.

        * Scripts/webkitpy/tool/bot/expectedfailures.py:
        * Scripts/webkitpy/tool/bot/expectedfailures_unittest.py:
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2011-05-07  Joe Mason  <jmason@rim.com>

        Reviewed by Daniel Bates.

        FrameLoader::isProcessingUserGesture is wrong in dispatchWillPerformClientRedirect
        https://bugs.webkit.org/show_bug.cgi?id=52211

        Dump isUserProcessingGesture in willPerformClientRedirect so that the layout tests can be extended.
        (For the Mac and Chromium ports - other ports don't support dumping user gestures in DRT.)

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::willPerformClientRedirect):
        (WebViewHost::didStartProvisionalLoad):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:willPerformClientRedirectToURL:delay:fireDate:forFrame:]):

2011-05-07  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the build; remove some more references to isTiger(), which was removed in changeset 86007
        <http://trac.webkit.org/changeset/86007> (bug #60438).

        * Scripts/old-run-webkit-tests:
          - Removed reference to isTiger() from openDumpTool(), captureSavedCrashLog(), and
            file local variable. 

2011-05-07  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Darin Adler.

        Remove references to Tiger in scripts
        https://bugs.webkit.org/show_bug.cgi?id=60438

        Remove isTiger() and all of the code that depends on it.

        * Scripts/build-webkit:
        * Scripts/ensure-valid-python:
        * Scripts/gdb-safari:
        * Scripts/webkitdirs.pm:

2011-05-06  David Grogan  <dgrogan@chromium.org>

        Reviewed by Eric Seidel.

        update link to message about mac 64bit git binaries
        https://bugs.webkit.org/show_bug.cgi?id=60411

        The original message implied (correctly, at-the-time) that
        http://code.google.com/p/git-osx-installer/ doesn't provide 64-bit
        binaries. The new message notes that they do. This might prevent someone
        else from spending a few minutes confused.

        * Scripts/webkitpy/common/checkout/scm/git.py:

2011-05-06  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: crashes in race with crashing DRT
        https://bugs.webkit.org/show_bug.cgi?id=60238

        This fixes a race where if we wrote the URL to DRT and
        DRT crashed immediately, we could get a broken pipe
        error back during the write() and not handle it correctly,
        causing NRWT to also crash.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-05-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add a --skip-integrationtests mode to test-webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=60354

        These two test suites account for 2/3 of test-webkitpy's running time
        because they're not actually unit tests.  They're integration tests.
        This patch adds the ability to skip integration tests by passing a
        command line argument to test-webkitpy.  The buildbots will continue to
        run these integration tests to make sure they don't regress.  This
        option is for use by developers when working on parts of the code that
        are well-covered by unit tests.

        * Scripts/webkitpy/common/system/file_lock_integrationtest.py: Copied from Tools/Scripts/webkitpy/common/system/file_lock_unittest.py.
        * Scripts/webkitpy/common/system/file_lock_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py: Copied from Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py: Removed.
        * Scripts/webkitpy/test/main.py:

2011-05-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        The results.zip generated by the Chromium EWS are too big
        https://bugs.webkit.org/show_bug.cgi?id=60352

        Currently results.zip created by the Chromium EWS bot contain roughly
        1000 tests that we expect to fail.  These test results are not helpful
        to contributors.

        There are several approaches to solving this problem:

        1) We could be more selective about which files to include in the zip.
        2) We could ask new-run-webkit-tests not to generate results for
           expected failures.
        3) We could ask new-run-webkit-tests not to run tests that we expect to
           fail.

        This patch takes approach (3).  Currently, we're ignoring the outcome
        of failing tests anyway, so there's not much point in actually running
        them.  As a side benefit, this will speed up the test run by about 6%.
        In the future, we might revisit this decision and choose another
        approach.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:

2011-05-06  Gabor Rapcsanyi  <rgabor@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Use qt-arm platform instead of qt-linux on ARM platform.

        * Scripts/old-run-webkit-tests:

2011-05-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Ojan Vafai.

        Add an option to NRWT to skip failing tests
        https://bugs.webkit.org/show_bug.cgi?id=60295

        This option is similar to the way old-run-webkit-tests works.  We're
        planning to use this option on the testing EWS bots because they don't
        use information from failing tests yet.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-05-04  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Dimitri Glazkov.

        Implement LayoutTestController::pseudoShadowId()
        https://bugs.webkit.org/show_bug.cgi?id=60034

        shadowPseudoId support in the various LayoutTestController
        implementations.

        * DumpRenderTree/LayoutTestController.cpp:
        (shadowPseudoIdCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::shadowPseudoId):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::shadowPseudoId):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::shadowPseudoId):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::shadowPseudoId):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::shadowPseudoId):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::shadowPseudoId):
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::shadowPseudoId):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-05-06  Adam Barth  <abarth@webkit.org>

        EWS can't reject patches
        https://bugs.webkit.org/show_bug.cgi?id=60345

        We're supposed to use patch.id() for the attachment ID, silly.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2011-05-05  Steve Lacey  <sjl@chromium.org>

        Reviewed by Ojan Vafai.

        Fix generation of results html file by passing relative path to scm
        methods.
        Generate diff images for results html file.

        https://bugs.webkit.org/show_bug.cgi?id=60086

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:

2011-05-05  Andy Estes  <aestes@apple.com>

        Reviewed by Daniel Bates.

        update-webkit should handle Internal using a different VCS than OpenSource.
        https://bugs.webkit.org/show_bug.cgi?id=60310

        isGit() and isSVN() cache their results, so Internal will always be
        updated using the VCS commands used for OpenSource. If Internal uses a
        different VCS, this will fail. Fix this by calling isGitDirectory() and
        isSVNDirectory() instead, which do not cache their results.

        * Scripts/update-webkit:

2011-05-05  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        nrwt: revamp integration tests incl. tests for servers
        https://bugs.webkit.org/show_bug.cgi?id=59985

        This change adds the ability to run "integration tests" that
        depend on (and affect) the local environment on your machine.
        These tests can be run manually by invoking python on the
        test file in question and passing the '-i' flag, but are
        not run automatically as part of test-webkitpy.

        Integration tests are identified by being methods named as
        "integration_test_*" instead of "test_*", and we use a
        custom TestLoader instead of the default one provided by
        unittest.

        This change also adds a protected "_default_to_apache" method
        to the port object so we can do the right thing when starting
        and stopping web servers with less mechanism.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:

2011-05-05  Adam Roben  <aroben@apple.com>

        Robustify DRT's pixel-dumping code against semi-random alpha channel values on Windows

        DRT generates a pixel dump on Windows using the WM_PRINT message. This message (just like
        most of GDI) doesn't write anything meaningful into the alpha channel. In some cases, the
        alpha channel will even get filled with zeros (like when ::GradientFill is used). To
        safeguard against this, we fill the alpha channel with constant full opacity after the
        WM_PRINT message is handled to ensure we end up with an opaque image. (Note that we can't
        just ignore the alpha channel when creating the PNG; Mac's pixel results have an alpha
        channel, and we want to be able to compare Mac and Windows pixel results, so Windows pixel
        results need an alpha channel, too.)

        Fixes <http://webkit.org/b/60300> draws-gradient.html's pixel results can't be correctly
        generated due to alpha channel weirdness

        Reviewed by Sam Weinig.

        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (makeAlphaChannelOpaque): Added this helper function to fill a bitmap's alpha channel with
        constant full opacity.
        (createBitmapContextFromWebView): Make the bitmap's alpha channel opaque before wrapping it
        in a CGContext or cairo_surface.

2011-05-05  Adam Roben  <aroben@apple.com>

        Add support for layoutTestController.dumpAsText(true) to WebKitTestRunner

        Passing true tells the test harness to dump pixels even though we're not dumping a render
        tree.

        Fixes <http://webkit.org/b/60298> Calling layoutTestController.dumpAsText(true) in
        WebKitTestRunner doesn't result in pixel results being generated

        Reviewed by Sam Weinig.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Added dumpPixels
        argument to dumpAsText.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump): Updated for dumpAsText change.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::dumpAsText): Store the dumpPixels argument.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Updated for IDL change.

        * WebKitTestRunner/win/InjectedBundle.vcproj: Added .idl files as a convenience for Windows
        developers.

2011-05-05  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: merge os, version fields in test config
        https://bugs.webkit.org/show_bug.cgi?id=60004

        This change removes the 'o/s' field from the TestConfiguration
        object, and changes the 'MAC', 'WIN', and 'LINUX' modifiers in
        the expectations file to macros that expand to the version names
        for each platform.

        This means that you can once again put any subset of the
        operating system versions on a single line, e.g.:
          BUGX LEOPARD XP LINUX : fast/html/foo.html = FAIL

        This change will break any existing test_expectations.txt
        file that uses the "OS-VERSION" macros, which are no longer
        needed. It turns out they were never needed, as just VERSION
        by itself was sufficient. The test_expectations.txt file should
        be updated accordingly prior to landing this change.

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:

2011-05-05  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        [chromium] switch from Lucida to free fonts for Hindi and Thai
        https://bugs.webkit.org/show_bug.cgi?id=60287

        The fonts are provided by the ttf-thai-tlwg and ttf-indic-fonts
        packages on Lucid. There are actually multiple Thai fonts in the
        package, so I just picked one.

        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (setupFontconfig):

2011-05-05  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] google-chrome-64 builds should now fallback to chromium-linux-x86_64 results
        https://bugs.webkit.org/show_bug.cgi?id=60290

        It used to be that google-chrome-32 was hardy32, google-chrome-64 was
        hardy64, chromium-linux was hardy32 and chromium-linux-x86_64 was
        lucid64.  Because of that, google-chrome-64 used to skip the
        chromium-linux-x86_64 results since they were more incorrect.

        Now that we're switching to lucid for google-chrome, we want
        google-chrome-64 to fall back to chromium-linux-x86_64.

        * Scripts/webkitpy/layout_tests/port/google_chrome.py:

2011-05-05  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: merge TestExpectations, TestExpectationsFile classes
        https://bugs.webkit.org/show_bug.cgi?id=60002

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/result_summary.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/style/checkers/test_expectations.py:

2011-05-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should reject patches which fail ewses
        https://bugs.webkit.org/show_bug.cgi?id=47534

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2011-05-05  Chang Shu  <cshu@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Support PageGroup in QGraphicsWKView/QWKPage constructors
        https://bugs.webkit.org/show_bug.cgi?id=59638

        1. Call QGraphicsWKView constructor with pageGroupRef.
        2. Disable setFontFamily calls as it breaks Qt test fonts.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WebView::WebView):
        (WTR::PlatformWebView::PlatformWebView):

2011-05-05  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Add --only-webkit option to build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=60245

        * Scripts/build-webkit: If --only-webkit was specified
        just build the WebKit project, and not its dependencies.

2011-05-05  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Add didNotHandleWheelEvent callback to WKPageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=60203

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowUIClientInit): Stub out didNotHandleWheelEvent callback.
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]): Stub out didNotHandleWheelEvent callback.
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create): Stub out didNotHandleWheelEvent callback.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage): Stub out didNotHandleWheelEvent callback.
        (WTR::TestController::initialize): Stub out didNotHandleWheelEvent callback.

2011-05-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add more missing imports from scm refactor
        https://bugs.webkit.org/show_bug.cgi?id=60239

        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:

2011-05-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        sheriff-bot is having more exception trouble
        https://bugs.webkit.org/show_bug.cgi?id=60233

        A webpage-forced build was causing SB to throw an exception.
        We've long had this bug, but we just didn't notice it until now.

        In debugging this I found we fetch an absurd amount of data now
        that we use buildbot's json (instead of xmlrpc), so I added
        the filter=1 parameter to reduce it a little.  That required
        me to handle the case where filter=1 would strip
        result=0 in some cases (it's unclear why it does that).

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-05-04  Cris Neckar  <cdn@chromium.org>

        Unreviewed, Adding Cris Neckar as a committer

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

2011-05-04  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][Wk2][Symbian] Capabilities for Qt MiniBrowser and QtWebProcess on Symbian
        https://bugs.webkit.org/show_bug.cgi?id=59462

        * MiniBrowser/qt/MiniBrowser.pro: Add Symbian OS capabilities to executable. Also enable data paging. 

2011-05-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        The testing EWS bots should upload layout-test-results.zip to bugs after failures
        https://bugs.webkit.org/show_bug.cgi?id=60223

        This required sharing a bit of code between the commit-queue
        (which already knew how to do this) and the new EWS testing bots.

        In the process I also cleaned up EWS testing a little and
        removed some dead code from the commit-queue.

        * Scripts/webkitpy/common/config/committervalidator.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2011-05-04  James Kozianski  <koz@chromium.org>

        Reviewed by Eric Seidel.

        Add method to make a Port able to retrieve TestOutputSets from its builders.
        https://bugs.webkit.org/show_bug.cgi?id=58211

        This will be used in the new rebaseline script - TestOutputs are
        potential new baselines.

        * Scripts/webkitpy/common/config/urls.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-05-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Ojan Vafai.

        sheriff-bot can't parse results.html
        https://bugs.webkit.org/show_bug.cgi?id=60196

        The problem was that the NRWT bots are currently core
        and so sheriff-bot was trying to diagnose failures on
        them.  It was trying to parse their results.html file
        and BeautifulSoup was throwing an exception.

        It seems our version of BeautifulSoup was quite old
        and unable to handle <script> tags correctly.
        This moves us to 3.2 which doesn't seem to have this bug.

        * Scripts/webkitpy/thirdparty/BeautifulSoup.py:

2011-05-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make the EWS test logging less verbose
        https://bugs.webkit.org/show_bug.cgi?id=60201

        This should help us generate less than a hundred MB of logs per hour.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:

2011-05-04  Tao Bai  <michaelbai@chromium.org>

        Reviewed by David Kilzer.

        Populate touch-icon url to FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=59143

        Disable touch icon by default. 

        * Scripts/build-webkit:

2011-05-04  Justin Novosad  <junov@chromium.org>

        Reviewed by Kenneth Russell.

        [Chromium] Add gpu acceleration flags to DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=60168
        Adding support for command line flags 
        enable-accelerated-2d-canvas an
        enable-accelerated-drawing in DumpRenderTree.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setLegacyAccelerated2dCanvasEnabled):
        (TestShell::setAcceleratedDrawingEnabled):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:

2011-05-04  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] run-qtwebkit-tests misses exec bit
        https://bugs.webkit.org/show_bug.cgi?id=60188

        Also removing an unecessary import (mostly to let this bugfix goes
        through the system, as this is just a chmod).

        * Scripts/run-qtwebkit-tests:

2011-05-04  Adam Barth  <abarth@webkit.org>

        Fix import of ircproxy module to actually import the module.  I don't
        really understand how this code could have worked before.

        * Scripts/webkitpy/common/host.py:

2011-05-04  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Andreas Kling.

        [Qt][Wk2][Symbian] Minor UI facelift for MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=60172

        * MiniBrowser/qt/BrowserWindow.cpp: Bring in UI layout changes from QtTestBrowser
        (BrowserWindow::BrowserWindow):

2011-05-04  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Ojan Vafai.

        [NRWT] --new-baseline should put baselines in the directory specified by --additional-platform-directory
        https://bugs.webkit.org/show_bug.cgi?id=60088
        
        Makes --new-baseline put new baselines into the first entry in the
        baseline search path, including any additional directories passed in via
        --additional-platform-directory.
        
        Simplifies baseline_path() by making it return the first entry in the
        baseline search path instead of requiring each port to have an
        implementation (should not result in any behavior change).

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.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/mac.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-05-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix circular dependency in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=60075

        These functions don't belong in bugzilla.py.  They only exist there
        because they are old.  Really, these functions shouldn't be free
        functions at all, but that's a patch for another day.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/checkout/checkout.py:
        * Scripts/webkitpy/common/config/urls.py:
        * Scripts/webkitpy/common/net/bugzilla/__init__.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        * Scripts/webkitpy/style/checkers/changelog.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/commands/upload.py:

2011-05-03  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=60141
        Remove reference to libWebKitSystemInterfaceTiger.a from build-webkit

        * Scripts/build-webkit:

2011-05-03  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Ojan Vafai.

        Update rebaseline queue server to handle hierarchical test results
        https://bugs.webkit.org/show_bug.cgi?id=60063
        
        Update test result parsing done by the rebaseline queue server to handle
        the hierarchical test result output that is generated as of r85254.

        * RebaselineQueueServer/templates/builder-queue-edit.html:

2011-05-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        webkit-patch post-commits HEAD^.. throws an exception
        https://bugs.webkit.org/show_bug.cgi?id=60027

        * Scripts/webkitpy/common/checkout/scm/git.py:

2011-05-03  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Layout tests may timeout if loadFinished receives false
        https://bugs.webkit.org/show_bug.cgi?id=60064

        When using layoutTestController.queueLoad(), if QWebPage::loadFinished(bool) receives false
        then the layout test may timout. It happens that QWebPage::loadFinished() receives false when
        a response is ignored, like it should be for 204 responses. It is a problem for creating
        tests for 204 responses for example.

        This change has been tested and it causes no regressions in layout tests.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::maybeDump):

2011-05-03  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, rolling out r85659.
        http://trac.webkit.org/changeset/85659
        https://bugs.webkit.org/show_bug.cgi?id=59977

        restarting isn't working correctly

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-05-03  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: fix http server startup/shutdown

        Previous versions of the code had three problems that made startup
        and shutdown flaky. The first is that it would throw exceptions
        if it couldn't delete stale log files, which was overly
        paranoid. The second is that some of the exceptions weren't
        defined properly. The third, and most important, is that it was
        using urllib to check if ports were available, which was leaving
        sockets in a half-closed state, and keeping ports from being
        reused. By switching to raw sockets, we are able to now reliably
        restart.

        This change also switches the code to using Executives to stop
        processes, which will let us delete a bunch of code in the
        port/* implementations and fix a weird layering problem in a
        subsequent patch.

        https://bugs.webkit.org/show_bug.cgi?id=59977

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-05-03  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        fix failing printing_unittest on win32
        https://bugs.webkit.org/show_bug.cgi?id=59963

        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:

2011-05-03  Adam Roben  <aroben@apple.com>

        Fix most strict PassOwnPtr violations on Windows

        Fixes <http://webkit.org/b/60025> Windows should (almost) build with strict PassOwnPtr
        enabled

        Reviewed by Anders Carlsson.

        * WebKitAPITest/Test.h: Use adoptPtr.

2011-05-03  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Reviewed by Andreas Kling.

        Add myself to the committers list.

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

2011-05-03  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Layout test animations/3d/replace-filling-transform.html failing
        https://bugs.webkit.org/show_bug.cgi?id=59839

        Add animations/3d to the list of tests run in the chromium-gpu configuration since these tests exercise the compositor.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-05-03  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Unreviewed, rolling out r85471.
        http://trac.webkit.org/changeset/85471
        https://bugs.webkit.org/show_bug.cgi?id=59922

        The rule of thumb in EFL is that you init in all the places
        you use it. So, if in your application you call ecore_evas_*
        functions, you have to call ecore_evas_init() first.

        * EWebLauncher/main.c: always call *_init() functions when you use
        that namespace.
        (quit):
        (main):

2011-05-02  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        remove no longer used method
        https://bugs.webkit.org/show_bug.cgi?id=59981

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-05-02  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        add image toggling behavior from old-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=59978

        Output -diffs.html files. This matches old-run-webkit-tests.
        In theory, we could use data urls in the results.html file, but
        data urls don't currently have access to local files.

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:

2011-05-02  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [nrwt] remove some obsolete references to .checksum files
        https://bugs.webkit.org/show_bug.cgi?id=59971

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-05-02  Adam Roben  <aroben@apple.com>

        Take advantage of implicit nullptr_t -> PassOwnPtr conversion

        Fixes <http://webkit.org/b/59964> Implicit conversion from std::nullptr_t to PassOwnPtr
        doesn't work, but should

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/CppBoundClass.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:

2011-05-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Compiler warning in Tools/MiniBrowser/main.c
        https://bugs.webkit.org/show_bug.cgi?id=59986

        Remove a compiler warning.

        * MiniBrowser/gtk/main.c: Use full array initializers to prevent some compilers
        from complaining.

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add runtests_unittest.py
        https://bugs.webkit.org/show_bug.cgi?id=59955

        I forgot to add this file in a previous patch.

        * Scripts/webkitpy/tool/steps/runtests_unittest.py: Added.

2011-05-02  Adam Barth  <abarth@webkit.org>

        Change the testing EWS to log failures explicitly to avoid an infinite loop.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:

2011-05-02  Adrienne Walker  <enne@google.com>

        Unreviewed, fix misspelled contributor name.

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

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        cr-linux-ews should run tests
        https://bugs.webkit.org/show_bug.cgi?id=59272

        This patch turns on testing for the cr-linux-ews.  Yay!

        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2011-05-02  Martin Robinson  <mrobinson@igalia.com>

        Incorporate a review comment that I mistakenly omitted from my last commit.

        * DumpRenderTree/gtk/EventSender.cpp: Use unsigned here instead of unsigned int.

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        EWS should report the list of unexpected failures
        https://bugs.webkit.org/show_bug.cgi?id=59923

        We cache the results of the first layout test results run on the task
        so the EWS can grab them later.  Another option is to include them in
        the exception that's thrown, but this approach seemed slightly more
        aesthetic.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add base case for a test-running EWS
        https://bugs.webkit.org/show_bug.cgi?id=59920

        Later I will subclass this to run the Chromium Linux EWS.

        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py: Added.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2011-05-02  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:

2011-05-02  Nico Weber  <thakis@chromium.org>

        Reviewed by Mihai Parparita.

        Add --no-webkit2 to the output of "build-webkit -h"
        https://bugs.webkit.org/show_bug.cgi?id=59942

        * Scripts/build-webkit:

2011-05-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] old-run-webkit-tests should disable the Ubuntu overlay scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=59943

        Disable the Ubuntu overlay scrollbar while testing, by injecting the
        LIBOVERLAY_SCROLLBAR=0 environment variable.

        * Scripts/old-run-webkit-tests:

2011-05-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] editing/selection/select-out-of-editable.html failing after r83967
        https://bugs.webkit.org/show_bug.cgi?id=58667

        Do not trigger mouse down events when the EventSender knows that a mouse button is
        already down. These type of situations can confuse Xvfb and cause dragging failures.

        * DumpRenderTree/gtk/EventSender.cpp:
        (mouseDownCallback): Do not trigger another mouse button down event if the mouse button
        is already down. This can interfere with drags in Xvfb.

2011-05-02  Zsolt Fehér  <h490267@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        DRT sideeffect revealed by r71268.
        https://bugs.webkit.org/show_bug.cgi?id=48958

        Reset QWebSettings::ZoomTextOnly attribute before all tests. 

        Call setTextSizeMultiplier(1.0) to reset TextZoomFactor and 
        PageZoomFactor too. It should be done before resetsettings() 
        to guarantee resetting QWebSettings::ZoomTextOnly correctly.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):

2011-05-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r85469.
        http://trac.webkit.org/changeset/85469
        https://bugs.webkit.org/show_bug.cgi?id=59928

        Broke  webkitpy-tests on Windows 7, GTK and Qt. (Requested by
        bbandix on #webkit).

        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py: Removed.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2011-05-02  Tomasz Morawski  <t.morawski@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        Cleanup EFL initialization/shutdown in the EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=59922

        Removed ecore_evas_init and edje_init form main function due to they
        are also called in the ewk_init. Moved ewk_shutdown to quit function.

        * EWebLauncher/main.c:
        (quit):
        (main):

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add base case for a test-running EWS
        https://bugs.webkit.org/show_bug.cgi?id=59920

        Later I will subclass this to run the Chromium Linux EWS.

        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py: Added.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add the ability to skip python and perl unit tests on EC2
        https://bugs.webkit.org/show_bug.cgi?id=59918

        * Scripts/webkitpy/common/config/ports.py:
            - This is slightly ugly, but it's useful...
        * Scripts/webkitpy/common/config/ports_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/runtests.py:

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2011-04-29  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, add new directory to the build.

        * waf/build/settings.py:

2011-04-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement UI client in minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=58416

        It also allows to open more than one minibrowser window from the
        command line.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowFinalize):
        (browser_window_init):
        (browserWindowConstructed):
        (createNewPage):
        (showPage):
        (closePage):
        (runJavaScriptAlert):
        (browserWindowUIClientInit):
        * MiniBrowser/gtk/main.c:
        (loadURI):
        (main):

2011-04-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement page loader client in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=58024

        A new class BrowserWindow has been added to implement the page
        loader client. It makes supporting multiple windows easier. Window
        title and url entry are now updated during the loading process.

        * MiniBrowser/gtk/BrowserWindow.c: Added.
        (activateUriEntryCallback):
        (goBackCallback):
        (goForwardCallback):
        (browserWindowFinalize):
        (browserWindowGetProperty):
        (browserWindowSetProperty):
        (browser_window_init):
        (browserWindowConstructed):
        (browser_window_class_init):
        (browserWindowUpdateTitle):
        (browserWindowSetTitle):
        (browserWindowSetLoadProgress):
        (browserWindowUpdateURL):
        (didStartProvisionalLoadForFrame):
        (didReceiveServerRedirectForProvisionalLoadForFrame):
        (didFailProvisionalLoadWithErrorForFrame):
        (didCommitLoadForFrame):
        (didFinishDocumentLoadForFrame):
        (didFinishLoadForFrame):
        (didFailLoadWithErrorForFrame):
        (didReceiveTitleForFrame):
        (didFirstLayoutForFrame):
        (didFirstVisuallyNonEmptyLayoutForFrame):
        (didRemoveFrameFromHierarchy):
        (didStartProgress):
        (didChangeProgress):
        (didFinishProgress):
        (didBecomeUnresponsive):
        (didBecomeResponsive):
        (browserWindowLoaderClientInit):
        (browser_window_new):
        (browser_window_get_view):
        * MiniBrowser/gtk/BrowserWindow.h: Added.
        * MiniBrowser/gtk/GNUmakefile.am:
        * MiniBrowser/gtk/main.c:
        (createWindow):

2011-04-28  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=59743
        <rdar://problem/9040413> Add an install target for production builds.

        * DumpRenderTree/mac/PerlSupport/Makefile:

2011-04-28  Adam Roben  <aroben@apple.com>

        Stop and restart ATSServer before each test run on Leopard

        This is to work around an ATSServer leak that eventually causes tests
        to fail.

        Fixes <http://webkit.org/b/51807> <rdar://problem/9273894>
        fast/blockflow/broken-ideograph-[small-caps|font].html sometimes fails on Leopard buildbots
        (due to ATSServer leak)

        Reviewed by Dan Bernstein.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (StopATSServer):
        (StartATSServer):
        Added these new commands to stop and start ATSServer.

        (TestFactory.__init__): Stop and start ATSServer on Leopard before running tests.

2011-04-28  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        add Leopard NRWT bot to the scheduler
        https://bugs.webkit.org/show_bug.cgi?id=59766

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

2011-04-28  Sam Weinig  <sam@webkit.org>

        Fix WebKitTestRunner build.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        The Derived Sources target needs a product name.

2011-04-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Add install support for WebKitTestRunner.
        <rdar://problem/9349055>

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Add missing CompilerVersion.xcconfig.

        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        Add install path and tell it not to skip installation.

        Add missing CompilerVersion.xcconfig.

2011-04-28  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        Remove IMAGE_RESIZER related code.
        https://bugs.webkit.org/show_bug.cgi?id=59735

        * Scripts/build-webkit:

2011-04-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Make reading skipped files from additional platform
        directories work in WebKit2 mode.

        * Scripts/old-run-webkit-tests:
        (buildPlatformTestHierarchy): Simplify logic to always use the first
        and last platforms in the build hierarchy as the test hierarchy, and to
        insert the WebKit2 platform in the middle if it exists. Yum.

2011-04-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove WML
        https://bugs.webkit.org/show_bug.cgi?id=59678

        Remove build system integration and test harness integration for WML.

        * Scripts/build-webkit:
        * Scripts/old-run-webkit-tests:
        * Scripts/webkitperl/features.pm:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-04-28  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Mihai Parparita.

        use a hierarchical data structure to store results json
        https://bugs.webkit.org/show_bug.cgi?id=59736

        Instead of a map from test name to results dict, we now store a hierarchical
        data structure.

        Old: { foo/bar/baz.html: results_dict, foo/bar/baz2.html: results_dict }
        New:
        { foo: {
            bar: {
              baz.html: results_dict,
              baz2.html: results_dict } } }

        This cut ~52% of the size of times_ms.json. I expect it will cut
        30-40% of full_results.json and unexpected_results.json.

        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        Using os.sep was just wrong since relative_test_filename canonicalizes separators.
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        Instead of plumbing through the change to all of the rebaselineserver
        python and JS, just convert to the old format after reading in the json.

2011-04-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS Bubbles should show commit-queue position when patch is in the commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=59744

        Add target="_top" to the bubble links.  This was
        forgotten when I moved from using an onclick to a normal link.

        * QueueStatusServer/templates/statusbubble.html:

2011-04-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS bubbles should show "submit to ews" button if they've not been processed
        https://bugs.webkit.org/show_bug.cgi?id=59751

        * QueueStatusServer/handlers/statusbubble.py:
        * QueueStatusServer/handlers/submittoews.py:
        * QueueStatusServer/templates/statusbubble.html:
        * QueueStatusServer/templates/submittoews.html:

2011-04-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS Bubbles should show commit-queue position when patch is in the commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=59744

        This was actually just a 2 line change to statusbubble.py.
        I also cleaned up statusbubble.html a little while I was there
        (the links are now actual <a> tags and have hover).

        * QueueStatusServer/handlers/statusbubble.py:
        * QueueStatusServer/templates/statusbubble.html:

2011-04-28  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        add a mac leopard release NRWT bot
        https://bugs.webkit.org/show_bug.cgi?id=59733

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

2011-04-28  Ojan Vafai  <ojan@chromium.org>

        Avoid crashing when running new-run-webkit-tests outside of
        version control.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:

2011-04-28  Xan Lopez  <xlopez@igalia.com>

        Unreviewed build fix.

        * GNUmakefile.am:

2011-04-28  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        fix python printing test
        https://bugs.webkit.org/show_bug.cgi?id=59719

        Now that we run scm commands in summarize_results, --verbose prints
        debug logging to stderr.

        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:

2011-04-28  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        link to tests at a specific revision in the results.html file
        https://bugs.webkit.org/show_bug.cgi?id=59711

        * Scripts/webkitpy/common/checkout/scm.py:
        Add a method to get the head svn revision.
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        Include the svn revision in the results json.

2011-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Sam Weinig.

        [GTK] Remove WKURLCreateWithURL()
        https://bugs.webkit.org/show_bug.cgi?id=59691

        Use WKURLCreateWithUTF8CString() instead of WKURLCreateWithURL().

        * MiniBrowser/gtk/main.c:
        (activateUriEntryCallback):
        (main):

2011-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] WKView should be a GtkWidget
        https://bugs.webkit.org/show_bug.cgi?id=59603

        Don't use WKViewGetWindow(), use WKView as a GtkWidget instead.

        * MiniBrowser/gtk/main.c:
        (createWindow):
        (main):

2011-04-28  Gabor Rapcsanyi  <rgabor@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Add ARM specific Skipped list
        https://bugs.webkit.org/show_bug.cgi?id=59680

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitdirs.pm:

2011-04-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        error_log.txt should include PHP errors
        https://bugs.webkit.org/show_bug.cgi?id=59643

        Turns out this was really easy after I finally learned
        enough about PHP to do it...

        I'm adding this in hopes of better tracking down
        our random http failures.

        * Scripts/webkitperl/httpd.pm:

2011-04-27  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        check-webkit-style should flags spacing errors for braces on the same line.
        https://bugs.webkit.org/show_bug.cgi?id=59665

        * Scripts/webkitpy/style/checkers/cpp.py: Added the check.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added some tests for the check
          and fixed some test cases to not trigger this error since it isn't what they are verifying.

2011-04-27  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        check-webkit-style error for spaces after periods in a comment has a bad error
        message and warns about end of line spaces.
        https://bugs.webkit.org/show_bug.cgi?id=59663

        * Scripts/webkitpy/style/checkers/cpp.py: Fix both issues.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added tests for spaces at the end of line
        and changed the error messages.

2011-04-27  Ojan Vafai  <ojan@chromium.org>

        remove assertion now that platform/mac-tiger no longer exists
        https://bugs.webkit.org/show_bug.cgi?id=59660

        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:

2011-04-27  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        remove test that didn't make sense
        https://bugs.webkit.org/show_bug.cgi?id=59658

        It was artifically saying the test wasn't expected to pass,
        but the expectations string was empty. The case of unexpected
        passes with a real expectations string is tested later in the
        same test.

        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:

2011-04-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        WebKit2 needs to notify the client when a plugin fails to initialize
        https://bugs.webkit.org/show_bug.cgi?id=59657

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        Add stubs.

2011-04-26  Sam Weinig  <sam@webkit.org>

        Reviewed by David Levin.

        Add a few more missing options to new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=59567

        Add support for:
            --threaded
            --gc-between-tests
            --complex-text

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-27  Mark Rowe  <mrowe@apple.com>

        Build fix.

        Fix an OwnPtr-related issue that was missed before the strictness was turned on.
        
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::runTest):

2011-04-27  Ojan Vafai  <ojan@chromium.org>

        Forgot to upload the new times_ms.json file after splitting
        it out from full_results.json.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:

2011-04-27  Ojan Vafai  <ojan@chromium.org>

        Fix snafu in generating the JSON for the chromium tests.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2011-04-27  Ojan Vafai  <ojan@chromium.org>

        Fix bad merge. This broke the chromium tests generating JSON files.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2011-04-27  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Geoff Garen.

        Don't look for results in a location that no longer exists.

        * Scripts/old-run-webkit-tests:

2011-04-27  Adrienne Walker  <enne@google.com>

        Unreviewed, add Chrome GPU folks to contributors that I'm tired of manually CCing

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

2011-04-22  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        only include failures in full_results.json
        https://bugs.webkit.org/show_bug.cgi?id=59256

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:

2011-04-22  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Roben.

        move times into their own json file
        https://bugs.webkit.org/show_bug.cgi?id=59239

        The test runtimes are the only case where we need an entry for
        every test that was run, including passing tests. Move them into
        their own json file so we can prune the other json files to only
        include failing tests.

        Use a trie-like data structure to hold the tests to avoid including
        full test paths. This cuts 52% of the filesize. The end result is ~700k
        pre-gzip.

        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        Exclude times from the parsed TestResults.
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:

2011-04-27  Anders Carlsson  <andersca@apple.com>

        More casts and more clang++ build fixes.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):

2011-04-27  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        lazily autoinstall thirdparty python libraries
        https://bugs.webkit.org/show_bug.cgi?id=55723

        This helps by only having pywebsocket installed when the bots run.  It
        doesn't help much for devs since webkit-patch pulls in almost everything.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/networktransaction.py:
        * Scripts/webkitpy/common/net/networktransaction_unittest.py:
        * Scripts/webkitpy/common/net/statusserver.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
        * Scripts/webkitpy/thirdparty/__init__.py: Add an import hook so we can install based on
            the import command rather than just installing everything.
        * Scripts/webkitpy/thirdparty/__init___unittest.py: Added.

2011-04-27  Girish Ramakrishnan  <girish@forwardbias.in>

        Add my IRC nick.

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

2011-04-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Mihai Parparita.

        sherrifbot create-bug shouldn't assign bugs to webkit.review.bot
        https://bugs.webkit.org/show_bug.cgi?id=59545

        To do this, I needed a way to look up contributors by irc-name
        (since anyone in #webkit who might use this command may not be a committer).
        To lookup contributors, I had to make Contributor a real object.
        Which led me to redesign parts of committers.py...
        and finally fix one spot in changelog.py where we wanted to be
        looking up contributors and not committers.

        Overall a pretty simple fix, once you wade through the yak-hair.

        This may not prevent *all* possible ways that bugs would get assigned
        to webkit.review.bot.  If we don't recognize the requester we will
        go through the previous code path (which shouldn't change the assignee
        on the bug from the default as far as I can tell).

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/committers_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:

2011-04-27  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Upstream Symbian platform plugin
        https://bugs.webkit.org/show_bug.cgi?id=58435

        Exempting directory WebKit/qt/symbian/platformplugin from style guide.

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:

2011-04-27  Jeff Miller  <jeffm@apple.com>

        Correct my IRC nickname.

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

2011-04-27  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Darin Adler.

        Change the email used on bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=59582

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

2011-04-27  James Kozianski  <koz@chromium.org>

        Reviewed by Ojan Vafai.

        Extract map from port to builder name.
        https://bugs.webkit.org/show_bug.cgi?id=58301

        * Scripts/webkitpy/layout_tests/port/__init__.py:
        * Scripts/webkitpy/layout_tests/port/builders.py: Added.
        * Scripts/webkitpy/layout_tests/port/builders_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/factory.py:

2011-04-27  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Martin Robinson.

        [GTK] Add proxy support to GtkLauncher
        https://bugs.webkit.org/show_bug.cgi?id=58852

        Add SOUP_TYPE_PROXY_RESOLVER_DEFAULT feature or set SOUP_SESSION_PROXY_URI for developers behind proxy.

        * GNUmakefile.am:
        * GtkLauncher/main.c:
        (main):

2011-04-27  Annie Sullivan  <sullivan@chromium.org>

        Reviewed by David Levin.

        Adding myself as a Chromium contributor to committers.py.

        https://bugs.webkit.org/show_bug.cgi?id=59576

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

2011-04-26  David Grogan  <dgrogan@chromium.org>

        Reviewed by David Levin.

        Adding myself to Chromium contributors list in committers.py
        https://bugs.webkit.org/show_bug.cgi?id=59565

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

2011-04-26  Chang Shu  <cshu@webkit.org>

        Reviewed by Laszlo Gombos.

        WebKitTestRunner needs layoutTestController.addOriginAccessWhitelistEntry
        https://bugs.webkit.org/show_bug.cgi?id=42544

        Also implemented removeOriginAccessWhitelistEntry and resetOriginAccessWhitelists.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::addOriginAccessWhitelistEntry):
        (WTR::LayoutTestController::removeOriginAccessWhitelistEntry):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Adele Peterson.

        AX: Add more text marker routines to DRT
        https://bugs.webkit.org/show_bug.cgi?id=58949

        Add a few more methods to help test the text marker system, including nextMarker, previousMarker and
        stringForMarkerRange.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (nextTextMarkerCallback):
        (previousTextMarkerCallback):
        (stringForTextMarkerRangeCallback):
        (AccessibilityUIElement::previousTextMarker):
        (AccessibilityUIElement::nextTextMarker):
        (AccessibilityUIElement::stringForTextMarkerRange):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::previousTextMarker):
        (AccessibilityUIElement::nextTextMarker):
        (AccessibilityUIElement::stringForTextMarkerRange):

2011-04-26  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * DumpRenderTree/mac/Configurations/CompilerVersion.xcconfig:
        * MiniBrowser/Configurations/CompilerVersion.xcconfig:
        * WebKitTestRunner/Configurations/CompilerVersion.xcconfig:

2011-04-26  Kevin Ollivier  <kevino@theolliviers.com>

        Rubberstamped by Eric Seidel.

        Enable waf to be used to build other ports
        https://bugs.webkit.org/show_bug.cgi?id=58213

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        * waf: Added.
        * waf/build: Added.
        * waf/build/build_utils.py: Added.
        * waf/build/settings.py: Added.
        * waf/build/waf_extensions.py: Added.
        * waf/build/wxpresets.py: Added.

2011-04-26  Sam Weinig  <sam@webkit.org>

        Reviewed by David Hyatt.

        Remove Datagrid from the tree
        https://bugs.webkit.org/show_bug.cgi?id=59543

        * Scripts/build-webkit:
        Remove feature.

        * iExploder/iexploder-1.3.2/htdocs/htmltags.in:
        * iExploder/iexploder-1.7.2/src/html-tags/webkit:
        Remove from fuzzer.

2011-04-26  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Update WinLauncher with command-line arguments to allow the
        transparency to be tested.  Use --transparent to create a
        transparent view.  Use --desktop to have the view fill the
        desktop area of the screen.
        https://bugs.webkit.org/show_bug.cgi?id=58300

        * WinLauncher/WinLauncher.cpp:
        (usesLayeredWebView): New method to indicate that the
        program is running with layered windows (alpha-blended
        transparent windows).
        (shouldUseFullDesktop): New method to indicate that the
        program is running across the full desktop (less any
        task bars.)
        (resizeSubViews): Layered window mode doesn't have any
        winapi child windows, so this routine is exited early
        for that case.
        (subclassForLayeredWindow): Subclass the window so we can
        override its defaut message loop.
        (computeFullDesktopFrame): Convenience function to get the
        desktop region and update the frame dimensions appropriately.
        (_tWinMain): Updated to accept the new '--transparent' and
        '--desktop' arguments.
        (InitInstance): Modified to exit early for the transparent
        background case.  WebKit will construct our primary window (with
        appropriate settings) so we don't need to create one ourselves.
        (WndProc): 
        (TransparentWndProc): New message loop for transparent windows,
        since they need special handling to support dragging.

2011-04-26  Alexandre MAzari  <amazari@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Implement LayoutTestController::setPluginsEnabled
        https://bugs.webkit.org/show_bug.cgi?id=59184

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setPluginsEnabled):

2011-04-26  Chang Shu  <cshu@webkit.org>

        Reviewed by Laszlo Gombos.

        WebKitTestRunner needs layoutTestController.setAllowFileAccessFromFileURLs
        https://bugs.webkit.org/show_bug.cgi?id=57572

        Remove the unnecessary code that updates preference.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setAllowUniversalAccessFromFileURLs):

2011-04-26  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] accessibility/aria-combobox-expected.txt
        https://bugs.webkit.org/show_bug.cgi?id=59399

        Implement isExpanded(), as it's used in the layout test.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isExpanded): Implemented.

2011-04-26  Adrienne Walker  <enne@google.com>

        Reviewed by Kent Tamura.

        [chromium] Fix memory leak in DRT due to OwnPtr<T*>
        https://bugs.webkit.org/show_bug.cgi?id=59489

        * DumpRenderTree/chromium/WebViewHost.h:

2011-04-26  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] Implement isChecked in DRT
        https://bugs.webkit.org/show_bug.cgi?id=59385

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isChecked): Implemented.

2011-04-26  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed, rolling out r84949.
        http://trac.webkit.org/changeset/84949
        https://bugs.webkit.org/show_bug.cgi?id=58852

        Broke GTK+ compilation

        * GtkLauncher/main.c:
        (main):

2011-04-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Mihai Parparita.

        sheriff-bot should have a create-bug command
        https://bugs.webkit.org/show_bug.cgi?id=59491

        This patch has some stderr unittest spew, but I will
        fix it after my live demo.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-04-26  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Martin Robinson.

        [GTK] Add proxy support to GtkLauncher
        https://bugs.webkit.org/show_bug.cgi?id=58852

        Add SOUP_TYPE_PROXY_RESOLVER_DEFAULT feature or set SOUP_SESSION_PROXY_URI for developers behind proxy.

        * GtkLauncher/main.c:
        (main):

2011-04-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Choose the compiler based on the Xcode version for Snow Leopard debug builds.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/CompilerVersion.xcconfig: Added.
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/CompilerVersion.xcconfig: Added.
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/CompilerVersion.xcconfig: Added.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/CompilerVersion.xcconfig: Added.

2011-04-26  Finnur Thorarinsson  <finnur.webkit@gmail.com>

        Reviewed by David Levin.

        Adding myself as a Chromium contributors to committers.py.

        https://bugs.webkit.org/show_bug.cgi?id=59444

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

2011-04-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        DumpRenderTree/chromium should play nice with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59458

        All these changes are pretty straight forward.

        * DumpRenderTree/chromium/CppBoundClass.cpp:
        (GetterPropertyCallback::GetterPropertyCallback):
        (CppBoundClass::bindGetterCallback):
        * DumpRenderTree/chromium/CppBoundClass.h:
        (CppBoundClass::bindProperty):
        (CppBoundClass::bindFallbackCallback):
        (CppBoundClass::bindFallbackMethod):
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::DRTDevToolsClient):
        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (TestEventPrinter::createDRTPrinter):
        (TestEventPrinter::createTestShellPrinter):
        * DumpRenderTree/chromium/TestEventPrinter.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::createMainWindow):
        (TestShell::createDRTDevToolsClient):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::geolocationClientMock):
        (WebViewHost::speechInputController):
        (WebViewHost::deviceOrientationClientMock):
        (WebViewHost::reset):
        (WebViewHost::navigate):
        (WebViewHost::setPendingExtraData):
        (WebViewHost::canvas):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-04-26  Adam Roben  <aroben@apple.com>

        Make DRT/win log loading errors the same way DRT/mac does

        Fixes <http://webkit.org/b/59303> [Windows WebKit1 Tests]
        http/tests/misc/will-send-request-returns-null-on-redirect.html failing since r84742

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::descriptionSuitableForTestResult): Removed the workaround for
        <rdar://problem/5064234>, which has long since been fixed, and then made this function match
        -[NSError(DRTExtras) _drt_descriptionSuitableForTestResult] more closely.

2011-04-26  Dan Bernstein  <mitz@apple.com>

        REGRESSION (84876): build-webkit produces an error message
        https://bugs.webkit.org/show_bug.cgi?id=59460

        * Scripts/webkitdirs.pm:

2011-04-26  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        Fix timestamp comparison in check-for-weak-vtables-and-externals
        https://bugs.webkit.org/show_bug.cgi?id=59416
        
        We should only re-run the check-for-weak-vtables-and-externals script
        if the executable is more recent than the last run.

        * Scripts/check-for-weak-vtables-and-externals:

2011-04-26  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt] Implement LayoutTestController::setAutofilled
        https://bugs.webkit.org/show_bug.cgi?id=59439

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setAutofilled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-04-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Teach build-webkit where newer Xcode versions store the application-wide build settings user default.

        * Scripts/webkitdirs.pm:

2011-04-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Leaks Viewer throws "Cannot post cyclic structures" in Safari 5
        https://bugs.webkit.org/show_bug.cgi?id=56090

        Make LeaksViewer work with versions of browsers that don't support message
        passing of cyclic structures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParser.js:
        (LeaksParser.this._worker.onmessage):
        (LeaksParser):
        (LeaksParser.prototype.addLeaksFile):
        Use LeaksParserImpl directly if we don't support passing cyclic structures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParserImpl.js: Copied from BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParserWorker.js.
        (LeaksParserImpl):
        (LeaksParserImpl.prototype.addLeaksFile):
        (LeaksParserImpl.prototype._incorporateLeaks):
        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParserWorker.js:
        (onmessage):
        Factor out LeaksParser implementation into LeaksParserImpl.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/Utilities.js:
        (workersSupportCyclicStructures):
        Add function to detect if workers support passing cyclic structures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/index.html:
        Add LeaksParserImpl.js include.

2011-04-25  Jeff Miller  <jeffm@apple.com>

        Reviewed by Timothy Hatcher.

        Treat strings defined with UI_STRING_LOCALIZE_LATER_KEY() as debugging strings in extract-localizable-strings
        https://bugs.webkit.org/show_bug.cgi?id=59373

        * Scripts/extract-localizable-strings: Add UI_STRING_LOCALIZE_LATER_KEY() to isDebugMacro var.

2011-04-25  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adding a few Chromium contributors to committers.py.

        https://bugs.webkit.org/show_bug.cgi?id=59327

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

2011-04-23  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Nodes in shadow DOM should not be GCed while their hosts are alive
        https://bugs.webkit.org/show_bug.cgi?id=59284

        Chromium DRT over-refcounted the NPObject wrappers it used to
        marshal shadowRoot nodes back to tests (WebBindings::makeNode
        births NPObjects with referenceCount == 1). This masked the GC bug
        59284 in tests by making shadowRoot nodes live forever.

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

2011-04-23  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fixes. Add new methods to wx LayoutTestController,
        and update the URL for downloading waf.
        
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::ensureShadowRoot):
        (LayoutTestController::removeShadowRoot):
        * Scripts/webkitdirs.pm:

2011-04-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84627.
        http://trac.webkit.org/changeset/84627
        https://bugs.webkit.org/show_bug.cgi?id=59271

        It broke Symbian build (Requested by Ossy on #webkit).

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:

2011-04-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        rebaseline-chromium-webkit-tests: clean up output
        https://bugs.webkit.org/show_bug.cgi?id=59240

        This change dramatically changes the output the tool provides
        by default. The previous output (more or less) is still there
        in -v / verbose / debug mode, but the default output is
        way terser and more readable. It mostly says which files are
        updated, which are duplicates, and which are not found in an
        archive. Feedback desired :).

        This change also adds a scm.exists() method to the SCM object
        so that we can cleanly figure out what we're doing while
        rebaselining.

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2011-04-22  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add Ilya Sherman (isherman@chromium.org) to the list of contributors
        https://bugs.webkit.org/show_bug.cgi?id=59231

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

2011-04-22  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: Exception raised when stderr contains binary data
        https://bugs.webkit.org/show_bug.cgi?id=59083

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        Use write_binary_file() instead of write_text_file().

2011-04-22  Chang Shu  <cshu@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        WebKitTestRunner needs layoutTestController.setFrameFlatteningEnabled
        https://bugs.webkit.org/show_bug.cgi?id=42536

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setFrameFlatteningEnabled):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CommitQueue should remember the expected failures from patch to patch
        https://bugs.webkit.org/show_bug.cgi?id=59253

        Previously, we stored the set of expected failures on the task object,
        which meant the commit-queue forgot about them after each patch.  This
        patch moves them to the CommitQueue object so they will have a longer
        lifetime.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2011-04-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Brian Weinstein.

        WebKit2: Implement JavaScript unresponsiveness timer/callbacks
        https://bugs.webkit.org/show_bug.cgi?id=59248

        Stub out shouldInterruptJavaScript callbacks.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):

2011-04-22  Daniel Bates  <dbates@webkit.org>

        Reviewed by Csaba Osztrogonác.

        webkit-patch land hangs if svn prompts for credentials
        https://bugs.webkit.org/show_bug.cgi?id=31500

        Make has_authorization_for_realm() return True only if there exists a credentials file
        that contains either the word "password" or "passtype". We assume that these words don't
        coincide with the actual credential data (e.g. a person's username is "password").

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
          - Added test cases:
            test_has_authorization_for_realm_using_credentials_with_passtype(),
            test_has_authorization_for_realm_using_credentials_with_password(),
            test_not_have_authorization_for_realm_with_credentials_missing_password_and_passtype()
          - Renamed test_not_have_authorization_for_realm() to test_not_have_authorization_for_realm_when_missing_credentials_file()
            to better describe what it's testing.
          - Repurposed test_has_authorization_for_realm() to take realm and credential data to use
            and return the result of calling has_authorization_for_realm() so that the caller can
            assert the result; Renamed to _test_has_authorization_for_realm_using_credentials() to
            better reflect its new purpose.

2011-04-22  Adam Barth  <abarth@webkit.org>

        Remove double-negative.  (Sorry this was bugging me.)

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:

2011-04-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Factor LayoutTestResultsReader out of CommitQueue
        https://bugs.webkit.org/show_bug.cgi?id=59244

        This code will be shared with the EWS when they start running tests.

        * Scripts/webkitpy/tool/bot/layouttestresultsreader.py: Added.
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py: Added.
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2011-04-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        webkit-patch rebaseline is broken
        https://bugs.webkit.org/show_bug.cgi?id=59207

        My recent changes to how LayoutTestResults.results_from_string
        uncovered a bug in our use of urllib2.
        We now are treating the return value from _fetch_results_html()
        (which returns urllib2.openurl()) as a string.  That's incorrect,
        the return value is a file-like object (which auto-converts to a
        string in most cases).

        I've updated our urllib2-using code to correctly call .read() on the
        resulting object before treating it like a string.
        Unfortunately there is no easy way to test this mis-understanding
        of the openurl() semantics.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:

2011-04-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Factor PatchAnalysis task out of CommitQueueTask
        https://bugs.webkit.org/show_bug.cgi?id=59220

        This is a first step towards teaching the EWS to run tests.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/patchanalysistask.py: Added.

2011-04-22  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] DRT: implement eventSender.scalePageBy
        https://bugs.webkit.org/show_bug.cgi?id=59082

        * DumpRenderTree/gtk/EventSender.cpp:
        (scalePageByCallback): scalePageBy() support.

2011-04-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        LayoutTestResults should know how to handle NRWT json files
        https://bugs.webkit.org/show_bug.cgi?id=59168

        LayoutTestResults was originally created to be a parallel
        to existing NRWT architecture for dealing with results files.
        But then it turns out that NRWT has no such architecture. :(
        So this patch writes the necessary code to handle reading
        full_results.json and unexpected_results.json files from
        NRWT layout-test-results directories.

        LayoutTestResults has thus morphed from being ORWT-only to
        supporting both ORWT and NRWT.  It's possible at some future
        point that other pieces of the NRWT architecture will learn
        how to read JSON files in which case this can go away.

        This is all done for making it possible for the commit-queue
        to run the tests using NWRT and be able to understand the results
        (for flaky test reporting, etc.)

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/common/net/resultsjsonparser.py: Added.
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py: Added.

2011-04-22  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Upstream Symbian platform plugin
        https://bugs.webkit.org/show_bug.cgi?id=58435

        Exempting directory WebKit/qt/symbian/platformplugin from style guide.

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:

2011-04-22  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2] Qt should use the mac-wk2 skipped list
        https://bugs.webkit.org/show_bug.cgi?id=58536

        * Scripts/old-run-webkit-tests:

2011-04-21  Tony Chang  <tony@chromium.org>

        Reviewed by Mihai Parparita.

        Remove find-mismatched-layout-test-results since it's not needed in a
        checksum free world.
        https://bugs.webkit.org/show_bug.cgi?id=59156

        * Scripts/find-mismatched-layout-test-results: Removed.

2011-04-21  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Martin Robinson.

        Teach build-webkit and update-webkit that the WinCairo port does
        not need the non-redistributable WebKitSupportLibraries.zip file.
        Also append the _Cairo_CFLite label to the build target for the
        default (no argument) case when building with '--wincairo'
    
        https://bugs.webkit.org/show_bug.cgi?id=58801

        * Scripts/build-webkit: Don't die if WebKitSupportLibraries.zip
          doesn't exist.
        * Scripts/webkitdirs.pm: Append '_Cairo_CFLite' to the default
          'Release' build target when passed the '--wincairo' flag.
        * Scripts/update-webkit: Don't die if WebKitSupportLibraries.zip
          doesn't exist.

2011-04-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: obsolete old code, part 5: rename message_broker2 to message_broker
        https://bugs.webkit.org/show_bug.cgi?id=58758

        Since worker_mixin is now only used by worker, there's no point
        in having it split across two files.

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py: Added
        * Scripts/webkitpy/layout_tests/layout_package/message_broker2.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py: * Added
        * Scripts/webkitpy/layout_tests/layout_package/message_broker2_unittest.py: Removed.

2011-04-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: obsolete old code, part 4: merge worker_mixin into worker
        https://bugs.webkit.org/show_bug.cgi?id=58756

        Since worker_mixin is now only used by worker, there's no point
        in having it split across two files.

        * Scripts/webkitpy/layout_tests/layout_package/worker.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py: Removed.

2011-04-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: obsolete old code, part 3 - rename test_runner to manager
        https://bugs.webkit.org/show_bug.cgi?id=58754

        test_runner hasn't been a great name for some time, since all of
        the test running is actually done in worker and
        single_test_runner. Rename to manager to match the terminology
        elsewhere.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_runner_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-04-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: obsolete old threading code, part 2
        https://bugs.webkit.org/show_bug.cgi?id=58753

        This merges the test_runner2 code back into test_runner since
        there's only a single type of test runner now.

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-04-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Roben.

        Add a feature define to allow <details> and <summary> to be disabled
        https://bugs.webkit.org/show_bug.cgi?id=59118
        <rdar://problem/9257045>

        * Scripts/build-webkit:
        * Tools.pro:

2011-04-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch upload should assign the bug to you
        https://bugs.webkit.org/show_bug.cgi?id=33699

        This patch only re-assigns the bug if it is currently unassigned.  We
        can be more aggressive in the future if people want us to be more
        agressive.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/postdiff.py:

2011-04-21  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        move json_results.html over to LayoutTests/fast/harness
        https://bugs.webkit.org/show_bug.cgi?id=59154

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        ValidateChangeLogs doesn't work on SVN
        https://bugs.webkit.org/show_bug.cgi?id=59115

        svn-create-patch lies about the diff in the working copy by moving
        ChangeLog entries to the top of the diff.  That's fine on most cases,
        but causes problems for ValidateChangeLogs, which is trying validate
        the where the ChangeLog entry appears.

        I haven't added a test for this change because I couldn't figure out
        how to write one.  The issue is more of an integration issue, which
        we're not really set up to test in our unit testing framework.  If this
        patch had worked around the output from svn-create-patch, then I could
        have tested that we behave correctly on sample svn-create-patch output,
        but, in this case, I've removed the dependency on svn-create-patch.  I
        could test that we behave correctly on "svn diff" output, but we
        already have those tests.

        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/validatechangelogs.py:

2011-04-21  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        old-run-webkit-tests/new-run-webkit-tests shouldn't read or write .checksum files
        https://bugs.webkit.org/show_bug.cgi?id=58402

        * Scripts/old-run-webkit-tests: Don't read or write .checksum files.
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py: Don't write .checksum files.
        * Scripts/webkitpy/layout_tests/port/base.py: Don't read .checksum files.
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py: Update passing pngs to include a checksum.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-21  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        final tests for results.html file
        https://bugs.webkit.org/show_bug.cgi?id=59150

        This gets us close to 100% code coverage. Once this is
        checked in, I'll move this file over to LayoutTests/fast/harness
        and make it a proper layout test.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_test.js:

2011-04-21  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        only expand visible rows
        https://bugs.webkit.org/show_bug.cgi?id=59130

        For the chromium port, where there are many expected failures,
        expanding all of them is quite slow. Only expand the visible ones.
        This makes the default case. Also, make the expanding async to
        avoid totally killing the process.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_test.js:

2011-04-21  Martin Robinson  <mrobinson@igalia.com>

        [GTK] DRT: implement eventSender.scalePageBy
        https://bugs.webkit.org/show_bug.cgi?id=59082

        Rolling out r84507 since it broke many GTK+ tests.

        * DumpRenderTree/gtk/EventSender.cpp:

2011-04-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Simon Fraser.

        Add way to garbage collect between each test when running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=59126

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions):
        (runTest):
        * Scripts/old-run-webkit-tests:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:

2011-04-21  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Mihai Parparita.

        fix another innocuous JS error in expand/collapseAllExpectations
        https://bugs.webkit.org/show_bug.cgi?id=59122

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_test.js:

2011-04-20  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        put unexpected passes into their own table
        https://bugs.webkit.org/show_bug.cgi?id=59016

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-20  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        initial set of tests for new results.html file
        https://bugs.webkit.org/show_bug.cgi?id=59031

        Also, fix the bugs (mostly innocuous JS errors) the tests found.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_test.js: Added.

2011-04-21  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] missing LayoutTestController::callShouldCloseOnWebView()
        https://bugs.webkit.org/show_bug.cgi?id=59086

        callShouldCloseOnWebView() implementation.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::callShouldCloseOnWebView):

2011-04-21  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] DRT: implement eventSender.scalePageBy
        https://bugs.webkit.org/show_bug.cgi?id=59082

        * DumpRenderTree/gtk/EventSender.cpp:
        (scalePageByCallback): scalePageBy() support.

2011-04-20  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        layoutTestController can create and destroy shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=59058

        Chromium, Mac, GTK and Qt DRT; and WK2 test runner.

        * DumpRenderTree/LayoutTestController.cpp:
        (ensureShadowRootCallback):
        (removeShadowRootCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::ensureShadowRoot):
        (LayoutTestController::removeShadowRoot):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::ensureShadowRoot):
        (LayoutTestController::removeShadowRoot):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::shadowRoot):
        (LayoutTestController::ensureShadowRoot):
        (LayoutTestController::removeShadowRoot):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::ensureShadowRoot):
        (LayoutTestController::removeShadowRoot):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::ensureShadowRoot):
        (LayoutTestController::removeShadowRoot):
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::shadowRoot):
        (WTR::LayoutTestController::ensureShadowRoot):
        (WTR::LayoutTestController::removeShadowRoot):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-20  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: handle ctrl-c more cleanly
        https://bugs.webkit.org/show_bug.cgi?id=58849

        * Scripts/new-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-04-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84431.
        http://trac.webkit.org/changeset/84431
        https://bugs.webkit.org/show_bug.cgi?id=59061

        Breaks for folks who don't have editbugs (Requested by abarth
        on #webkit).

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/postdiff.py:

2011-04-20  Leo Yang  <leo.yang@torchmobile.com.cn>

        Unreviewed.

        Adding myself to committers.py.

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

2011-04-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch upload should assign the bug to you
        https://bugs.webkit.org/show_bug.cgi?id=33699

        This patch only re-assigns the bug if it is currently unassigned.  We
        can be more aggressive in the future if people want us to be more
        agressive.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/postdiff.py:

2011-04-20 Peter Gal <galpeter@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        Modify builder.html template to allow easy access
        to list more builds on the builder's page.

        https://bugs.webkit.org/show_bug.cgi?id=59008

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

2011-04-20  Peter Gal  <galpeter@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        Add the default template for builder page.

        https://bugs.webkit.org/show_bug.cgi?id=59008

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

2011-04-20  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        move page generation into a single function
        https://bugs.webkit.org/show_bug.cgi?id=59027

        Now executing the script doesn't create any state. We should then
        be able to write tests for this by setting custom results data.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-20  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        move global state into a shared object
        https://bugs.webkit.org/show_bug.cgi?id=59023

        This makes the code more testable.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-20  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        move global state into a shared object
        https://bugs.webkit.org/show_bug.cgi?id=59023

        This makes the code more testable.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-20  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        add expandAll/collapseAll links
        https://bugs.webkit.org/show_bug.cgi?id=59011

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-20  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fixes for wx 2.9.1, Cocoa and 64-bit builds.

        * Scripts/webkitdirs.pm:
        * wx/build/build_utils.py:
        * wx/build/settings.py:
        * wx/install-unix-extras:
        * wx/packaging/build-mac-installer.py:
        * wx/packaging/build-win-installer.py:

2011-04-20  Adam Roben  <aroben@apple.com>

        Replace old-run-webkit-tests's win-7 platform with win-7sp0

        It was an error that we had a win-7 platform to begin with. Windows 7 was the most recent
        version of Windows we cared about, so its results should just go in win. But now that
        Windows 7 SP1 exists (and has different results for some tests), we need a place to store
        results for Windows 7 without SP1 (and older versions of Windows).

        Part of <http://webkit.org/b/56617> Several tests fail on Windows 7 SP1 due to font
        differences from Windows 7 "SP0"

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests: Replaced win-7 with win-7sp0. Newer versions of Windows 7
        will just use "win".

        * Scripts/webkitdirs.pm:
        (isWindows7SP0): Added. Replaces isWindows7, because that function had no remaining callers.

2011-04-20  Adam Roben  <aroben@apple.com>

        Teach webkitdirs::winVersion about build numbers

        The build number isn't currently used, but soon will be.

        As a bonus, winVersion now works on non-Cygwin variants of Perl!

        Fixes <http://webkit.org/b/58991> Need a way to distinguish between Windows 7 and Windows 7
        SP1

        Reviewed by Anders Carlsson.

        * Scripts/webkitdirs.pm:
        (isAnyWindows): Added. Returns true if we're running on any Windows-ish Perl.
        (determineWinVersion): Use `cmd /c ver` to get the version number, including the build
        number. Parse the version number into a hash, similar to how osXVersion() works.

        (isWindows7):
        (isWindowsVista):
        (isWindowsXP):
        Updated for changes to winVersion().

2011-04-20  W. James MacLean  <wjmaclean@chromium.org>

        Reviewed by Kenneth Russell.

        Add support for composite-to-texture to DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=58675

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setCompositeToTexture):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:

2011-04-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        The commit-queue is confused when non-layout tests fail
        https://bugs.webkit.org/show_bug.cgi?id=58955

        As seen in http://queues.webkit.org/results/8474435

        It fails to create an archive of the layout test results
        and then throws an exception.

        I've fixed this by making it catch the exception as well
        as made it so it never calls that path in the common case.

        I've updated MockFileSystem to understand rmtree's affect on
        directories as well as files.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/common/system/workspace.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2011-04-19  Ojan Vafai  <ojan@chromium.org>

        Fix check for whether a failure is expected to deal with
        flaky tests and FAIL expectations.
        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-19  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        don't show missing text results for tests that only dump image results
        https://bugs.webkit.org/show_bug.cgi?id=58931

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-19  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        don't show failures table if there are only new tests
        https://bugs.webkit.org/show_bug.cgi?id=58929

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-19  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        don't show failures table if there are only new tests
        https://bugs.webkit.org/show_bug.cgi?id=58929

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-19  Ojan Vafai  <ojan@chromium.org>

        Fix unittest failures from http://trac.webkit.org/changeset/84294.

        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner_unittest.py:

2011-04-18  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        switch new-run-webkit-tests to using the new results file
        https://bugs.webkit.org/show_bug.cgi?id=58861

        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-19  Renata Hodovan  <reni@webkit.org>

        Reviewed by Eric Seidel.

        Move the alignment related macros from Vector.h to new Alignment.h.
        https://bugs.webkit.org/show_bug.cgi?id=56000

        Adding the new file to the forwarding headers of Tools.

        * DumpRenderTree/ForwardingHeaders/wtf/Alignment.h: Added.

2011-04-19  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix for Win / wx 2.9 wxPython installation.

        * wx/packaging/build-win-installer.py:
        * wx/packaging/wxWebKitInstaller.iss.in:

2011-04-19  Adam Roben  <aroben@apple.com>

        Skip another accelerated-compositing-sensitive test when accelerated compositing is disabled

        * Scripts/old-run-webkit-tests: Skip media/controls-without-preload.html on Windows when
        accelerated compositing is disabled.

2011-04-19  Ojan Vafai  <ojan@chromium.org>

        Remove accidentally committed debug code.
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-19  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        Avoid duplicate stub implementation of test routine
        for WinCairo build.

        * WebKitTestRunner/win/TestInvocationWin.cpp: Exclude
        WinCairo from using this stub.

2011-04-18  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        make results file work with audio and reftests
        https://bugs.webkit.org/show_bug.cgi?id=58860

        Also fix bug with timeout tests and store a bit in the JSON
        for new image tests instead of loading the image result to check if it's there.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-19  Jer Noble  <jer.noble@apple.com>

        Reviewed by Adam Roben.

        REGRESSION (r84206): 50 tests failing on SnowLeopard Intel Release (WebKit2 Tests) due to extra "supportsFullScreen() == true" output
        https://bugs.webkit.org/show_bug.cgi?id=58890

        Add a layoutTestController flag which controls when full screen callbacks are written to stdout.
        Defaults to false.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Added dumpFullScreenCallbacks().
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::supportsFullScreen): Only write to stdout if shouldDumpFullScreenCallbacks is set.
        (WTR::InjectedBundlePage::enterFullScreenForElement): Ditto.
        (WTR::InjectedBundlePage::exitFullScreenForElement): Ditto.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): Initialize new ivar.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpFullScreenCallbacks): Added.
        (WTR::LayoutTestController::shouldDumpFullScreenCallbacks): Added.

2011-04-19  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>

        Reviewed by Andreas Kling.

        [Qt] fast/xmlhttprequest/xmlhttprequest-nonexistent-file.html fails (DRT sideeffect)
        https://bugs.webkit.org/show_bug.cgi?id=35086

        fast/xmlhttprequest/xmlhttprequest-no-file-access.html caused
        a DRT sideeffect problem, because the resetSettings didn't set
        the default value of LocalContentCanAccessFileUrls.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):

2011-04-18  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Martin Robinson.

        [GTK] Need support for dumping focus rectangles in pixel results
        https://bugs.webkit.org/show_bug.cgi?id=53647

        Dump the selection rect if it has been requested.

        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp:
        (createBitmapContextFromWebView):

2011-04-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        test-webkitpy should run the ActiveWorkItems tests
        https://bugs.webkit.org/show_bug.cgi?id=58859

        Also make the unit tests pass. :)

        * QueueStatusServer/model/activeworkitems.py:
        * QueueStatusServer/model/queue.py:
        * QueueStatusServer/model/workitems.py:

2011-04-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        queues.webkit.org should show trailing-days pass counts for queues
        https://bugs.webkit.org/show_bug.cgi?id=58812

        This lets us see if each bot is pulling its own weight or not.
        Before I wrote this patch our suspicious was that one of the
        cq bots was doing most of the work.  Turns out they're actually
        pretty even in their recent pass counts.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/index.yaml:
        * QueueStatusServer/templates/queuestatus.html:

2011-04-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: obsolete old threading code, part 1
        https://bugs.webkit.org/show_bug.cgi?id=58752

        This patch removes support for the 'old-inline' and
        'old-threads' worker models, and deletes the corresponding code.
        Now that the new code is stable, this stuff is no longer
        necessary.

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: add an --additional-drt-flag option
        https://bugs.webkit.org/show_bug.cgi?id=58680

        NRWT has a bunch of command line flags that exist to pass
        custom flags to DRT, especially on chromium. It would be nice
        if there was a generic mechanism to pass through flags so we
        didn't have all the custom ones.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-04-05  Jer Noble  <jer.noble@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: WKTR should support WebKit2 full screen APIs
        https://bugs.webkit.org/show_bug.cgi?id=56318

        Respond to enterFullScreenForElement() and exitFullScreenForElement(), allowing 
        WKTR to test the LayoutTest/fullscreen/ tests.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Add support for WKBundlePageFullScreenClient.
        (WTR::InjectedBundlePage::supportsFullScreen): Added.
        (WTR::InjectedBundlePage::enterFullScreenForElement): Added.
        (WTR::InjectedBundlePage::exitFullScreenForElement): Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Enable the full screen preference.

2011-04-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: remove chromium-specific relpath hack for --results-directory
        https://bugs.webkit.org/show_bug.cgi?id=58388

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-04-18  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] expose title direction to webkit client
        https://bugs.webkit.org/show_bug.cgi?id=58823

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::setTitleTextDirection):
        Add member and setter to let us stash the title direction at load time.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didReceiveTitle):
        * DumpRenderTree/chromium/WebViewHost.h:
        Adapt to new API; push the title into layoutTestController when we
        receive it.

2011-04-18  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed.

        Re-land r84112. It was rolled out in r84127 but it didn't need
        to be. Only r84111 actually broke things.

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: don't run more processes than necessary
        https://bugs.webkit.org/show_bug.cgi?id=58751

        Previously NRWT would start up 1 process for each processor on
        the machine by default, which was a waste if we were only
        running a few shards of tests.

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-18  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        include links to actual.png files for new pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=58831

        Load image elements to confirm whether the files exist.
        Image elements will load without being appended to the DOM.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-18  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        add a zoomed view for pixel results to the new results html file
        https://bugs.webkit.org/show_bug.cgi?id=58827

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-18  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        add labels to results html page
        https://bugs.webkit.org/show_bug.cgi?id=58803

        -fix iframe size to be the size of the png results
        -fix a bunch of aesthetic nits
        -fix some incorrectly styled code

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-18  Chang Shu  <cshu@webkit.org>

        Reviewed by Eric Seidel.

        WebKitTestRunner needs layoutTestController.pathToLocalResource
        https://bugs.webkit.org/show_bug.cgi?id=42541

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/InjectedBundle/mac/LayoutTestControllerMac.mm:
        (WTR::LayoutTestController::pathToLocalResource):
        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp:
        (WTR::LayoutTestController::pathToLocalResource):
        * WebKitTestRunner/InjectedBundle/win/LayoutTestControllerWin.cpp:
        (WTR::LayoutTestController::pathToLocalResource):

2011-04-18  Timothy Hatcher  <timothy@apple.com>

        Make update-webkit-localizable-strings put WebKit/win strings in WebCore
        now that all localized strings in WebKit/win use WEB_UI_STRING.

        https://webkit.org/b/58747

        Reviewed by Dan Bernstein.

        * Scripts/update-webkit-localizable-strings: Remove the code that updated WebKit/win differently.

2011-04-18  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WIN] Use WCHAR instead of TCHAR
        https://bugs.webkit.org/show_bug.cgi?id=58755

        We always use the UNICODE versions of windows functions, so
        the usage of TCHAR makes no sense and mixing them is bad style.

        * WinLauncher/PrintWebUIDelegate.cpp:
          Also fix various style issues (including indentation and removal of ugly C-casts).
        * WinLauncher/WinLauncher.cpp:

2011-04-18  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Andreas Kling.

        Add layoutTestController.shadowRoot to Qt DRT.
        https://bugs.webkit.org/show_bug.cgi?id=58759

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::shadowRoot): Added.
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-04-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84111.
        http://trac.webkit.org/changeset/84111
        https://bugs.webkit.org/show_bug.cgi?id=58771

        Chromium linux layout tests are broken. (Requested by loislo2
        on #webkit).

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:

2011-04-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84112.
        http://trac.webkit.org/changeset/84112
        https://bugs.webkit.org/show_bug.cgi?id=58770

        Chromium linux layout tests are broken. (Requested by loislo2
        on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-17  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel and Adam Barth.

        webkit-patch land hangs if svn prompts for credentials
        https://bugs.webkit.org/show_bug.cgi?id=31500

        Prompt for username and password when using git-svn and there aren't cached SVN credentials.

        * Scripts/webkitpy/common/checkout/scm.py:
          - Added mixin class SVNRepository and made both class SVN and Git inherit from it.
          - Moved SVN.has_authorization_for_realm() to class SVNRepository and removed default value
            for argument realm; modified call sites as needed.
          - Modified AuthenticationError constructor to take optional prompt_for_password argument.
          - Modified {SCM, SVN, Git}.commit_with_message() to take optional password argument.
          - Modified Git._commit_on_branch() to take optional username and password argument.
          - Modified Git.push_local_commits_to_server() to take optional username and password
            argument and to call has_authorization_for_realm().
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
          - Modified SVNTest.test_commit_without_authorization() to take dummy realm argument.
          - Modified SVNTest.test_not_have_authorization_for_realm() to pass realm argument to
            SVN.has_authorization_for_realm().
        * Scripts/webkitpy/common/net/credentials.py:
          - Modified Credentials.read_credentials() to call User.prompt_password() instead
            of using getpass.getpass() directly.
        * Scripts/webkitpy/common/system/user.py:
          - Added User.prompt_password().
        * Scripts/webkitpy/tool/steps/commit.py:
          - Modified Commit.run() to prompt for a password if needed.

2011-04-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: save stderr into the layout-test-results dir
        https://bugs.webkit.org/show_bug.cgi?id=58690

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: read stderr from chromium DRT separately
        https://bugs.webkit.org/show_bug.cgi?id=58708

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename PLATFORM(CA) to USE(CA)
        https://bugs.webkit.org/show_bug.cgi?id=58742

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

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename PLATFORM(CG) to USE(CG)
        https://bugs.webkit.org/show_bug.cgi?id=58729

        * DumpRenderTree/PixelDumpSupport.cpp:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintRect):
        * DumpRenderTree/config.h:
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView):
        * TestWebKitAPI/PlatformWebView.h:
        * WebKitTestRunner/config.h:
        * WebKitTestRunner/win/TestInvocationWin.cpp:

2011-04-16  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Rename PLATFORM(CAIRO) to USE(CAIRO)
        https://bugs.webkit.org/show_bug.cgi?id=55192

        * DumpRenderTree/PixelDumpSupport.cpp:
        * DumpRenderTree/config.h:
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView):
        * WebKitTestRunner/config.h:

2011-04-16  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        show diffs+test inline in the results page
        https://bugs.webkit.org/show_bug.cgi?id=58723
        
        Put each row in it's own tbody and sort based on tbodies. That way
        we can append the results to the tbody inline as another table row.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-16  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        handle new tests in the new results html file
        https://bugs.webkit.org/show_bug.cgi?id=58715

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        old-run-webkit-tests: save the list of tests actually run to a file
        https://bugs.webkit.org/show_bug.cgi?id=58692

        * Scripts/old-run-webkit-tests:

2011-04-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        fix MockFileSystem.abspath() on windows
        https://bugs.webkit.org/show_bug.cgi?id=58713

        The existing code was borked on Windows if a path was passed
        in using a drive letter (e.g., "d:\foo.txt"), and would go
        into an infinite recursive loop. While win paths shouldn't
        normally be passed into the mock filesystem, this just
        bulletproofs things a bit (note that "/foo.txt" is considered
        an absolute path on windows python as well.

        * Scripts/webkitpy/common/system/filesystem_mock.py:

2011-04-15  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        show stderr files and httpd log files
        https://bugs.webkit.org/show_bug.cgi?id=58714

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-15  Shishir Agrawal  <shishir@chromium.org>

        Reviewed by James Robinson.

        Add a flag to guard Page Visibility API changes.
        https://bugs.webkit.org/show_bug.cgi?id=58464

        * Scripts/build-webkit:

2011-04-15  Chang Shu  <cshu@webkit.org>

        Reviewed by Alexey Proskuryakov.

        When a message with url embedded is added to console, the "file:" scheme
        and path should be stripped.
        https://bugs.webkit.org/show_bug.cgi?id=58665

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::lastFileURLPathComponent):
        (WTR::InjectedBundlePage::willAddMessageToConsole):

2011-04-15  Jeff Miller  <jeffm@apple.com>

        Reviewed by Sam Weinig.

        Add takeFocus callback to WKPageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=58686

        Add empty WKPageUIClient entries for the takeFocus callback in the MiniBrowser and WebKitTestRunner.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]): Added empty takeFocus entry.
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create): Added empty takeFocus entry.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage): Added empty takeFocus entry.
        (WTR::TestController::initialize): Added empty takeFocus entry.

2011-04-15  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        only show pretty-diff/wdiff if they were generated
        https://bugs.webkit.org/show_bug.cgi?id=58682

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/port/base.py:

2011-04-15  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] DRT: Default custom policy delegate decision should be Ignore.

        If layoutTestController.setCustomPolicyDelegate() is called with only
        one argument, the second ("permissive") should default to false.

        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-04-15  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        fix path to layout test in new results file
        https://bugs.webkit.org/show_bug.cgi?id=58618

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-15  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        fix sorting in new results file
        https://bugs.webkit.org/show_bug.cgi?id=58616

        -Fix the custom sort to return -1, 0, 1 instead of true/false.
        -Secondary sort by test name when sort values are equal.
        -Sort by test name by default.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-15  Dmitry Lomov  <dslomov@google.com>

        Reviewed by David Levin.

        check-webkit-style shouldn't complain about not including a primary header file 
        if none exists
        https://bugs.webkit.org/show_bug.cgi?id=39514

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-04-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Mihai Parparita.

        queues.webkit.org should display when a bot last rebooted
        https://bugs.webkit.org/show_bug.cgi?id=58562

        There is more repeated code here than I would like.  I fear
        my django-fu isn't quite up to snuff.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/templates/queuestatus.html:

2011-04-14  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by Adam Barth.

        Remove dependency on chromium skia::PlatformCanvas
        https://bugs.webkit.org/show_bug.cgi?id=57563
        
        Fixed compile error on Mac when using Core Graphics.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintRect):

2011-04-14  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by James Robinson.

        Remove dependency on chromium skia::PlatformCanvas
        https://bugs.webkit.org/show_bug.cgi?id=57563

        * DumpRenderTree/chromium/TestShell.cpp:
        (makeCanvasOpaque):
        (TestShell::dumpImage):
        * DumpRenderTree/chromium/TestShell.h:
        * DumpRenderTree/chromium/WebThemeControlDRTWin.cpp:
        (WebThemeControlDRTWin::WebThemeControlDRTWin):
        (WebThemeControlDRTWin::draw):
        (WebThemeControlDRTWin::drawTextField):
        (WebThemeControlDRTWin::drawProgressBar):
        * DumpRenderTree/chromium/WebThemeControlDRTWin.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::canvas):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-04-14  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Add -maximize flag to QtTestBrowser and MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=58007

        Adds flag to start the test browsers maximized.
        Symbian started maximized on QtTestBrowser - made MiniBrowser follow
        suit.
        Also fixes some ToggleFullScreen issues so that prior window state is
        restored.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::toggleFullScreenMode):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::init):
        (LauncherWindow::toggleFullScreenMode):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2011-04-14  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        add checkbox to only show unexpected results to new results file
        https://bugs.webkit.org/show_bug.cgi?id=58606

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-13  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Martin Robinson.

        [WinCairo] Implement ImageDiff Logic.
        http://bugs.webkit.org/show_bug.cgi?id=58486

        * DumpRenderTree/win/ImageDiffCairo.cpp: Added.
        (strtof):
        (readFromData):
        (createImageFromStdin):
        (releaseMallocBuffer):
        (createDifferenceImage):
        (imageHasAlpha):
        (writeToData):
        (main):
        * DumpRenderTree/win/ImageDiff.vcproj: Updated for new
          ImageDiffCairo.cpp (excluding from Apple builds).
        * DumpRenderTree/win/ImageDiffDebugCairoCFLite.vsprops: Use
          new ImageDiffWinCairoCommon.vsprops file.
        * DumpRenderTree/win/ImageDiffReleaseCairoCFLite.vsprops: Use
          new ImageDiffWinCairoCommon.vsprops file.
        * DumpRenderTree/win/ImageDiffWinCairoCommon.vsprops: Added.
        * Scripts/old-run-webkit-tests: Make sure proper executable
          is built and executed for WinCairo port.

2011-04-14  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        only show expected failure type for ports that use an expectations file
        https://bugs.webkit.org/show_bug.cgi?id=58588

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue fails to catch IOError when results.html is missing
        https://bugs.webkit.org/show_bug.cgi?id=58589

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2011-04-14  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix for Mac installation script.

        * wx/packaging/build-mac-installer.py:

2011-04-14  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        sort columns in the new json_results.html file
        https://bugs.webkit.org/show_bug.cgi?id=58581

        Also fix padding on TDs and the path to layout tests.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        queues.webkit.org should display when a bot last passed a patch
        https://bugs.webkit.org/show_bug.cgi?id=58546

        I am suspicious that some of our commit-queue instances are never
        actually passing anything.

        This will let us know if those bots are never passing patches.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/index.yaml:
        * QueueStatusServer/templates/queuestatus.html:

2011-04-14  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        REGRESSION (r83764): webkitpy.layout_tests.port.chromium_win_unittest.ChromiumWinTest.test_default_worker_model fails on apple-windows-13
        https://bugs.webkit.org/show_bug.cgi?id=58545

        Remove platform-specific overrides; the default behavior should
        be working everywhere now, I think.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:

2011-04-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queues are hitting an exception trying to land when the tree is red
        https://bugs.webkit.org/show_bug.cgi?id=58558

        Just an un-tested (and thus broken) code path from yesterday's changes.

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2011-04-14  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fixes for wxMSW and wx 2.9.1.1.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::shadowRoot):
        * wx/build/wxpresets.py:

2011-04-14  Victoria Kirst  <vrk@google.com>

        Reviewed by James Robinson.

        [chromium] Failing GPU video tests
        https://bugs.webkit.org/show_bug.cgi?id=57926

        Added/updated GPU directory names for rebaseline tool.

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-04-13  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        Perl unit test removeEOL.pl should print test case name on failure
        https://bugs.webkit.org/show_bug.cgi?id=58513

        * Scripts/webkitperl/VCSUtils_unittest/removeEOL.pl: Pass $title as
          second argument of Test::Simple::ok().

2011-04-13  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        gdb-safari should pass arguments to safari.
        https://bugs.webkit.org/show_bug.cgi?id=58439

        We can do:
          gdb-safari --debug LayoutTests/.../foo.html

        * Scripts/gdb-safari: Passing @ARGV to Safari via gdb --arg.

2011-04-13  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.
        https://bugs.webkit.org/show_bug.cgi?id=52763

        r83799 broke test-webkitpy because it assumed we always have
        access to a real filesystem (we don't during the unit tests).
        Stubbing out the copy for now but we might need a better
        solution at some point.

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-13  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests --run-singly option is busted
        https://bugs.webkit.org/show_bug.cgi?id=55909

        Python's broken lexical scoping strikes again :(.

        * Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-13  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        generated unexpected_results.html from unexpected_results.json
        https://bugs.webkit.org/show_bug.cgi?id=52763

        Eventually, we'll merge this with results.html and have a single richer results page.
        For now, I just want to get something checked in that we can iterate on.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html: Added.
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Up the failure limit to allow the commit-queue to actually land when the tree is red
        https://bugs.webkit.org/show_bug.cgi?id=58499

        This change increases the --exit-after-N-failures limit used by the commit-queue
        from 1 to 10.  This will cause the code added in bug 58494 to actually get
        exercised and the queues should start being able to land when the trees are red.

        When testing I found that test_runtests_leopard_commit_queue_hack_command was the
        only unit test to actually detect this change!  Since we don't actually
        run on leopard anymore, I removed the hack code and repurposed the test.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2011-04-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should be able to land when tree is red
        https://bugs.webkit.org/show_bug.cgi?id=58494

        There is some yak hair on my hands, I will admit.

        This change is mostly about adding an ExpectedFailures
        class to track when the bots are red and we should be
        ignoring failures when landing from the commit-queue.

        However, to make intelligent decisions about patches we
        need to know whether the run hit the --exit-after-N-failures limit
        or not.  Right now that information is not saved off in results.html
        so we have to pull the information from RunTests.

        I've plumbed the --exit-after-N-failures information into
        LayoutTestResults for now to make the ExpectedFailures code cleaner.

        As a result of adding all these additional calls to delegate.layout_test_results()
        I broke some of our flaky test detection tests and had to re-write them
        to not depend on the number of layout_test_results code.

        At the same time I updated the commit-queue to use the newer filesystem
        API (to allow us to use MockFileSystem) which required further changes
        to the layout tests.  Changes were required in either case, since
        we're now calling layout_test_results() in more cases, which previously
        would try and hit the disk (until I moved it to use tool.filesystem).

        I should note that *all* of this code is disabled for now, since our
        --exit-after-N-failures limit is currently 1!  (Thus were always in the
        case where we can't actually tell if the layout test results are legit.)
        I will up that limit in a second patch (which may require a couple more unit test tweaks).

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/expectedfailures.py: Added.
        * Scripts/webkitpy/tool/bot/expectedfailures_unittest.py: Added.
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/steps/runtests.py:

2011-04-13  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        * TestWebKitAPI/PlatformWebView.h: Limit include of
          <CoreGraphics/CGGeometry> to PLATFORM(CG) users.

2011-04-13  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        [NRWT] Rename --baseline-search-patch to --additional-platform-directory to match ORWT
        https://bugs.webkit.org/show_bug.cgi?id=58489
        
        r83743 added --additional-platform-directory to old-run-webkit-tests,
        rename the equivalent flag in new-run-webkit-tests to be consistent.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-13  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        Rebaseline queue server
        https://bugs.webkit.org/show_bug.cgi?id=57891

        Adds a simple rebaseline queue server (meant to run at
        http://rebaseline-queue.appspot.com/). It presents a list of all (NRWT)
        builders and their failing tests, and allows those tests to be added to
        a per-builer rebaseline queue.

        A subsequent change will add a mode to NRWT (and/or a wrapper script)
        for pulling the tests to be rebaselined from the server and running them
        with --reset-results (the initial use-case is for the GPU hardware bots,
        which do not have checked-in baselines, therefore there is no need for a
        check-in step yet).

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

2011-04-13  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        nrwt: enable multiple processes by default on Chromium Win.
        https://bugs.webkit.org/show_bug.cgi?id=55163

        Re-land r79268; it should be more stable now and will hopefully
        work.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:

2011-04-13  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: configure logging in child processes properly
        https://bugs.webkit.org/show_bug.cgi?id=58296

        Logging propagated properly from manager to worker processes on
        Unix but not on Windows; this fixes that.

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:

2011-04-13  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: suppress extraneous pretty patch warnings
        https://bugs.webkit.org/show_bug.cgi?id=58295

        NRWT wasn't being careful about when it logged messages from
        PrettyPatch not being available; it should only log during
        check_build(), and be silent otherwise. This was causing us to
        get multiple errors at runtime, which was confusing.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-04-13  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Jian Li.

        add chromium-linux-x86_64 to rebaseline-chromium-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=58461

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-04-13  Tony Chang  <tony@chromium.org>

        Unreviewed, fix NRWT.  Stack:

            return super(ChromiumPort, self).results_directory(self)
        TypeError: results_directory() takes exactly 1 argument (2 given)

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-04-13  Adam Roben  <aroben@apple.com>

        Teach ORWT about extra platform-specific directories to be searched before the default ones

        Fixes <http://webkit.org/b/58446> ORWT needs a way to look in a user-specified directory for
        platform-specific results

        Reviewed by Anders Carlsson.

        * Scripts/old-run-webkit-tests:
        (top-level): Added @additionalPlatformDirectories and hooked up
        --additional-platform-directories to populate it.
        (buildPlatformResultHierarchy): Prepend the additional platform directories to the default
        list (after filtering out any of the additional directories that don't exist).

2011-04-13  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Adam Roben.

        Add the /T command to taskkill.exe.
        This will kill spawned child processes.
        
        * BuildSlaveSupport/win/kill-old-processes:

2011-04-13  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Adam Roben.

        Sort kill list alphabeticaly.
        Fixed capitalization on VcBuildHelper.  

        * BuildSlaveSupport/win/kill-old-processes:

2011-04-13  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=58384
        Update kill-old-processes to include a few new ones.
        
        * BuildSlaveSupport/win/kill-old-processes:

2011-04-13  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Martin Robinson.

        [GTK] PluginPackage should check whether a plugin mixes GTK+ 2 and 3 symbols itself
        https://bugs.webkit.org/show_bug.cgi?id=58297

        Do not disable flash specifically when built with GTK+ 3 -
        PluginPackage should do the right thing while loading plugins.

        * GtkLauncher/main.c:
        (main):

2011-04-12  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] Add WebSettings::setValidationMessageTimerMagnification()
        https://bugs.webkit.org/show_bug.cgi?id=57426

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo): Disable the validation message timer.

2011-04-12  James Kozianski  <koz@chromium.org>

        Unreviewed.

        Adding myself to committers.py.

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

2011-04-12  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction for WinCairo bot after r83639.
        https://bugs.webkit.org/show_bug.cgi?id=51790

        Correct typo for the new "update-webkit-wincairo-libs" script.

        * Scripts/build-webkit: Incorrectly calling the
          update-webkit-cairo-libs which does not exist.

2011-04-12  Alice Liu  <alice.liu@apple.com>

        Reviewed by Jon Honeycutt.

        A change that should have been part of http://trac.webkit.org/changeset/83628

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Setting should be off for most tests. Reset to false.

2011-04-12  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: --results-directory is relative to builddir, not $PWD
        https://bugs.webkit.org/show_bug.cgi?id=58272

        NRWT was interpreting the --results-directory cmd line arg as
        relative to the build directory, not the current working
        directory (ORWT uses the latter, which is much more intuitive).
        
        This patch fixes the base case, but includes an override for
        Chromium that is needed until the bots can be updated.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-12  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, roll out r83621 as it broke the GTK build.

        [GTK] arguments passed to build-jsc and build-webkit scripts are not taken into account
        https://bugs.webkit.org/show_bug.cgi?id=58333

        * Scripts/build-jsc:
        * Scripts/build-webkit:

2011-04-12  Carl Lobo  <carllobo@gmail.com> and Brent Fulgham <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Patch to download the WinCairo dependancies as part of build-webkit.
        https://bugs.webkit.org/show_bug.cgi?id=51790

        This patch downloads the dependancies from 
            http://idisk.mac.com/bfulgham-Public/WinCairoRequirements.zip 
        checking the modification timestamp etc. 

        * Tools/Scripts/build-webkit
        * Tools/Scripts/update-webkit: Modified to understand the --wincairo
          flag, and to update WinCairo dependencies when used.
        * Tools/Scripts/update-webkit-cairo-libs: added
        * Tools/Scripts/update-webkit-dependency: added
        * Tools/Scripts/update-webkit-auxiliary-libs

2011-04-12  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Pressing Tab in Web Inspector's console does not cycle through completion options
        https://bugs.webkit.org/show_bug.cgi?id=56020

        Don't call TranslateMessage() in the MiniBrowser or TestWebKitAPI for key messages destined for a WebKit2 view,
        since WebKit will do this for us.  If we didn't do this, TranslateMessage() would be called twice,
        which would generate two characters for every keypress (for example).  I didn't bother doing this for
        WebKitTestRunner, since it doesn't get any WM_KEYDOWN events.
        
        Add new WebKit2/TranslateMessageGeneratesWMChar test to test expected TranslateMessage() behavior.

        * MiniBrowser/win/main.cpp:
        (shouldTranslateMessage): Added.
        (_tWinMain): Don't call TranslateMessage() unless shouldTranslateMessage() says to.
        * TestWebKitAPI/PlatformUtilities.h: Added shouldTranslateMessage() on Windows.
        * TestWebKitAPI/PlatformWebView.h: Added simulateAKeyDown().
        * TestWebKitAPI/Tests/WebKit2/win/TranslateMessageGeneratesWMChar.cpp: Added.
        (TestWebKitAPI::didNotHandleKeyEventCallback): Added.
        (TestWebKitAPI::runAndWatchForWMChar): Added.
        (TestWebKitAPI::TEST): Added.
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::run): Don't call TranslateMessage() unless shouldTranslateMessage() says to.
        (TestWebKitAPI::Util::shouldTranslateMessage): Added.
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::simulateAKeyDown): Added.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added TranslateMessageGeneratesWMChar.cpp.

2011-04-12  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: update code to use port.results_directory() instead of options.results_directory
        https://bugs.webkit.org/show_bug.cgi?id=58290

        This is some preliminary refactoring for bug 58272.

        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-04-12  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        webkitpy: fix mock_filesystem abspath to handle relative paths
        and add filesystem.chdir() and filesystem.getcwd() to be able
        to test this and mock it out.

        https://bugs.webkit.org/show_bug.cgi?id=58288

        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/common/system/filesystem_unittest.py:

2011-04-12  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=58292
        Provide new setting to allow site icon loading despite disabling automatic image loading in general.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues): Setting should be off for most tests. Reset to false.

2011-04-12  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

        Reviewed by Eric Seidel.

        [Qt] Enable JIT build for SH4 platforms.
        https://bugs.webkit.org/show_bug.cgi?id=58317


        * DumpRenderTree/qt/DumpRenderTree.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * Scripts/webkitdirs.pm:

2011-04-12  Tony Chang  <tony@chromium.org>

        Reviewed by Andreas Kling.

        [Qt] embed checksums in PNGs written by Qt-DRT
        https://bugs.webkit.org/show_bug.cgi?id=58173

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dump):

2011-04-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should upload failure diffs when tests fail
        https://bugs.webkit.org/show_bug.cgi?id=58348

        This change was mostly just plumbing.  We were already saving
        this information for flaky test reporting.  I just made it possible
        for normal failures to report archives as well.

        I did a little abstraction work to try and share some code between
        flakytestreporter.py and this new code.  There is still more we could do.

        In making this change I also went through and updated the various
        places we have urls hard-coded in our python and pointed them at
        common.config.urls.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/statusserver.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/tool/bot/botinfo.py: Added.
        * Scripts/webkitpy/tool/bot/botinfo_unittest.py: Added.
        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2011-04-12  Daniel Bates  <dbates@rim.com>

        Rubber-stamped by Eric Seidel.

        svn-apply and/or patch(1) has trouble applying patches that makes changes to files
        with Windows line endings
        https://bugs.webkit.org/show_bug.cgi?id=53625

        Fixes an issue where a patch made on a SCM checkout on a Unix file system cannot be
        applied to an SCM checkout on a Windows file system and vice-versa.

        This issue manifests itself due to custom SCM settings as well as differences in
        gitattributes support in older versions of Git (e.g. 1.7.0.3). We implement support
        into svn-apply/unapply to compensate for differences in line endings by converting
        the line endings in a patch to match the line endings in the target file (if it exists).

        * Scripts/VCSUtils.pm:
          - Added parseFirstEOL(), which returns the first end-of-line character(s) that appear in the
            content read from the specified file handle. Obviously, this heuristic will not work
            for files with mixed line endings, but I don't envision such files to be the norm. If
            this turns out to be an issue then we can improve the heuristic.
          - Added firstEOLInFile().
          - Modified parsePatch() and parseDiff() to take an optional hash reference to an options hash.
            In particular, added the hash key shouldNotUseIndexPathEOL to control whether to use the line
            endings in the diff instead of the line endings in the target file.
          - Extracted local variable $chunkRangeRegEx from fixChangeLogPatch() so that it can be
            re-used in parseDiff().
        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl: Modified to pass {shouldNotUseIndexPathEOL => 1}
          to parsePatch() since these unit tests don't create mock files. Instead, created unit tests that use
          mock files in file VCSUtils_unittest/parseDiffWithMockFiles.pl.
        * Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl: Added.
        * Scripts/webkitperl/VCSUtils_unittest/parseFirstEOL.pl: Added.

2011-04-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        REGRESSION (r83550): Multiple http tests crashing in the web process in SQLite beneath CFNetwork on Windows 7 Release (WebKit2 Tests)
        https://bugs.webkit.org/show_bug.cgi?id=58336

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        Remove cache clearing as that is causing tests to crash on Windows 7.

2011-04-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        REGRESSION(r77974): http/tests/security/aboutBlank/security-context-window-open.html is failing
        <rdar://problem/8981346>
        https://bugs.webkit.org/show_bug.cgi?id=54159

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction):
        (WTR::InjectedBundlePage::decidePolicyForNewWindowAction):
        (WTR::InjectedBundlePage::decidePolicyForResponse):
        (WTR::InjectedBundlePage::unableToImplementPolicy):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        Add short-circuited policy client which matches WebKit1.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        Clear the cache between tests to ensure consistent results.

2011-04-11  George Guo  <George.Guo@nokia.com>

        Reviewed by Eric Seidel.

        prepare-ChangeLog support email input but -h did not show the option
        https://bugs.webkit.org/show_bug.cgi?id=58164

        Add email option to -h to improve the usability

        * Scripts/prepare-ChangeLog:

2011-04-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        Rename MediaControls to MediaControlRootElement.
        https://bugs.webkit.org/show_bug.cgi?id=58250

        * Scripts/do-webcore-rename: Documented the renaming.

2011-04-11  Sam Weinig  <sam@webkit.org>

        Fix Windows build.

        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):

2011-04-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Move focus management out of WebKit via  the UIClient
        <rdar://problem/8784068>
        https://bugs.webkit.org/show_bug.cgi?id=58278

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):
        Add stubs for new UIClient functions.

2011-02-03  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] The GTK+ DRT needs an implementation of the PlainTextController
        https://bugs.webkit.org/show_bug.cgi?id=53605

        Add an implementation of the PlainTextController for the GTK+ DRT.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (addControllerToWindow): Added this helper method.
        (webViewWindowObjectCleared): Use the new helper to add EventSender
        and the PlainTextController to the window object.
        * GNUmakefile.am: Added PlainTextController source files.
        * DumpRenderTree/gtk/PlainTextController.cpp: Added. This will rely
        on DumpRenderTreeSupportGtk to convert a JSValueRef into a WebKitDOMRange
        until that functionality exists somewhere in the WebKitGTK+ stack.
        * DumpRenderTree/gtk/PlainTextController.h: Added.

2011-04-11  Yael Aharon  <yael.aharon@nokia.com>

        Unreviewed.

        Adding my IRC nick.

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

2011-04-11  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        new-run-webkit-tests: fix crash when running under windows cmd.exe
        https://bugs.webkit.org/show_bug.cgi?id=58197

        We would intermittently crash when running NRWT directly under
        cmd.exe on windows because we were sharing the stdin file
        descriptor between the python process and the http server.
        cmd.exe really didn't like that, and there was no reason to
        share the descriptor, so we now use a PIPE instead.

        * Scripts/webkitpy/layout_tests/port/http_server.py:

2011-04-11  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: add unit tests for Port.diff_image()
        https://bugs.webkit.org/show_bug.cgi?id=58196

        Add the unit tests for the fix in bug 58195.

        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-04-11  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: implement support for audio, take two
        https://bugs.webkit.org/show_bug.cgi?id=58195

        Attempt to re-land the fix for bug 58101 (which was initially
        landed in r83330, but rolled out). This is the same patch but
        fixes crashes in Port.diff_image() caused by the change for
        empty image files being None instead of ''.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-04-11  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Implement AccessibilityUIElement::{row|column}IndexRange in DRT
        https://bugs.webkit.org/show_bug.cgi?id=57854

        Implement missing features in GTK's DRT.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (indexRangeInTable): New helper function to get the range string
        for the current cell inside the parent table, either from the
        point of view of rows or columns.
        (AccessibilityUIElement::rowIndexRange): Implemented by relying on
        the new helper function indexRangeInTable().
        (AccessibilityUIElement::columnIndexRange): Ditto.

2011-04-11  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Implement AccessibilityUIElement::cellForColumnAndRow in DRT
        https://bugs.webkit.org/show_bug.cgi?id=57826

        Implement missing feature in GTK's DRT.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::cellForColumnAndRow): Implemented, by
        relying on the analogous function from the AtkTable interface.

2011-04-05  Timothy Hatcher  <timothy@apple.com>

        Fix the extract-localizable-strings script errors that started after
        WEB_UI_STRING was added to LocalizedStrings.h in WebCore.

        * Scripts/extract-localizable-strings: Skip LocalizedStrings.h.

2011-04-11  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        fix crc computation on 64 bit machines
        https://bugs.webkit.org/show_bug.cgi?id=58243

        unsigned long is dependenct on CPU architecture, so use unsigned which is always 32 bits

        * DumpRenderTree/CyclicRedundancyCheck.cpp:
        (makeCrcTable):
        (computeCrc):
        * DumpRenderTree/CyclicRedundancyCheck.h:
        * DumpRenderTree/PixelDumpSupport.cpp:
        (appendIntToVector):
        (convertChecksumToPNGComment):

2011-04-10  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Eric Seidel.

        Require no undefined symbols during compilation.

        [Qt] [WK2] WebKitTestRunner, QtWebProcess and WTRInjectBundle should fail to compile when there's undefined symbols
        https://bugs.webkit.org/show_bug.cgi?id=54896

        Add -Wl,--no-undefined to catch missing symbols early.

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-04-10  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Remove collector dirs from the list of build dirs.

        * wx/build/settings.py:

2011-04-10  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Add Source/JavaScriptCore/heap to the list of directories.

        * wx/build/settings.py:

2011-04-10  David Levin  <levin@chromium.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION(r83384): Change to chromium.py is resulting in failures of the test framework on linux.
        https://bugs.webkit.org/show_bug.cgi?id=58201

        * Scripts/webkitpy/layout_tests/port/chromium.py: Commented out the assert for now,
        and filed bug 58202.

2011-04-09  David Levin  <levin@chromium.org>

        Unreviewed, rolling out r83394.
        http://trac.webkit.org/changeset/83394
        https://bugs.webkit.org/show_bug.cgi?id=53625

        Patch was incorrect as noted in the bug.

        * Scripts/svn-apply:

2011-04-09  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        svn-apply and/or patch(1) has trouble applying patches that makes changes to files with Windows line endings
        https://bugs.webkit.org/show_bug.cgi?id=53625

        * Scripts/svn-apply: Ensure that the portions of patches
        which are for vcproj/vsprops files has DOS line endings.

2011-04-09  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        It looks like NRWT has not been stopping DRT/TestShell
        instances properly on windows, probably for a long time.
        This would go a long way to explaining why we often have
        processes lying around :)

        https://bugs.webkit.org/show_bug.cgi?id=57807

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2011-04-09  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Don't link against fontconfig or X11 if embedded
        https://bugs.webkit.org/show_bug.cgi?id=58104

        * DumpRenderTree/qt/DumpRenderTree.pro: fontconfig !included in embedded
        * QtTestBrowser/QtTestBrowser.pro: ditto
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro: ditto
        * WebKitTestRunner/qt/WebKitTestRunner.pro: ditto

2011-04-08  Jon Honeycutt  <jhoneycutt@apple.com>

        http/tests/loading/preload-append-scan.php is failing on Windows
        https://bugs.webkit.org/show_bug.cgi?id=58178

        Reviewed by Brian Weinstein.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (lastPathComponent):
        Use CFURL API to find the last path component, rather than
        PathFindFileName(), because the latter will include the query string.

2011-04-08  Jian Li  <jianli@chromium.org>

        Unreviewed, rolling out r83327, r83330 since these patches are very
        likely to break chromium webkit mac10.6 builders.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-04-08  Vincent Scheib  <scheib@chromium.org>

        Reviewed by Eric Seidel.

        add chromium-gpu-linux-x86_64 to the recognized list of ports
        https://bugs.webkit.org/show_bug.cgi?id=58099

        Add chromium-gpu-linux-x86_64 to fix assert.

        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:

2011-04-08  Alpha Lam  <hclam@chromium.org>

        Unreviewed, rolling out r83335.
        http://trac.webkit.org/changeset/83335
        https://bugs.webkit.org/show_bug.cgi?id=53556

        GTK and QT bots are broken

        * Scripts/build-webkit:

2011-04-07  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Setup ENABLE(TRACK) feature define
        https://bugs.webkit.org/show_bug.cgi?id=53556

        * Scripts/build-webkit:

2011-04-08  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        new-run-webkit-tests: configure a NRWT test bot for Mac SL
        https://bugs.webkit.org/show_bug.cgi?id=58114

        This change removes the old new-run-webkit-tests entry and
        updates it for a new test-only bot.

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

2011-04-08  Dominic Cooney  <dominicc@google.com>

        Reviewed by Adam Roben.

        Make layoutTestController.shadowRoot return null, not undefined,
        when its argument is invalid.
        https://bugs.webkit.org/show_bug.cgi?id=58121

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::shadowRoot):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::shadowRoot):

2011-04-08  Pere Martir  <pere.martir4@gmail.com>

        Reviewed by Adam Roben.

        Locate NSTD.EXE in 64-bit Windows
        https://bugs.webkit.org/show_bug.cgi?id=57847

        * Scripts/old-run-webkit-tests:

2011-04-08  Adam Roben  <aroben@apple.com>

        Qt build fix

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h: Pull in stdarg.h for va_list.

2011-04-07  Adam Roben  <aroben@apple.com>

        Test that NPP_SetWindow is passed a null window handle during plugin destruction on non-Mac platforms

        Test for <http://webkit.org/b/47009> WebKit2 needs to call NPP_SetWindow when destroying a
        plugin

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginLogWithArguments): Moved code to format and log the message here...
        (pluginLog): ...from here.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h: Added pluginLogWithArguments.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::log): Added. Calls through to pluginLogWithArguments.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h: Added log.

        * DumpRenderTree/TestNetscapePlugIn/Tests/NPPSetWindowCalledDuringDestruction.cpp: Added.
        (NPPSetWindowCalledDuringDestruction::setWillBeDestroyed): Records that destruction is about
        to begin.
        (NPPSetWindowCalledDuringDestruction::NPPSetWindowCalledDuringDestruction): Simple
        constructor.
        (NPPSetWindowCalledDuringDestruction::NPP_GetValue): Creates and returns a ScriptObject that
        can be used to invoke our setWillBeDestroyed function.
        (NPPSetWindowCalledDuringDestruction::NPP_SetWindow): Records what has happened (and logs if
        anything unexpected happens).
        (NPPSetWindowCalledDuringDestruction::NPP_Destroy): On Mac, logs a failure message if
        NPP_SetWindow was called during destruction. On other platforms, logs a failure message if
        NPP_SetWindow was *not* called during destruction.
        (NPPSetWindowCalledDuringDestruction::ScriptObject::hasMethod): Return true for our only
        method, setWillBeDestroyed.
        (NPPSetWindowCalledDuringDestruction::ScriptObject::invoke): Call through to the PluginTest
        object.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:
        Added new test.

        * Scripts/old-run-webkit-tests: Skip the new test when using out-of-process plugins with
        WebKit1 on Mac, since it can't work properly due to <http://webkit.org/b/58077>.

2011-04-08  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement increment() and decrement() functions in DRT's AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=58039

        Implement missing functions in GTK's DRT.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::increment): Implemented.
        (AccessibilityUIElement::decrement): Implemented.

2011-04-08  Dominic Cooney  <dominicc@google.com>

        Reviewed by Kent Tamura.

        Make WK2 layoutTestController.shadowRoot return undefined, not
        null, when its argument is not an element.
        https://bugs.webkit.org/show_bug.cgi?id=58121

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::shadowRoot):

2011-04-07  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        Change reference port for Mac GPU baselines from
        Leopard to SnowLeopard, XP to Win7, and Linux-x86
        to Linux x86-64.

        https://bugs.webkit.org/show_bug.cgi?id=58099

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-04-07  Andrew Scherkus  <scherkus@chromium.org>

        Revert ENABLE_TRACK patch due to compile failures.

        * Scripts/build-webkit:

2011-04-07  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        update DRT to embed checksums in png files
        https://bugs.webkit.org/show_bug.cgi?id=57871

        We insert the bytes for the comment in printPNG rather than at encode
        time because each platform does its own PNG encoding (either using CG
        or cairo).  Putting this in pringPNG avoids having to duplicate this
        code, although it's not as clean as doing it at encoding time.

        We insert the comment right after the IHDR chunk of the PNG.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/CyclicRedundancyCheck.cpp: Added.
        (makeCrcTable): Ported from LayoutTests/fast/canvas/webgl/resources/pnglib.js
        (computeCrc): Ported from LayoutTests/fast/canvas/webgl/resources/pnglib.js
        * DumpRenderTree/CyclicRedundancyCheck.h: Added.
        * DumpRenderTree/PixelDumpSupport.cpp:
        (dumpWebViewAsPixelsAndCompareWithExpected):
        (convertChecksumToPNGComment): Generate the bytes to insert.
        (printPNG): Insert the png comment before the first IDAT section.
        * DumpRenderTree/PixelDumpSupport.h:
        * DumpRenderTree/cairo/PixelDumpSupportCairo.cpp:
        (printPNG):
        (dumpBitmap):
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (printPNG):
        (dumpBitmap):
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * GNUmakefile.am:

2011-04-07  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        Replace WKStringGetCharactersPtr() with WKStringGetCharacters()
        https://bugs.webkit.org/show_bug.cgi?id=58058

        * TestWebKitAPI/Tests/WebKit2/WKString.cpp:
        (TestWebKitAPI::TEST): Add tests for  WKStringGetLength() and WKStringGetCharactersPtr().

2011-04-07  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.isPageBoxVisible
        https://bugs.webkit.org/show_bug.cgi?id=42695

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::isPageBoxVisible):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-07  Adam Roben  <aroben@apple.com>

        Build fix

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Added a missing import.

2011-04-07  Adam Roben  <aroben@apple.com>

        Move ExtractTestResults[AndLeaks]'s summarizing code back from commandComplete() to finished()

        commandComplete() is never called for MasterShellCommands like ExtractTestResults[AndLeaks].
        (Unfortunately the buildbot documentation does not make this clear.) finished() is the only
        hook we have, so we have to do our work there. I added a new addCustomURLs method which can
        be overridden by subclasses to provide extra URLs before we call up to the base class (after
        which adding more URLs is no longer possible).

        Really hopefully fixes <http://webkit.org/b/56032> Leaks viewer should be linked from leaks
        bot results page

        Reviewed by John Sullivan.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (ExtractTestResults.addCustomURLs): Moved code to add the "view results" URL here...
        (ExtractTestResults.finished): ...from here. This replaces commandComplete, since that
        method is never called for MasterShellCommands.
        (ExtractTestResultsAndLeaks.addCustomURLs): Replaced commandComplete (which is never called)
        with this method (which is).

2011-04-07  Adam Roben  <aroben@apple.com>

        Move ExtractTestResults[AndLeaks]'s summarizing code from finished() to commandComplete()

        This matches how most of our other build steps work, so is good just for improving
        consistency between build steps. It should also make it possible for
        ExtractTestResultsAndLeaks to successfully add a URL to Leaks Viewer. (Previously we were
        trying to do this in finished() after we had called up to the base class, but that was
        apparently too late to add more URLs.)

        Hopefully fixes <http://webkit.org/b/56032> Leaks viewer should be linked from leaks bot
        results page

        Reviewed by John Sullivan.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (ExtractTestResults): Added a descriptionDone property so that we don't have to manually
        call setText to get the right text to show up for this step. This matches how most of our
        other build steps work.
        (ExtractTestResults.commandComplete): Replaced our override of finished with this function.
        This is how most of our other build steps work.
        (ExtractTestResultsAndLeaks.commandComplete): Replaced our override of finished with this
        function, to match the base class.

2011-04-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        webkit-patch shouldn't state the whole working copy when calling check-webkit-style
        https://bugs.webkit.org/show_bug.cgi?id=58022

        Previously, we were ignoring the args variable!  This patch fixes the
        regression introduced in http://trac.webkit.org/changeset/82771.

        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/checkstyle.py:

2011-04-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        REGRESSION: "webkit-patch land" doesn't work correctly in SVN subdirectories
        https://bugs.webkit.org/show_bug.cgi?id=58017

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2011-04-06  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.pageSizeAndMarginsInPixels
        https://bugs.webkit.org/show_bug.cgi?id=57984

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::pageSizeAndMarginsInPixels):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-06  Chris Rogers  <crogers@google.com>

        Reviewed by Tony Chang.

        Add web audio support to DumpRenderTree (mac port)
        https://bugs.webkit.org/show_bug.cgi?id=57969

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (setEncodedAudioDataCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpAsAudio):
        (LayoutTestController::setDumpAsAudio):
        (LayoutTestController::encodedAudioData):
        (LayoutTestController::setEncodedAudioData):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpAudio):
        (dump):

2011-04-06  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] LayoutTestController needs to implement numberOfPendingGeolocationPermissionRequests
        https://bugs.webkit.org/show_bug.cgi?id=56086

        Add the missing method.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::getAllPages): Add a method to return all the pages allocated for the current test.
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):

2011-04-06  Dai Mikurube  <dmikurube@chromium.org>

        Reviewed by David Levin.

        Add QUOTA build flag for unified quota API
        https://bugs.webkit.org/show_bug.cgi?id=57918

        * Scripts/build-webkit: Added QUOTA build flag

2011-04-06  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        Adjust the apple webkit port's default timeout to match
        old-run-webkit-tests at 35 seconds.

        https://bugs.webkit.org/show_bug.cgi?id=37738

        * Scripts/webkitpy/layout_tests/port/mac.py:

2011-04-06  Scott Cameron  <sccameron@rim.com>

        Reviewed by Eric Seidel.

        Remove global variable $httpdPath and replace with the return value of
        getHTTPDPath().  Also remove unnecessary calls to getHTTPDPath().
        https://bugs.webkit.org/show_bug.cgi?id=53499

        * Scripts/run-iexploder-tests:
        * Scripts/webkitperl/httpd.pm:

2011-04-06  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Make sure JS_EXPORT_PRIVATE is an empty define when we aren't using the export macros.
        
        https://bugs.webkit.org/show_bug.cgi?id=27551
        
        * DumpRenderTree/config.h:
        * WebKitAPITest/config.h:
        * WebKitTestRunner/config.h:

2011-04-06  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Adler.

        teach run-webkit-tests to read checksums from png files
        https://bugs.webkit.org/show_bug.cgi?id=57993

        * Scripts/old-run-webkit-tests: Read the first 2k of a .png if there's
          no .checksum and look for the checksum in there.

2011-04-06  David Dorwin  <ddorwin@chromium.org>

        Reviewed by David Levin.

        Enable fullscreen layout tests for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=55726

        Make DumpRenderTree always run with fullscreen enabled (equivalent of --enable-fullscreen).

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):

2011-04-06  Adam Roben  <aroben@apple.com>

        Add a "view leaks" link to builds on SnowLeopard Intel Leaks

        Fixes <http://webkit.org/b/56032> Leaks viewer should be linked from leaks bot results page

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (ExtractTestResults.resultDirectoryURL): Added. Moved code to calculate the URL for the
        build's results directory here...
        (ExtractTestResults.finished): ...from here.
        (ExtractTestResultsAndLeaks): New class that's used by the leaks builder
        (ExtractTestResultsAndLeaks.finished): Calls up to the base class, but also adds a "view
        leaks" link to point to Leaks Viewer for this build.
        (TestFactory): Added ExtractTestResultsClass abstraction. This isn't overridden anywhere,
        but it seemed good to add for consistency with BuildAndTestFactory.
        (BuildAndTestFactory): Added ExtractTestResultsClass abstraction.
        (BuildAndTestLeaksFactory): Use ExtractTestResultsAndLeaks as our ExtractTestResultsClass so
        that we'll get a "view leaks" link.

2011-04-06  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Eric Seidel.

        [Gtk] plugins/set-status.html fails
        https://bugs.webkit.org/show_bug.cgi?id=57844

        Allow an empty status text to be dumped.

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

2011-04-06  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.pageNumberForElementById
        https://bugs.webkit.org/show_bug.cgi?id=42329

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::pageNumberForElementById):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-06  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] DumpRenderTree: do not try to free NULL SoupURIs
        https://bugs.webkit.org/show_bug.cgi?id=57932

        Some Layout tests have invalid URIs that do not generate valid
        SoupURI instances. Do not try to free those NULL SoupURIs.

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

2011-04-06  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Andreas Kling.

        ORWT shouldn't generate diff files for tests without expected files
        https://bugs.webkit.org/show_bug.cgi?id=57846

        * Scripts/old-run-webkit-tests:

2011-04-05  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Mac build fix. Handle cases where 10.4 SDK is not installed, and also add x86_64 arch
        to deps.

        * wx/install-unix-extras:

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

        Unreviewed, rolling out r82978, r82999, and r83001.
        http://trac.webkit.org/changeset/82978
        http://trac.webkit.org/changeset/82999
        http://trac.webkit.org/changeset/83001
        https://bugs.webkit.org/show_bug.cgi?id=57913

        Does not work in Python 2.5 (Requested by abarth on #webkit).

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_unittest.py:

2011-04-05  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.numberOfPages
        https://bugs.webkit.org/show_bug.cgi?id=42694

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::numberOfPages):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-05  Tony Chang  <tony@chromium.org>

        Reviewed by Mihai Parparita.

        [chromium] stop putting results downloaded from WebKit Linux in chromium-linux-x86_64
        https://bugs.webkit.org/show_bug.cgi?id=57889

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-04-05  Adam Barth  <abarth@webkit.org>

        Silly with statement, from the future!

        * Scripts/webkitpy/common/system/executive.py:

2011-04-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Tony Chang.

        Don't use Exception.message because it's deprecated
        https://bugs.webkit.org/show_bug.cgi?id=57892

        Suppress the warning for now.  When we move to Python 3, we might need
        to something more dramatic.

        * Scripts/webkitpy/common/system/executive.py:

2011-04-05  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Ojan Vafai.

        Add builders.js to dashboard file list
        https://bugs.webkit.org/show_bug.cgi?id=57899

        Add file added by http://crrev.com/80538 to dashboard file list.

        * TestResultServer/handlers/dashboardhandler.py:

2011-04-05  MORITA Hajime  <morrita@google.com>

        Reviewed by Adam Barth.

        webkit-patch should print git's stderr when git svn dcommit fail
        http://webkit.org/b/57861

        * Scripts/webkitpy/common/checkout/scm.py:

2011-04-05  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Add --baseline-search-path to NRWT
        https://bugs.webkit.org/show_bug.cgi?id=56233
        
        Add NRWT option to specify additional directories to look for baselines
        (will be used by hardware GPU bots which will have local per-bot
        expectations for some tests)

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-04-05  Adam Roben  <aroben@apple.com>

        Strip off /results.html from results URLs before trying to load leaks files from them

        r82734 changed build.webkit.org's "view results" URLs to point straight to the results.html
        files, rather than pointing to the directory that contains them. This is more convenient for
        people browsing build.webkit.org, but confused Leaks Viewer.

        Fixes <http://webkit.org/b/57869> REGRESSION (r82734): Links in Leaks Viewer's Recent Builds
        list don't work

        Reviewed by Joseph Pecoraro.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js:
        (RecentBuildsLoader.prototype.start): Strip off "/results.html" from the results URL.

2011-04-05  Carol Szabo  <carol@webkit.org>

        Unreviewed.

        Updated my info in committers.py

        Scripts\webkitpy\common\config\committers.py 

2011-04-05  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] Make WebKitLibraries optional for building QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=57542

        * Scripts/build-webkit:

2011-04-05  Chang Shu  <cshu@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] MiniBrowser defaultUrl does not work
        https://bugs.webkit.org/show_bug.cgi?id=57021

        Match the behavior and coding of MiniBrowser to QtTestBrowser.
        * MiniBrowser/qt/main.cpp:
        (main):

2011-04-05  Jade Han  <jade.han@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] [Symbian] Disable WebKitTestRunner for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=54977

        This change is a preparation to enable building webkit2 for Symbian.
        Bug 57834 is filed to fix and enable WebKitTestRunner for Symbian.

        * Tools.pro:

2011-04-05  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Fix timeoutTimer of MiniBrowser's UrlLoader
        https://bugs.webkit.org/show_bug.cgi?id=57832

        Only QWKPage has loadFinished signal so connect to it instead of BrowserWindow.

        * MiniBrowser/qt/UrlLoader.cpp:
        (UrlLoader::UrlLoader):

2011-04-05  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Linux Release minimal build fix after r82919.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::loadURLListFromFile):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::loadURLListFromFile):

2011-04-05  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Make URL loader accessible from testbrowser's menus
        https://bugs.webkit.org/show_bug.cgi?id=57823

        Add "Load URLs from file" to QtTestBrowser's and to MiniBrowser's menu.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::loadURLListFromFile):
        (BrowserWindow::~BrowserWindow):
        * MiniBrowser/qt/BrowserWindow.h:
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::~LauncherWindow):
        (LauncherWindow::createChrome):
        (LauncherWindow::loadURLListFromFile):
        * QtTestBrowser/launcherwindow.h:

2011-04-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Brian Weinstein.

        Remove duplicate API from WKContext
        <rdar://problem/8727879>
        https://bugs.webkit.org/show_bug.cgi?id=57815

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/SendingMessagesToTheWebProcessBeforeItIsValid.cpp: Removed.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Remove SendingMessagesToTheWebProcessBeforeItIsValid since the API it was testing is now removed.

2011-04-04  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] don't write .checksum files if a fallback platform has an embedded checksum
        https://bugs.webkit.org/show_bug.cgi?id=57783

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:

2011-04-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, run uninstall when cleaning to remove built files
        from WebKitBuild.

        * Scripts/webkitdirs.pm:

2011-04-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] WebGL support
        https://bugs.webkit.org/show_bug.cgi?id=31517

        Add support to the DRT for turning on WebGL when a layout tests requests it.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::overridePreference): Allow turning on WebGL from tests.

2011-04-04  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.setAllowFileAccessFromFileURLs
        https://bugs.webkit.org/show_bug.cgi?id=57572

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setAllowFileAccessFromFileURLs):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-04  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Csaba Osztrogonác.

        [Qt] DumpRenderTree breaks compilation in some uClibc environments
        https://bugs.webkit.org/show_bug.cgi?id=57602

        * DumpRenderTree/qt/main.cpp:
        (get_backtrace):

2011-04-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, add new LayoutTestController method stub to wx.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::shadowRoot):

2011-04-04  Pavel Podivilov  <podivilov@chromium.org>

        Unreviewed, fix exception in rebaseline tool.

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-04-02  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Geoff Garen.

        For Dan!
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):

2011-04-02  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Geoff Garen.

        Need to reset the scale, much like zoom.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):

2011-04-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=57605
        Frame::pageScaleFactor() should not affect getBoundingClientRect() or 
        getClientRects()
        -and corresponding-
        <rdar://problem/9194541>

        Add DRT support for the scaleWebView SPI.
        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController scalePageBy:atX:andY:]):
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::scalePageBy):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):

2011-04-02  Dominic Cooney  <dominicc@google.com>

        Reviewed by Martin Robinson.

        Add layoutTestController.shadowRoot to GTK DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=57551

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::shadowRoot):

2011-04-02  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Remove AbstractStep._run_script and move script names to ports.py
        https://bugs.webkit.org/show_bug.cgi?id=57704

        Replace deprecated _run_script with _tool.executive.run_and_throw_if_fail.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/roll_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:

2011-04-02  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Emulate shebang on Win32
        https://bugs.webkit.org/show_bug.cgi?id=55927

        Scripts on Windows work only if they are called with the explicit interpreter.
        Read the first line of scripts to detect the correct executable.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/system/executive.py: Added interpreter_for_script().
        * Scripts/webkitpy/common/system/executive_unittest.py:

2011-04-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        apos entities shouldn't show up in ChangeLogs when using webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=57692

        Previously, we were using BeautifulSoup to process XML from
        bugs.webkit.org, but that's incorrect.  We should be using
        BeautifulStoneSoup to process the XML.  We were getting the &apos;
        entity wrong because &apos; is an XML entity but not an HTML entity.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:

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

        Unreviewed, rolling out r82721.
        http://trac.webkit.org/changeset/82721
        https://bugs.webkit.org/show_bug.cgi?id=57687

        This patch introduced assertion failures on the GTK+ bots.
        (Requested by mrobinson on #webkit).

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::shadowRoot):

2011-04-01  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix.

        [Qt][WK2] Build Webkit2 using "-2" option on Qt
        https://bugs.webkit.org/show_bug.cgi?id=55074

        * Scripts/build-webkit: Ensure that "-2" isn't passed to qmake.
        (The isWK2() function removes it from @ARGV, but not from @options.)

2011-04-01  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Csaba Osztrogonác.

        [Qt] [WK2] MiniBrowser.qrc not found - regression from rev 82671
        https://bugs.webkit.org/show_bug.cgi?id=57666

        * MiniBrowser/qt/MiniBrowser.qrc: Renamed from Tools/MiniBrowser/MiniBrowser.qrc.

2011-04-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        new-run-webkit-tests: fix feature detection, skipped platform lists on mac

        We apparently never implemented the code to skip tests based on
        what was compiled into DRT. Also, change the logic used to skip
        platform directories to match what old-run-webkit-tests does: 
        skip every test not in a directory in the baseline search path.

        https://bugs.webkit.org/show_bug.cgi?id=57662

        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-03-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Jon Honeycutt.

        <http://webkit.org/b/56730> new-run-webkit-tests fails on Lion seed

        Teach new-run-webkit-tests about the concept of an unreleased version of Mac OS X.

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:

2011-04-01  Chang Shu  <cshu@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2] Build Webkit2 using "-2" option on Qt
        https://bugs.webkit.org/show_bug.cgi?id=55074

        * Scripts/build-webkit:

2011-04-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: remove spurious port version override in webkit.py
        base.py provides a default implementation so this is just
        breaking things.

        https://bugs.webkit.org/show_bug.cgi?id=57667

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:

2011-04-01  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Adam Roben.

        Make view results on waterfall direct link to results.html
        https://bugs.webkit.org/show_bug.cgi?id=57671

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Add "/results.html" to the URL.
        * Scripts/old-run-webkit-tests: Add links to httpd access and error logs.

2011-04-01  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * TestWebKitAPI/Tests/WebKit2/win/HideFindIndicator.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp:
        (TestWebKitAPI::flushMessages):

2011-04-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add adoptWK to WKRetainPtr.h
        https://bugs.webkit.org/show_bug.cgi?id=57670

        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/Tests/WebKit2/AboutBlankLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest.cpp:
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/CookieManager.cpp:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly.cpp:
        * TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp:
        (TestWebKitAPI::createSessionStateContainingFormData):
        * WebKitTestRunner/StringFunctions.h:
        Replace custom versions of adoptWK with the API on in WebKit2/WKRetainPtr.h.

2011-04-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Fix leak noticed by Adam Roben in LayoutTestController::shadowRoot.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::shadowRoot):
        Make judicious use of adoptWK().

2011-04-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Timothy Hatcher.

        Fix extract-localizable-strings for macro change from UI_STRING -> WEB_UI_STRING.

        * Scripts/extract-localizable-strings:

2011-04-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Shockwave plug-in doesn't accept mouse events
        https://bugs.webkit.org/show_bug.cgi?id=57653
        <rdar://problem/8483273>

        Add a plug-in test.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::indicateTestFailure):
        Move code from NPDeallocateCalledBeforeNPShutdown::TestObject::~TestObject here.

        (PluginTest::NPN_ConvertPoint):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        * DumpRenderTree/TestNetscapePlugIn/Tests/NPDeallocateCalledBeforeNPShutdown.cpp:
        (NPDeallocateCalledBeforeNPShutdown::TestObject::~TestObject):
        Call indicateTestFailure.

        * DumpRenderTree/TestNetscapePlugIn/Tests/mac: Added.
        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/ConvertPoint.cpp: Added.
        (ConvertPoint::ConvertPoint):
        (ConvertPoint::testConvert):
        (ConvertPoint::NPP_New):

2011-04-01  Dominic Cooney  <dominicc@google.com>

        Reviewed by Martin Robinson.

        Add layoutTestController.shadowRoot to GTK DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=57551

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::shadowRoot):

2011-04-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKitTestRunner needs layoutTestController.shadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=57661

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::shadowRoot):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        Implement layoutTestController.shadowRoot for WebKit2.

2011-04-01  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.setDatabaseQuota
        https://bugs.webkit.org/show_bug.cgi?id=57568

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setDatabaseQuota):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        This patch completes the cleanup of
        rebaseline-chromium-webkit-tests to work with all of the
        variants of a platform (we can now rebaseline gpu- and non-gpu
        files at the same time).

        When the rebaselining is complete, any lines declared as
        REBASELINE in the expectations file that matches a test that was
        actually rebaselined will be deleted, even if only one of the
        variants was actually rebaselined. This may cause odd problems,
        but is better than where we're at today.

        This change removes the -g flag and deprecates -w. The -g flag is gone
        because GPU baselines are handled just like any other variant.
        The -w flag is deprecated because this tool now only works
        against the canaries, since that's the only place we have a full
        set of bots. It will be trivial to change this to
        build.webkit.org if we decide that's where we want them to be.

        Also, this patch deletes a lot of cruft that is no longer needed
        in the test_expectations code and the port-specific code.

        https://bugs.webkit.org/show_bug.cgi?id=55191

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:

2011-04-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        rebaseline-chromium-webkit-tests does not work correctly with
        version-specific baselines. This patch updates the tool to use
        all of the version-specific bots on the canaries, and will now
        attempt to rebaseline all of the versions by default, although
        it will not update both GPU and CPU versions.
        
        Also, it will no longer modify the test_expectations.txt file
        *at all*. You will have to manually delete the REBASELINE lines
        after running the tool and determining that it did what you
        wanted it to do. This should be fixed in a separate bug - see
        webkit bug #55191.

        https://bugs.webkit.org/show_bug.cgi?id=55608

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:

2011-03-31  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] update the rebaseline tool to know about pngs with checksums
        https://bugs.webkit.org/show_bug.cgi?id=57481

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py: Skip over .checksum files if the checksum is already in the png
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:

2011-04-01  Adam Roben  <aroben@apple.com>

        Retrieve revision numbers from the build's got_revision property in Leaks Viewer

        Previously, we were getting the revision of the first revision that triggered a build.
        Choosing the last revision would have been more accurate. But got_revision is what is used
        everywhere else on build.webkit.org, and should work even when there were no changes that
        triggered a build (e.g., if someone clicked the Force Build button).

        Fixes <http://webkit.org/b/57630> Leaks viewer gets some revision numbers wrong in the
        recent builds list

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js:
        (RecentBuildsLoader.prototype.start): Pull the revision number out of the got_revision
        property, rather than out of the first (i.e., earliest) change in the sourceStamp object.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/Utilities.js:
        (Array.prototype.first): Added this helper function to return the first element in an array
        that matches the given predicate, or null if no such element exists.

2011-03-31  Adam Roben  <aroben@apple.com>

        Prefer (but don't require) bug URLs to be on their own line when parsing bug numbers from ChangeLogs

        Fixes <http://webkit.org/b/57579> webkit-patch is too strict about bug URL formatting

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (parse_bug_id_from_changelog): Fall back to parse_bug_id if we weren't able to find a bug
        URL on its own line.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        (BugzillaTest.test_parse_bug_id_from_changelog): Updated expected results for test
        progression, and added a new test that uses a short bug URL while I was at it.

2011-04-01  Adam Roben  <aroben@apple.com>

        Mark .vcproj/.vsprops/.sln files as being Windows-only

        Fixes <http://webkit.org/b/57489> Mac builders built 82512, but shouldn't have

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build): Added patterns to mark .vcproj/.vsprops/.sln files and .vcproj
        directories as Windows-only.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShoulBuildTest): Added test cases for the above.

2011-04-01  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Build MiniBrowser for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=56319

        Have MiniBrowser reference it's own copy of useragentlist.txt instead
        of copying QtTestBrowser's.
        Remove Tools/MiniBrowser/DerivedSources.pro
        This reduces complexity in the Tools scripts due to Symbian limitations.

        * DerivedSources.pro:
        * MiniBrowser/DerivedSources.pro: Removed.
        * MiniBrowser/MiniBrowser.qrc:
        * MiniBrowser/qt/MiniBrowser.pro:
        * Scripts/webkitdirs.pm:

2011-03-31  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.clearAllDatabases
        https://bugs.webkit.org/show_bug.cgi?id=42540

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::clearAllDatabases):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-03-31  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.setAllowUniversalAccessFromFileURLs
        https://bugs.webkit.org/show_bug.cgi?id=42692

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:

2011-03-31  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Implement mouseDown, mouseUp, and mouseMoveTo in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=57573

        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        Added real definitions for mouseDown, mouseUp, mouseMoveTo and leapForward.
        Removed fake definitions of keyDown and contextClick.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::operator==): Added. So we can compare two WKPoint structs.
        (WTR::parseModifier): Added.
        (WTR::parseModifierArray): Added.
        (WTR::EventSendingController::EventSendingController): Initialize the
        new data members.
        (WTR::EventSendingController::mouseDown): Added. Calls
        WKBundlePageSimulateMouseDown.
        (WTR::EventSendingController::mouseUp): Added. Calls
        WKBundlePageSimulateMouseUp.
        (WTR::EventSendingController::mouseMoveTo): Added. Calls
        WKBundlePageSimulateMouseMotion.
        (WTR::EventSendingController::leapForward): Added.
        (WTR::EventSendingController::updateClickCount): Added. Used by the
        mouseDown/Up functions to create a click count.

        * WebKitTestRunner/InjectedBundle/EventSendingController.h: Updated
        for the changes above.

2011-03-31  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] implement LayoutTestController::setWillSendRequestReturnsNull
        https://bugs.webkit.org/show_bug.cgi?id=57362

        Do not generate DRT output if willSendRequestReturnsNull is set.

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

2011-03-31  Vamshikrishna.Yellenki  <vamshi@motorola.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        Implement MiniBrowser for Gtk port.
        https://bugs.webkit.org/show_bug.cgi?id=48512

        Initial implementation of the Gtk MiniBrowser.

        * MiniBrowser/gtk/GNUmakefile.am: Added.
        * MiniBrowser/gtk/main.c: Added.
        (activateUriEntryCallback):
        (destroyCallback):
        (goBackCallback):
        (goForwardCallback):
        (createToolbar):
        (createWebView):
        (createWindow):
        (argumentToURL):
        (main):

2011-03-30  Dominic Cooney  <dominicc@google.com>

        Reviewed by Dimitri Glazkov.

        Adds layoutTestController.shadowRoot accessor to Mac DRT.
        https://bugs.webkit.org/show_bug.cgi?id=57415

        * DumpRenderTree/LayoutTestController.cpp:
        (shadowRootCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::shadowRoot):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::shadowRoot):

2011-03-30  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Chris Marrin.

        Update fast/canvas tests to avoid dumping the render tree when possible
        https://bugs.webkit.org/show_bug.cgi?id=57493

        * DumpRenderTree/mac/DumpRenderTree.mm: Make DRT aware of new default values for
          accelerated drawing and accelerated drawing for canvas

2011-03-30  Adam Roben  <aroben@apple.com>

        Stop ignoring leaks in CGGradientCreateWithColorStops

        Fixes <rdar://problem/7888547>.

        Rubber-stamped by John Sullivan.

        * Scripts/old-run-webkit-tests:
        (countAndPrintLeaks): Removed some code to ignore those leaks.

2011-03-30  Timur Iskhodzhanov  <timurrrr@google.com>

        Reviewed by Alexey Proskuryakov.

        Add some dynamic annotations to JavaScriptCore/wtf
        https://bugs.webkit.org/show_bug.cgi?id=53747

        By using these annotations we can improve the precision of finding
        WebKit errors using dynamic analysis tools like ThreadSanitizer and Valgrind.
        These annotations don't affect the compiled binaries unless USE(DYNAMIC_ANNOTATIONS) is "1".

        These files don't add new functionality, so don't need extra tests.

        * DumpRenderTree/ForwardingHeaders/wtf/DynamicAnnotations.h: Added.

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Share most vsprops between Release and Production builds in releaseproduction.vsprops
        https://bugs.webkit.org/show_bug.cgi?id=57508

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginProduction.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginRelease.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginReleaseCairoCFLite.vsprops:
        * DumpRenderTree/win/DumpRenderTreeProduction.vsprops:
        * DumpRenderTree/win/DumpRenderTreeRelease.vsprops:
        * DumpRenderTree/win/DumpRenderTreeReleaseCairoCFLite.vsprops:
        * DumpRenderTree/win/ImageDiffProduction.vsprops:
        * DumpRenderTree/win/ImageDiffRelease.vsprops:
        * DumpRenderTree/win/ImageDiffReleaseCairoCFLite.vsprops:
        * FindSafari/FindSafariProduction.vsprops:
        * FindSafari/FindSafariRelease.vsprops:
        * FindSafari/FindSafariReleaseCairoCFLite.vsprops:
        * FindSafari/FindSafariReleasePGO.vsprops:
        * MiniBrowser/Configurations/MiniBrowserProduction.vsprops:
        * MiniBrowser/Configurations/MiniBrowserRelease.vsprops:
        * MiniBrowser/Configurations/MiniBrowserReleaseCairoCFLite.vsprops:
        * TestWebKitAPI/Configurations/TestWebKitAPIRelease.vsprops:
        * TestWebKitAPI/Configurations/TestWebKitAPIReleaseCairoCFLite.vsprops:
        * WebKitAPITest/WebKitAPITestProduction.vsprops:
        * WebKitAPITest/WebKitAPITestRelease.vsprops:
        * WebKitAPITest/WebKitAPITestReleaseCairoCFLite.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinProduction.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinRelease.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinReleaseCairoCFLite.vsprops:
        * WebKitTestRunner/win/InjectedBundleProduction.vsprops:
        * WebKitTestRunner/win/InjectedBundleRelease.vsprops:
        * WebKitTestRunner/win/InjectedBundleReleaseCairoCFLite.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerProduction.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerRelease.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerReleaseCairoCFLite.vsprops:
        * WinLauncher/WinLauncherProduction.vsprops:
        * WinLauncher/WinLauncherRelease.vsprops:
        * WinLauncher/WinLauncherReleaseCairoCFLite.vsprops:
        * record-memory-win/record-memory-winProduction.vsprops:
        * record-memory-win/record-memory-winRelease.vsprops:
        * record-memory-win/record-memory-winReleaseCairoCFLite.vsprops:

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Update Windows production build logic for new production configurations
        https://bugs.webkit.org/show_bug.cgi?id=57494

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginProduction.vsprops:
        * DumpRenderTree/win/DumpRenderTreeProduction.vsprops:
        * DumpRenderTree/win/ImageDiffProduction.vsprops:
        * FindSafari/FindSafariProduction.vsprops:
        * FindSafari/FindSafariReleasePGO.vsprops:
        * MiniBrowser/Configurations/MiniBrowserProduction.vsprops:
        * WebKitAPITest/WebKitAPITestProduction.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinProduction.vsprops:
        * WebKitTestRunner/win/InjectedBundleProduction.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerProduction.vsprops:
        * WinLauncher/WinLauncherProduction.vsprops:
        * record-memory-win/record-memory-winProduction.vsprops:

2011-03-30  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Fix LoadHTMLStringItem::invoke() after r75966
        Unskip http/tests/navigation/go-back-to-error-page.html

        Also add the location of DumpRenderTreeSupportQt.h
        to DRT's include paths.

        https://bugs.webkit.org/show_bug.cgi?id=52614

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/GCControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::queueLoadHTMLString):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/qt/PlainTextControllerQt.cpp:
        * DumpRenderTree/qt/TextInputControllerQt.cpp:
        * DumpRenderTree/qt/WorkQueueItemQt.cpp:
        (LoadAlternateHTMLStringItem::invoke):
        * DumpRenderTree/qt/WorkQueueItemQt.h:
        (LoadAlternateHTMLStringItem::LoadAlternateHTMLStringItem):
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.h:

2011-03-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Adam Roben.

        SheriffBot rollouts take too long
        https://bugs.webkit.org/show_bug.cgi?id=57498

        We used to build before landing rollouts via the commit-queue to
        prevent further breakage, but now that our individual commit-queue
        machines are slower, building takes too long.  I can't remember the
        last time a rollout broke compile.  It seems like just landing the
        patch is the better trade-off.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2011-03-30  Adam Barth  <abarth@webkit.org>

        Remove platform/chromium-mac-snowleopard
        https://bugs.webkit.org/show_bug.cgi?id=57486

        This directory no longer exists, so we can remove it from the fallback
        chain.

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Rename Windows configuration Release_LTCG to Production for clarity
        https://bugs.webkit.org/show_bug.cgi?id=57465

        * DumpRenderTree/DumpRenderTree.sln:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginProduction.vsprops: Copied from Tools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginReleaseLTCG.vsprops.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginReleaseLTCG.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/DumpRenderTreeProduction.vsprops: Copied from Tools/DumpRenderTree/win/DumpRenderTreeReleaseLTCG.vsprops.
        * DumpRenderTree/win/DumpRenderTreeReleaseLTCG.vsprops: Removed.
        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/ImageDiffProduction.vsprops: Copied from Tools/DumpRenderTree/win/ImageDiffReleaseLTCG.vsprops.
        * DumpRenderTree/win/ImageDiffReleaseLTCG.vsprops: Removed.
        * FindSafari/FindSafari.vcproj:
        * FindSafari/FindSafariProduction.vsprops: Copied from Tools/FindSafari/FindSafariReleaseLTCG.vsprops.
        * FindSafari/FindSafariReleaseLTCG.vsprops: Removed.
        * MiniBrowser/Configurations/MiniBrowserProduction.vsprops: Copied from Tools/MiniBrowser/Configurations/MiniBrowserReleaseLTCG.vsprops.
        * MiniBrowser/Configurations/MiniBrowserReleaseLTCG.vsprops: Removed.
        * MiniBrowser/MiniBrowser.vcproj:
        * Scripts/webkitdirs.pm:
        * TestWebKitAPI/win/TestWebKitAPI.sln:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIGenerated.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitAPITest/WebKitAPITestProduction.vsprops: Copied from Tools/WebKitAPITest/WebKitAPITestReleaseLTCG.vsprops.
        * WebKitAPITest/WebKitAPITestReleaseLTCG.vsprops: Removed.
        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * WebKitLauncherWin/WebKitLauncherWinProduction.vsprops: Copied from Tools/WebKitLauncherWin/WebKitLauncherWinReleaseLTCG.vsprops.
        * WebKitLauncherWin/WebKitLauncherWinReleaseLTCG.vsprops: Removed.
        * WebKitTestRunner/WebKitTestRunner.sln:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/InjectedBundleGenerated.vcproj:
        * WebKitTestRunner/win/InjectedBundleProduction.vsprops: Copied from Tools/WebKitTestRunner/win/InjectedBundleReleaseLTCG.vsprops.
        * WebKitTestRunner/win/InjectedBundleReleaseLTCG.vsprops: Removed.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * WebKitTestRunner/win/WebKitTestRunnerProduction.vsprops: Copied from Tools/WebKitTestRunner/win/WebKitTestRunnerReleaseLTCG.vsprops.
        * WebKitTestRunner/win/WebKitTestRunnerReleaseLTCG.vsprops: Removed.
        * WinLauncher/WinLauncher.vcproj:
        * WinLauncher/WinLauncherProduction.vsprops: Copied from Tools/WinLauncher/WinLauncherReleaseLTCG.vsprops.
        * WinLauncher/WinLauncherReleaseLTCG.vsprops: Removed.
        * record-memory-win/record-memory-win.vcproj:
        * record-memory-win/record-memory-winProduction.vsprops: Copied from Tools/record-memory-win/record-memory-winReleaseLTCG.vsprops.
        * record-memory-win/record-memory-winReleaseLTCG.vsprops: Removed.

2011-03-30  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

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

        Added LayoutTestController.shadowRoot() to Chromium DRT.

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

2011-03-30  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        [Chromium] DumpRenderTree: Implement LayoutTestController::setPluginsEnabled
        https://bugs.webkit.org/show_bug.cgi?id=57430

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

2011-03-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        make webkit-patch upload respect -d
        https://bugs.webkit.org/show_bug.cgi?id=57425

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/tool/steps/commit.py:

2011-03-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        Make "webkit-patch --dry-run --verbose land" log the SVN command it's going to use
        https://bugs.webkit.org/show_bug.cgi?id=57429

        * Scripts/webkitpy/common/checkout/scm.py:

2011-03-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82383.
        http://trac.webkit.org/changeset/82383
        https://bugs.webkit.org/show_bug.cgi?id=57417

        "nrwt isn't shutting down cleanly" (Requested by dpranke on
        #webkit).

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-03-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Make validation message bubble testable
        https://bugs.webkit.org/show_bug.cgi?id=57290

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow): Change a setting so that validation
          bubbles isn't hidden automatically.

2011-03-29  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: use 'threads' on win instead of 'old-threads'

        It's a bit unclear whether multiple threads or multiple
        processes will be a better model on windows. This change will
        test threads for now while we're still working out the bugs in
        multiple-processes.

        https://bugs.webkit.org/show_bug.cgi?id=57410

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-03-29  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style confused by two ChangeLog entries in a row from same user
        https://bugs.webkit.org/show_bug.cgi?id=57250

        * Scripts/webkitpy/style/checker.py: Add the line should be checked function to ChangeLogChecker.
        * Scripts/webkitpy/style/checker_unittest.py: Fix test due to that new function.
        * Scripts/webkitpy/style/checkers/changelog.py: Made this code aware of what lines were being checked.
          It basically assumes only one ChangeLog entry is being processed because that is the standard case and
          checking more than that would be very messey.
        * Scripts/webkitpy/style/checkers/changelog_unittest.py: Add testing to catch the broken case.
        * Scripts/webkitpy/style/error_handlers.py: Added should_line_be_checked.

2011-03-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Mac] Enable interactive-validation tests on Mac DRT
        https://bugs.webkit.org/show_bug.cgi?id=57308

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow): Enable the form interactive validation feature.

2011-03-29  Chang Shu  <cshu@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        WebKitTestRunner needs layoutTestController.setAllowUniversalAccessFromFileURLs
        https://bugs.webkit.org/show_bug.cgi?id=42692

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setAllowUniversalAccessFromFileURLs):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-03-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] [DRT] GtkScrolledWindow adds three pixels of padding between the WebView and the scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=57067

        Eliminate extra spacing between the DRT GtkScrolledWindow and the DRT WebView. This
        will allow WebKit1GTK+ and WebKit2GTK+ to share test results. Followup commits will
        update DRT and pixel results as hundreds of results will need to be updated.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (setDefaultsToConsistentStateValuesForTesting): Eliminate spacing on the GtkScrolledWindow
        by overriding the theme RC/CSS files.

2011-03-29  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Use per-configuration vsprops in tools projects to avoid WebKitVSPropsRedirectionDir removal by MSVC IDE
        https://bugs.webkit.org/show_bug.cgi?id=57394

        Visual Studio's IDE was removing instances of $(WebKitVSPropsRedirectionDir) from
        InheritedPropertySheet rules in our vcproj files when the vcproj was edited from within
        the IDE. To avoid this, add a separate vsprops file for each project configuration that
        contains the required inherited property sheets.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebug.vsprops: Added.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebugAll.vsprops: Added.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebugCairoCFLite.vsprops: Added.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginRelease.vsprops: Added.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginReleaseCairoCFLite.vsprops: Added.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginReleaseLTCG.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/DumpRenderTreeDebug.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeDebugAll.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeDebugCairoCFLite.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeRelease.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeReleaseCairoCFLite.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeReleaseLTCG.vsprops: Added.
        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/ImageDiffDebug.vsprops: Added.
        * DumpRenderTree/win/ImageDiffDebugAll.vsprops: Added.
        * DumpRenderTree/win/ImageDiffDebugCairoCFLite.vsprops: Added.
        * DumpRenderTree/win/ImageDiffRelease.vsprops: Added.
        * DumpRenderTree/win/ImageDiffReleaseCairoCFLite.vsprops: Added.
        * DumpRenderTree/win/ImageDiffReleaseLTCG.vsprops: Added.
        * FindSafari/FindSafari.vcproj:
        * FindSafari/FindSafariDebug.vsprops: Added.
        * FindSafari/FindSafariDebugAll.vsprops: Added.
        * FindSafari/FindSafariDebugCairoCFLite.vsprops: Added.
        * FindSafari/FindSafariRelease.vsprops: Added.
        * FindSafari/FindSafariReleaseCairoCFLite.vsprops: Added.
        * FindSafari/FindSafariReleaseLTCG.vsprops: Added.
        * FindSafari/FindSafariReleasePGO.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserDebug.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserDebugAll.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserDebugCairoCFLite.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserRelease.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserReleaseCairoCFLite.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserReleaseLTCG.vsprops: Added.
        * MiniBrowser/MiniBrowser.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitAPITest/WebKitAPITestDebug.vsprops: Added.
        * WebKitAPITest/WebKitAPITestDebugAll.vsprops: Added.
        * WebKitAPITest/WebKitAPITestDebugCairoCFLite.vsprops: Added.
        * WebKitAPITest/WebKitAPITestRelease.vsprops: Added.
        * WebKitAPITest/WebKitAPITestReleaseCairoCFLite.vsprops: Added.
        * WebKitAPITest/WebKitAPITestReleaseLTCG.vsprops: Added.
        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * WebKitLauncherWin/WebKitLauncherWinDebug.vsprops: Added.
        * WebKitLauncherWin/WebKitLauncherWinDebugAll.vsprops: Added.
        * WebKitLauncherWin/WebKitLauncherWinDebugCairoCFLite.vsprops: Added.
        * WebKitLauncherWin/WebKitLauncherWinRelease.vsprops: Added.
        * WebKitLauncherWin/WebKitLauncherWinReleaseCairoCFLite.vsprops: Added.
        * WebKitLauncherWin/WebKitLauncherWinReleaseLTCG.vsprops: Added.
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/InjectedBundleDebug.vsprops: Added.
        * WebKitTestRunner/win/InjectedBundleDebugAll.vsprops: Added.
        * WebKitTestRunner/win/InjectedBundleDebugCairoCFLite.vsprops: Added.
        * WebKitTestRunner/win/InjectedBundleRelease.vsprops: Added.
        * WebKitTestRunner/win/InjectedBundleReleaseCairoCFLite.vsprops: Added.
        * WebKitTestRunner/win/InjectedBundleReleaseLTCG.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * WebKitTestRunner/win/WebKitTestRunnerDebug.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerDebugAll.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerDebugCairoCFLite.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerRelease.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerReleaseCairoCFLite.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerReleaseLTCG.vsprops: Added.
        * WinLauncher/WinLauncher.vcproj:
        * WinLauncher/WinLauncherDebug.vsprops: Added.
        * WinLauncher/WinLauncherDebugAll.vsprops: Added.
        * WinLauncher/WinLauncherDebugCairoCFLite.vsprops: Added.
        * WinLauncher/WinLauncherRelease.vsprops: Added.
        * WinLauncher/WinLauncherReleaseCairoCFLite.vsprops: Added.
        * WinLauncher/WinLauncherReleaseLTCG.vsprops: Added.
        * record-memory-win/record-memory-win.vcproj:
        * record-memory-win/record-memory-winDebug.vsprops: Added.
        * record-memory-win/record-memory-winDebugAll.vsprops: Added.
        * record-memory-win/record-memory-winDebugCairoCFLite.vsprops: Added.
        * record-memory-win/record-memory-winRelease.vsprops: Added.
        * record-memory-win/record-memory-winReleaseCairoCFLite.vsprops: Added.
        * record-memory-win/record-memory-winReleaseLTCG.vsprops: Added.

2011-03-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        test_runner2.py can crash due to undefined variable
        https://bugs.webkit.org/show_bug.cgi?id=57356

        Replace reference to undefined variable with a variable that's actually
        defined.  AFAICT, there's no way to test this code.

        * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:

2011-03-29  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        cleanup rebaseline-chromium-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=57375

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
            - Split _extract_and_add_new_baselines into 3 functions
            - Reduce the amount of line wrapping (the file already has lines
              over 80 col, so may as well try to make the file consistent)
            - Remove unnecessary ()s

2011-03-29  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Make WinCairo a core builder.
        https://bugs.webkit.org/show_bug.cgi?id=57373

        * Scripts/webkitpy/common/net/buildbot/buildbot.py: Add WinCairo.
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py: Add WinCairo.

2011-03-29  Timothy Hatcher  <timothy@apple.com>

        Update update-webkit-localizable-strings to understand that WebKit and
        WebKit2 strings go in WebCore.

        Also make extract-localizable-strings optionally use an exclude file. No individual
        warnings are produced about unlocalized strings when there is no exclude file. This
        is needed for WebCore, since there are too many bare strings.

        https://webkit.org/b/57354

        Reviewed by Sam Weinig.

        * Scripts/extract-localizable-strings: Support "-" to mean no exclude file.
        * Scripts/update-webkit-localizable-strings: Update paths to scan WebCore and WebKit2.

2011-03-29  Darin Adler  <darin@apple.com>

        Reviewed by Adam Roben.

        WebKit2 bundle page needs to offer generated file hooks
        https://bugs.webkit.org/show_bug.cgi?id=57279

        (Land missing part of the original patch after r82289.)

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Added new callbacks.

2011-03-29  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] NRWT should be able to read checksums from png comments
        https://bugs.webkit.org/show_bug.cgi?id=57280

        * Scripts/read-checksum-from-png: Added. Utility script to read the checksum
            from a file.
        * Scripts/webkitpy/common/system/filesystem.py: Add open_binary_file_for_reading
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/port/base.py: When loading a checksum,
            if the -checksum.txt file doesn't exist, try looking in the png.
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/read_checksum_from_png.py: Added. Scan the first
            2k for a png comment with the checksum
        * Scripts/webkitpy/layout_tests/read_checksum_from_png_unittest.py: Added.

2011-03-29  Philippe Normand  <pnormand@igalia.com>

        Rubber-stamped by Gustavo Noronha Silva.

        [GTK] http/tests/uri/username-with-no-hostname.html fails
        https://bugs.webkit.org/show_bug.cgi?id=57325

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (willSendRequestCallback): URI host value check done case-insensitively.

2011-03-29  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] http/tests/uri/username-with-no-hostname.html fails
        https://bugs.webkit.org/show_bug.cgi?id=57325

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (willSendRequestCallback): Check URI before submitting the request
        to WebCore.

2011-03-29  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Ojan Vafai.

        [chromium] DRT EventSender: remove identity from dragTargetDragEnter() calls
        https://bugs.webkit.org/show_bug.cgi?id=57303

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::doDragDrop):
        (EventSender::beginDragWithFiles):

2011-03-29  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Add -print-loaded-urls option to Qt's MiniBrowser and to QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=57314

        Provide possibility to print loaded urls to the standard output.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::printURL):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::printURL):
        (LauncherWindow::cloneWindow):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2011-03-29  Gabor Loki  <loki@webkit.org>

        Rubber-stamped by Csaba Osztrogonác.

        [Qt] Teach build-jsc how to build JavaScriptCore on Qt
        https://bugs.webkit.org/show_bug.cgi?id=56918

        * Scripts/build-jsc: Remove duplicated --qt options to avoid passing them to qmake.

2011-03-28  Gabor Loki  <loki@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Teach build-jsc how to build JavaScriptCore on Qt
        https://bugs.webkit.org/show_bug.cgi?id=56918

        * Scripts/build-jsc:
        * Scripts/webkitdirs.pm:

2011-03-28  Andrew Foster  <andrewf@chromium.org>

        Reviewed by Ojan Vafai.

        webkit-patch should be more intelligent about whether a bug applies to a patch
        Create a new function, parse_bug_id_from_changelog() which determines
        that a bug is related to a patch by parsing the output generated from
        prepare-ChangeLog, rather than arbitrarily matching a URL to a bug in
        the description of a patch.
        https://bugs.webkit.org/show_bug.cgi?id=56989

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/net/bugzilla/__init__.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        * Scripts/webkitpy/style/checkers/changelog.py:
        * Scripts/webkitpy/tool/commands/upload.py:

2011-03-28  Maciej Stachowiak  <mjs@apple.com>

        Revert accidentally commited change.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):

2011-03-28  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        [chromium] have DRT write the png checksum into a png comment
        https://bugs.webkit.org/show_bug.cgi?id=57255

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dumpImage):

2011-03-28  Adele Peterson  <adele@apple.com>

        Removing Qt stub, since it doesn't use the same header as the others.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:

2011-03-28  Adele Peterson  <adele@apple.com>

        Added a few more stubs.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::hasGrammarMarker):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::hasGrammarMarker):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::hasGrammarMarker):

2011-03-28  Adele Peterson  <adele@apple.com>

        Build fix.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::hasGrammarMarker):

2011-03-28  Adele Peterson  <adele@apple.com>

        Reviewed by Eric Seidel.

        Testing support for <rdar://problem/9112694> REGRESSION (r79411): "Check grammar with spelling" context menu doesn't check as you type
        https://bugs.webkit.org/show_bug.cgi?id=57173

        * DumpRenderTree/LayoutTestController.cpp:
        (hasGrammarMarkerCallback): Added.
        (LayoutTestController::staticFunctions): Added case for hasGrammarMarker.
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/DumpRenderTree.mm: (createWebViewAndOffscreenWindow): Call setGrammarCheckingEnabled.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm: (LayoutTestController::hasGrammarMarker): Added. Call new hasGrammarMarker method.

2011-03-28  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] QtWebKit will not compile with QT_ASCII_CAST_WARNINGS enabled
        https://bugs.webkit.org/show_bug.cgi?id=57087

        Trivial typo fix after r82082.

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):

2011-03-28  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        Add myself to the committers list.

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

2011-03-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        WebKit2 unfortunately uses code from WebKit, so MiniBrowser needs
        to link against WebKit.framework for now.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:

2011-03-28  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QtWebKit will not compile with QT_ASCII_CAST_WARNINGS enabled
        https://bugs.webkit.org/show_bug.cgi?id=57087

        Disable QT_ASCII_CAST_WARNINGS for applications.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/ImageDiff.pro:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * MiniBrowser/qt/MiniBrowser.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-03-28  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtTestBrowser doesn't reset its window title when opening about:blank
        https://bugs.webkit.org/show_bug.cgi?id=57224

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::buildUI):
        (MainWindow::onTitleChanged):
        * QtTestBrowser/mainwindow.h:

2011-03-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Full Screen: disable keyboard access by default
        https://bugs.webkit.org/show_bug.cgi?id=56684

        Accept the withKeyboard parameter to supportsFullScreenForElement.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:supportsFullScreenForElement:withKeyboard:]):

2011-03-27  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Levin.

        check-webkit-style should check ChangeLog for a valid bug number
        https://bugs.webkit.org/show_bug.cgi?id=57184

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        * Scripts/webkitpy/style/checkers/changelog.py: Added.
        * Scripts/webkitpy/style/checkers/changelog_unittest.py: Added.

2011-03-27  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QtWebKit will not compile with QT_ASCII_CAST_WARNINGS enabled
        https://bugs.webkit.org/show_bug.cgi?id=57087

        Use explicit conversion for string to avoid depending on the default codec
        installed by the user code.

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):

2011-03-26  Maciej Stachowiak  <mjs@apple.com>

        Revert inadvertantly committed changes.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-03-26  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Show page icons (favicons) in QtTestBrowser location bar.
        https://bugs.webkit.org/show_bug.cgi?id=57162

        * QtTestBrowser/QtTestBrowser.qrc:
        * QtTestBrowser/favicon.png: Added.
        * QtTestBrowser/locationedit.cpp:
        (defaultPageIcon):
        (LocationEdit::LocationEdit):
        (LocationEdit::setPageIcon):
        (LocationEdit::resizeEvent):
        (LocationEdit::updateInternalGeometry):
        * QtTestBrowser/locationedit.h:
        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::buildUI):
        (MainWindow::onIconChanged):
        (MainWindow::onLoadStarted):
        * QtTestBrowser/mainwindow.h:

2011-03-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Force DumpRenderTree to use 96 DPI
        https://bugs.webkit.org/show_bug.cgi?id=56866

        Make sure that GTK+ is set to use 96 DPI when running tests. This ensures
        broader compatibility with WebKit2 and makes setting font sizes more straightforward.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeGtkFontSettings): Set the screen resolution and GTK+ xft property to 96 DPI.
        (resetDefaultsToConsistentValues):Remove the call which repeatedly set the GDK screen resolution.
        (setDefaultsToConsistentStateValuesForTesting): Update the font sizes to reflect the new DPI.

2011-03-25  Andy Estes  <aestes@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (r70748): latest nightly builds kills AC_QuickTime.js
        https://bugs.webkit.org/show_bug.cgi?id=49016

        TestNetscapePlugIn needs to register support for an image MIME type so
        we can test that the embed tag prefers plug-ins to render image MIME
        types.

        * DumpRenderTree/TestNetscapePlugIn/mac/Info.plist: Register image/png.
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NP_GetMIMEDescription): Ditto.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.rc: Ditto.

2011-03-25  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Need to be able to set and get the Cookie Storage Policy.
        https://bugs.webkit.org/show_bug.cgi?id=50780

        Add a test for getting and setting the HTTP Cookie Accept Policy in WebKit2.

        The test is named "CookieManager" so that we can eventually exercise more of the
        CookieManager functionality in the test.

        * TestWebKitAPI/Tests/WebKit2/CookieManager.cpp: Added.
        (TestWebKitAPI::didGetTestHTTPCookieAcceptPolicy):
        Assert that the policy returned is equal to the policy set in
        didGetUserHTTPCookieAcceptPolicy, and then restore the user's policy.
        (TestWebKitAPI::didGetUserHTTPCookieAcceptPolicy):
        Set the policy to something different than the user's policy and get the policy again.
        (TestWebKitAPI::didFinishLoadForFrame):
        Get the user's policy so that it can be restored at the end of the test.
        (TestWebKitAPI::TEST):
        Load about:blank so that the Web Process gets instatiated (needed to get the
        CookieManager).

        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Add CookieManager.cpp.

2011-03-24  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Fix the build so that gcc-4.1 and up can be used to build on SnowLeopard.

        * wx/build/settings.py:

2011-03-24  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Adam Roben.

        Implement layoutTestController.setAutoFilled in DRT on Windows
        https://bugs.webkit.org/show_bug.cgi?id=56828

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setAutofilled): Implemented.

2011-03-24  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        Correct vsprops file for Debug variant of the CFLite build.
        Disable a CFNETWORK-specific test when building for CFLite.

        * TestWebKitAPI/Configurations/TestWebKitAPIDebugCairoCFLite.vsprops:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2011-03-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        fix regressions introduced in 81908 - there were a couple of
        code paths that only fired under python 2.5 that I missed.

        Also change a couple of 'python' references to sys.executable
        in order to handle runing test-webkitpy with a binary other than
        something called 'python'.

        https://bugs.webkit.org/show_bug.cgi?id=57063

        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/test/cat.py:
        * Scripts/webkitpy/test/echo.py:

2011-03-24  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        Add a stub implementation of the TestInvocation dumping logic.
        Update project files to reflect new file.

        * WebKitTestRunner/cairo: Added.
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp: Added.
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:

2011-03-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: clean up worker model defaults. This
        changes the default behavior to 'threads' instead of
        'old-threads', and clarifies that chromium-win-* and
        chromium-mac-leopard are exceptions.

        https://bugs.webkit.org/show_bug.cgi?id=56971

        * Scripts/webkitpy/layout_tests/port/base.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/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-03-23  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Darin Adler.

        Media Stream API: fix the order of the options in build-webkit.
        https://bugs.webkit.org/show_bug.cgi?id=56949

        Fix the order of the options in build-webkit.

        * Scripts/build-webkit:

2011-03-23  Adam Klein  <adamk@chromium.org>

        Reviewed by Mihai Parparita.

        Add an option to new-run-webkit-httpd to allow overriding the location of LayoutTests directory
        https://bugs.webkit.org/show_bug.cgi?id=56884

        This option will be utilized by Chromium's ui_tests to allow
        referencing js-test-resources from a layout test over HTTP.

        * Scripts/new-run-webkit-httpd:
        Added --layout_tests_dir option.
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        Plumbed through as layout_tests_dir param.

2011-03-23  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        new-run-webkit-tests: run tests in ascending alphabetical order per
        dir. This is a second attempt at the fix; the first attempt, in 
        r81597, broke the behavior on the old-inline and old-threads
        worker models.

        https://bugs.webkit.org/show_bug.cgi?id=56760

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-03-23  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] GTK's DRT to ouput detail's string for the 'property-change' signal
        https://bugs.webkit.org/show_bug.cgi?id=56953

        Print the string for the detail of 'property-change' signal.

        * DumpRenderTree/gtk/AccessibilityCallbacks.cpp:
        (axObjectEventListener): Print the detail string.

2011-03-23  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [V8] Web Inspector: compile DebuggerScript.js into DebuggerScriptSource.h
        https://bugs.webkit.org/show_bug.cgi?id=56843

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:

2011-03-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach update-webkit about gyp
        https://bugs.webkit.org/show_bug.cgi?id=56881

        This makes it possible for someone who builds from Xcode
        to just run update-webkit --gyp and have the project files
        generated after update automatically.

        I also added a stand-alone "generate-project-files" script
        wrapping Source/gyp/configure.  This makes running gyp simpler
        since most people will not have gyp or Source/gyp in their path.

        * Scripts/build-webkit:
        * Scripts/generate-project-files: Added.
        * Scripts/update-webkit:

2011-03-22  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add +[WebApplicationCache getOriginsWithCache]
        https://bugs.webkit.org/show_bug.cgi?id=56722

        * DumpRenderTree/LayoutTestController.cpp:
        (originsWithApplicationCacheCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp: Added stub.
        (LayoutTestController::originsWithApplicationCache):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Added stub.
        (LayoutTestController::originsWithApplicationCache):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Pass array of origin's database identifiers.
        (originsArrayToJS): Helper function for converting array of WebSecurityOrigins to a JS array of origin identifiers.
        (LayoutTestController::originsWithApplicationCache):
        (LayoutTestController::originsWithLocalStorage):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp: Added stub.
        (LayoutTestController::originsWithApplicationCache):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Added stub.
        (LayoutTestController::originsWithApplicationCache):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp: Added stub.
        (LayoutTestController::originsWithApplicationCache):

2011-03-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add support to build-webkit for building with gyp-generated project files
        https://bugs.webkit.org/show_bug.cgi?id=56877

        build-webkit is a cesspool.  This change just hacks in --gyp support for Mac.
        Eventually we'll want to support gyp-generated projects in a more general manner.

        * Scripts/build-webkit:

2011-03-22  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/56781> Add --dsym switch to enable dsym generation when building with Xcode

        Reviewed by Joseph Pecoraro.

        * Scripts/build-webkit: Updated usage statement to include
        --dsym.
        * Scripts/webkitdirs.pm: Added $generateDsym variable.
        (generateDsym): Added. Call determineGenerateDsym() and
        return $generateDsym.
        (determineGenerateDsym): Added.  Parse @ARGV for --dsym and set
        $generateDsym.
        (argumentsForXcode): Added.  Returns additional arguments for
        xcodebuild based on command-line switches.
        (XcodeOptions): Updated to include argumentsForXcode() in the
        array returned.

2011-03-22  Adam Roben  <aroben@apple.com>

        Make Leopard Debug bots and Windows XP Debug (Tests) core builders

        These bots are consistently green again.

        Fixes <http://webkit.org/b/56830> Leopard Debug bots and Windows XP Debug (Tests) should be
        core builders

        Rubber-stamped by Antti Koivisto.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot.__init__): Loosened the regexps for Leopard and Windows.

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (BuildBotTest.test_builder_name_regexps): Updated expectations.

2011-03-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81597.
        http://trac.webkit.org/changeset/81597
        https://bugs.webkit.org/show_bug.cgi?id=56801

        Change results in lots of unexpected flaky on the dashboard.
        (Requested by pfeldman on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-03-21  Sam Weinig  <sam@webkit.org>

        Fix failing tests on the WebKit2 bots.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2011-03-21  Daniel Sievers  <sievers@google.com>

        Reviewed by Simon Fraser.

        [Chromium] Make RenderAsTextBehavior and LayerTreeAsTextBehavior tweakable from the DumpRenderTree commandline
        https://bugs.webkit.org/show_bug.cgi?id=56139

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::layerTreeAsText):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::setShowDebugLayerTree):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):
        (TestShell::dump):
        * DumpRenderTree/chromium/TestShell.h:
        (TestParams::TestParams):

2011-03-21  Adam Roben  <aroben@apple.com>

        Try again to get buildbot to show run-javascriptcore-tests's actual.html as an HTML file

        Fixes <http://webkit.org/b/56746> build.webkit.org shows run-javascriptcore-tests's HTML
        output as plain text

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests): List actual.html as one of our log files so it will get uploaded
        to the master.
        (RunJavaScriptCoreTests.commandComplete): Reading the actual.html file here won't work,
        since we're running on the build master, not the slave. Instead, turn the raw source of
        actual.html which the build slave uploaded into an HTML log.

2011-03-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        new-run-webkit-tests: run tests in ascending alphabetical order per dir
        https://bugs.webkit.org/show_bug.cgi?id=56760

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:

2011-03-21  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Steve Block.

        Media Stream API patch 0: adding compilation guards.
        https://bugs.webkit.org/show_bug.cgi?id=56458

        Adding options to enable the media stream API feature in Chromium.

        * Scripts/build-webkit:

2011-03-21  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Add a command line option to capture stdout and stderr for DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=56323

        Using freopen to redirect STDOUT and STDERR when DumpRenderTree command line provide 
        "--stdout" or "--stderr" option.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::~DumpRenderTree):
        (WebCore::DumpRenderTree::processArgsLine):
        (WebCore::DumpRenderTree::loadNextTestInStandAloneMode):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (WebCore::DumpRenderTree::setRedirectOutputFileName):
        (WebCore::DumpRenderTree::setRedirectErrorFileName):
        * DumpRenderTree/qt/main.cpp:
        (isOption):
        (takeOptionValue):
        (printUsage):
        (main):

2011-03-21  Adam Roben  <aroben@apple.com>

        Fix exceptions on the buildbot due to my last change

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests.commandComplete): Catch exceptions due to actual.html not existing.

2011-03-21  Adam Roben  <aroben@apple.com>

        Teach buildbot to treat run-javascriptcore-tests's actual.html as an HTML file

        Fixes <http://webkit.org/b/56746> build.webkit.org shows run-javascriptcore-tests's HTML
        output as plain text

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests): Removed the logfiles variable, which can only handle plaintext
        logs.
        (RunJavaScriptCoreTests.commandComplete): Use the addHTMLLog method to upload actual.html to
        the build master. This will correctly treat it as HTML.

2011-03-20  Bill Budge  <bbudge@chromium.org>

        Reviewed by Adam Barth.

        Rename ThreadSafeShared to ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=56714

        No new tests. Exposes no new functionality.

        * DumpRenderTree/ForwardingHeaders/wtf/ThreadSafeRefCounted.h: Copied from DumpRenderTree/ForwardingHeaders/wtf/ThreadSafeShared.h.
        * DumpRenderTree/ForwardingHeaders/wtf/ThreadSafeShared.h: Removed.
        * Scripts/do-webcore-rename:

2011-03-19  Anton D'Auria  <adauria@apple.com>

        Reviewed by Dan Bernstein.

        Add stub to LayoutTestControllerGtk.cpp to fix GTK build
        https://bugs.webkit.org/show_bug.cgi?id=56719

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Adding stub.
        (LayoutTestController::clearApplicationCacheForOrigin):

2011-03-19  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        ApplicationCacheGroup is not obsolete after being deleted via ApplicationCacheStorage::deleteEntriesForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=56415

        * DumpRenderTree/LayoutTestController.cpp:
        (clearApplicationCacheForOriginCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp: Adding stubs.
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::clearApplicationCacheForOrigin): 
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Adding stub.
        (LayoutTestController::clearApplicationCacheForOrigin):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp: Adding stub.
        (LayoutTestController::clearApplicationCacheForOrigin):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Adding stub.
        (LayoutTestController::clearApplicationCacheForOrigin):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp: Adding stub.
        (LayoutTestController::clearApplicationCacheForOrigin):

2011-03-18  Dan Bernstein  <mitz@apple.com>

        Revised build fix for r81135.

        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2011-03-18  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebKitTestRunner/config.h: Add a missing #endif.

2011-03-18  Andreas Kling  <kling@webkit.org>

        Unbreak Qt build after r81494.

        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2011-03-18  Sam Weinig  <sam@webkit.org>

        Fix windows build. This was really Adam Roben's fault. I swear!

        * WebKitTestRunner/config.h:

2011-03-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Pixel tests don't work in WebKitTestRunner on Windows
        https://bugs.webkit.org/show_bug.cgi?id=56630

        Cross-platformize (Mac and Windows CG) the pixel dumping code in WebKitTestRunner to use WebKit2
        built-in snapshotting instead of using the window server on the Mac.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::InjectedBundle):
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::beginTesting):
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::setPixelResult):
        (WTR::InjectedBundle::shouldDumpPixels):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):
        Take the snapshot in the bundle and send it to the UIProcess for dumping.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::dump):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cg: Added.
        * WebKitTestRunner/cg/TestInvocationCG.cpp: Copied from WebKitTestRunner/mac/TestInvocationMac.mm.
        (WTR::createCGContextFromImage):
        (WTR::computeMD5HashStringForContext):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/mac/TestInvocationMac.mm: Removed.
        Making pixel dumping code shared for CG ports. Also use the WTF/MD5 instead of platform specific code.

        * WebKitTestRunner/win/TestInvocationWin.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        Keep stub for Cairo build.

        * WebKitTestRunner/Configurations/WebKitTestRunnerCoreGraphics.vsprops: Added.
        Add CG configuration.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        Add new files.

2011-03-18  Adam Roben  <aroben@apple.com>

        Don't allow Leaks Viewer's vertical scrollbar to cover up long function names

        Rubber-stamped by Simon Fraser.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.css:
        (.data-grid .data-container): Use overflow-y:auto instead of the Inspector's default
        overflow-y:overlay so that the scrollbar doesn't overlay the content.

2011-03-18  Adam Roben  <aroben@apple.com>

        Don't ellipsize long or indented function names in Leaks Viewer

        Fixes <http://webkit.org/b/56037> Leaks viewer needs horizontal
        scrollbar

        Reviewed by Simon Fraser.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.css:
        (.data-grid .data-container):
        (.data-grid td > div, .data-grid th > div):
        Allow the contents to extend to the right.

2011-03-18  Adam Roben  <aroben@apple.com>

        Fix some leaks in DRT seen on the leaks bot

        Fixes <http://webkit.org/b/56638> addURLToRedirectCallback and
        setWillSendRequestClearHeaderCallback in DRT are leaky

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/ForwardingHeaders/wtf/OwnArrayPtr.h: Added.

        * DumpRenderTree/LayoutTestController.cpp:
        (addURLToRedirectCallback):
        (setWillSendRequestClearHeaderCallback):
        Use OwnArrayPtr to cause the strings to be deleted.

2011-03-18  Adam Roben  <aroben@apple.com>

        Fix a NSURLCredential leak seen on the leaks bot

        Fixes <http://webkit.org/b/56637> -[SynchronousLoader
        connection:didReceiveAuthenticationChallenge:] is leaky

        Reviewed by John Sullivan.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (-[SynchronousLoader connection:didReceiveAuthenticationChallenge:]): Use a RetainPtr to
        cause the NSURLCredential to be released.

2011-03-18  John Knottenbelt  <jknotten@chromium.org>

        Unreviewed.

        Remove unnecessary brackets around my email address.

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

2011-03-18  Adam Roben  <aroben@apple.com>
        
        Remove some files I accidentally added in r81454

        * WebKitTestRunner/Configurations/WebKitTestRunnerCoreGraphics.vsprops: Removed.
        * WebKitTestRunner/cg/TestInvocationCG.cpp: Removed.

2011-03-18  Adam Roben  <aroben@apple.com>

        Ignore an NSNumberFormatter leak on SnowLeopard

        * Scripts/old-run-webkit-tests:
        (countAndPrintLeaks): Ignore leaks in -[NSNumberFormatter
        getObjectValue:forString:errorDescription:].

2011-03-18  Adam Roben  <aroben@apple.com>

        Fix a leak beneath LayoutTestController::authenticateSession seen on the bots

        Rubber-stamped by Mark Rowe.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::authenticateSession): Use a RetainPtr to cause the NSURLRequest to be
        released.

2011-03-17  Adam Roben  <aroben@apple.com>

        Address a review comment I missed in r81445

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParserWorker.js:
        (LeaksParserWorker.prototype._parseLeaks): Anchor the RegExp used to find the number of
        leaked bytes to speed up searching on long lines.

2011-03-17  Adam Roben  <aroben@apple.com>

        Mark leaky builds orange, even if all regression tests passed

        Fixes <http://webkit.org/b/56609> SnowLeopard Intel Leaks bot appears green on
        build.webkit.org when all tests pass even though there are still leaks

        Reviewed by Dan Bernstein.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitLeakTests): Set the warnOnWarnings property to True so that the entire build will
        be marked orange if this build step generates warnings.

2011-03-17  Adam Roben  <aroben@apple.com>

        Allow values in Leaks Viewer to be shown as percentages

        Double-clicking on a column will toggle between showing percentages and showing real values.

        Fixes <http://webkit.org/b/56628> Would like to view values as percentages of the total
        number of leaked bytes in Leaks Viewer

        Reviewed by Joe Pecoraro.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParserWorker.js:
        (LeaksParserWorker.prototype._incorporateLeaks): Calculate the (never-shown) top-level
        node's totalTime, which is used in calculating percentages.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/WebInspectorShims.js:
        (monkeyPatchInspectorObjects): Only format values as bytes if we aren't supposed to be
        showing them as percentages.

2011-03-17  Adam Roben  <aroben@apple.com>

        Show the number of leaked bytes, not just leaked allocations, in Leaks Viewer

        The Self and Total columns now report the number of leaked bytes. The new Calls column shows
        the number of leaked allocations. And the new Average column shows the average number of
        leaked bytes per call.

        Fixes <http://webkit.org/b/56344> Leaks Viewer should show how many bytes were leaked, not
        just how many allocations

        Reviewed by Joe Pecoraro.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParserWorker.js:
        (LeaksParserWorker.prototype._parseLeaks): Parse the number of leaked bytes from the "Leak:"
        line and store it with the leak stack.
        (LeaksParserWorker.prototype._createNode): Initialize the averageTime and numberOfCalls
        properties.
        (LeaksParserWorker.prototype._incorporateLeaks): Updated to get the stack from the .stack
        property, and changed to store the number of leaked bytes in .selfTime/.totalTime.
        .numberOfCalls now holds the number of leaked allocations.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/WebInspectorShims.js:
        (Preferences): Set samplingCPUProfiler to false so that the Average and Calls columns will
        appear.
        (monkeyPatchInspectorObjects): Format the values as bytes.

2011-03-17  Adam Roben  <aroben@apple.com>

        Make Leaks Viewer able to count leaks in builds that didn't fail any regression tests

        Fixes <http://webkit.org/b/56626> Leaks Viewer omits recent builds which didn't fail any
        regression tests

        Reviewed by James Robinson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js:
        (RecentBuildsLoader.prototype.start): Get the number of leaks out of the "text" array, which
        is always populated, even when all regression tests pass.

2011-03-10  Hayato Ito  <hayato@chromium.org>

        Reviewed by Tony Chang.

        Add a check logic for reftests in case that a reftest is marked AS REBASELINE.

        https://bugs.webkit.org/show_bug.cgi?id=56076

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-03-17  Adam Roben  <aroben@apple.com>

        Skip a compositing-sensitive test when accelerated compositing is disabled

        Reviewed by Sam Weinig.

        * Scripts/old-run-webkit-tests: Skip media/media-document-audio-repaint.html when
        accelerated compositing is disabled.

2011-03-17  Adam Roben  <aroben@apple.com>

        Start using PlatformSpecificScheduler for the Mac builders

        The current set of file/directory patterns should work for Mac builders. We may discover
        that there are more files and directories we can exclude from the Mac builds, but they can
        be added later.

        Fixes <http://webkit.org/b/56593> Mac builders do lots of unnecessary builds

        Reviewed by Mark Rowe.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Moved the Mac builders into two
        PlatformSpecificSchedulers: one for Leopard, and one for SnowLeopard.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build): Allow "mac-leopard" and "mac-snowleopard" platforms, and
        cleaned up patterns a little bit.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest): Fixed some expected results.
        (ShouldBuildTest.test_should_build): Start testing "mac-leopard" and "mac-snowleopard"
        platforms.

2011-03-17  Jeff Miller  <jeffm@apple.com>

        Use a consistent set of file patterns in the svn:ignore property for all .xcodeproj directories, specifically:
        
        *.mode*
        *.pbxuser
        *.perspective*
        project.xcworkspace
        xcuserdata

        * DumpRenderTree/DumpRenderTree.xcodeproj: Modified property svn:ignore.
        * MiniBrowser/MiniBrowser.xcodeproj: Modified property svn:ignore.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj: Modified property svn:ignore.
        * WebKitLauncher/WebKitLauncher.xcodeproj: Modified property svn:ignore.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj: Modified property svn:ignore.

2011-03-17  Adam Roben  <aroben@apple.com>

        Make old-run-webkit-tests pick up mac-wk2 results when running in WebKit2 mode on Windows

        Fixes <http://webkit.org/b/56563> Running WebKit2 tests on Windows should use results from
        mac-wk2

        Reviewed by Anders Carlsson.

        * Scripts/old-run-webkit-tests:
        (expectedDirectoryForTest): Clean up the code to search in extra Mac platform result
        directories on Windows. Add mac-wk2 to the set of extra platforms we look in on Windows when
        we're running in WebKit2 mode.

2011-03-17  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Clean up Inspector strings.
        https://bugs.webkit.org/show_bug.cgi?id=56557

        Modify the script to deal correctly with "\xNN" escapes, and to
        check strings in Chromium's DevTools.js.

        * Scripts/check-inspector-strings:

2011-03-17  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Benjamin Poulain.

        Update autoinstall to install mechanize 0.2.4
        https://bugs.webkit.org/show_bug.cgi?id=56499

        Newer versions of mechanize support HTTPS proxies, which is necessary
        for people using webkit-patch behind firewalls.

        * Scripts/webkitpy/common/system/autoinstall.py:
        * Scripts/webkitpy/thirdparty/__init__.py:

2011-03-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        REGRESSION (r81084): media/invalid-media-url-crash.html and editing/execCommand/indent-paragraphs.html failing on WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=56541

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        Check for an empty host in addition to a null host.  This bug was introduced
        when porting off of the KURL code and onto the WKURLRef version.

2011-03-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add Lucas Forschler to the list of WebKit committers.

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

2011-03-16  Sam Weinig  <sam@webkit.org>

        Reviewed upon and dictated through Adam Roben.

        Escape crashing function names in results.html. This fixes an issue
        when a crash involves a type with templates.

        * Scripts/old-run-webkit-tests:

2011-03-16  Daniel Sievers  <sievers@google.com>

        Reviewed by James Robinson.

        Add setting to always force compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=56156

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setForceCompositingMode):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:

2011-03-15  Hayato Ito  <hayato@chromium.org>

        Reviewed by Ojan Vafai.

        Ignore files that will be used by reftests in old-run-webkit-tests.

        https://bugs.webkit.org/show_bug.cgi?id=55936

        * Scripts/old-run-webkit-tests:

2011-03-15  Felipe Oliveira da Silva Netto  <f.dachshund@gmail.com>

        Reviewed by Adam Roben.

        Function relativeScriptsDir doesn't return the correct relative
        Scripts directory.

        * Scripts/webkitdirs.pm:
        (relativeScriptsDir): Ensure we use the directory that contains
        webkitdirs.pm, not the one that contains the original script that
        was invoked.

2011-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes for long linker commands on Win and method return error, plus a Mac
        fix to link against the Security framework after recent WebKitSystemInterface changes.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::originsWithLocalStorage):
        * wx/build/settings.py:
        * wx/build/waf_extensions.py:

2011-03-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add script to convert a patch to a prettypatch and show in the default browser
        https://bugs.webkit.org/show_bug.cgi?id=56416

        This can be used either like
            $ svn-create-patch | show-pretty-diff
        or
            $ show-pretty-diff patch.diff

        * Scripts/show-pretty-diff: Added.

2011-03-15  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Adam Roben.

        Adding myself as a reviewer.

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

2011-03-15  Anders Carlsson  <andersca@apple.com>

        Try to fix the Windows build.

        * DumpRenderTree/TestNetscapePlugIn/Tests/NPDeallocateCalledBeforeNPShutdown.cpp:
        (NPDeallocateCalledBeforeNPShutdown::TestObject::~TestObject):

2011-03-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make sure that NP_Shutdown is always the last NPP function called
        https://bugs.webkit.org/show_bug.cgi?id=56391

        Add a test that times out if an NP_Deallocate object is called after NP_Shutdown.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::PluginTest):
        (PluginTest::NP_Shutdown):
        (PluginTest::registerNPShutdownFunction):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        * DumpRenderTree/TestNetscapePlugIn/Tests/NPDeallocateCalledBeforeNPShutdown.cpp: Added.
        (NPDeallocateCalledBeforeNPShutdown::NPDeallocateCalledBeforeNPShutdown):
        (NPDeallocateCalledBeforeNPShutdown::TestObject::~TestObject):
        (NPDeallocateCalledBeforeNPShutdown::ScriptableObject::hasProperty):
        (NPDeallocateCalledBeforeNPShutdown::ScriptableObject::getProperty):
        (NPDeallocateCalledBeforeNPShutdown::NPP_New):
        (NPDeallocateCalledBeforeNPShutdown::NPP_GetValue):
        (NPDeallocateCalledBeforeNPShutdown::shutdown):
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NP_Shutdown):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:

2011-03-15  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Tony Chang.

        Autofilled form elements are assigned fixed background color but not text color
        https://bugs.webkit.org/show_bug.cgi?id=48382

        * DumpRenderTree/LayoutTestController.cpp:
        (setAutofilledCallback): Added.
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setAutofilled): Added.
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setAutofilled): Added.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setAutofilled): Added.
        (LayoutTestController::setValueForUser): Style tweak.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setAutofilled): Added (stub).
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setAutofilled): Added (stub).

2011-03-15  Dan Bernstein  <mitz@apple.com>

        Build fix after r81135.

        * TestWebKitAPI/Configurations/InjectedBundle.xcconfig:

2011-03-15  Dan Bernstein  <mitz@apple.com>

        Build fix after r81135.

        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        * WebKitTestRunner/mac/TestControllerMac.mm:
        * WebKitTestRunner/mac/TestInvocationMac.mm:
        * WebKitTestRunner/mac/main.mm:

2011-03-15  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Adam Barth.

        REGRESSION(80977): breaks Qt ARMv7 Linux Release bot
        https://bugs.webkit.org/show_bug.cgi?id=56349

        * QtTestBrowser/QtTestBrowser.pro: Link against fontconfig
        on platforms where we use it. Copied from DumpRenderTree.pro.

2011-03-15  Dan Bernstein  <mitz@apple.com>

        Build fix after r81135.

        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp:
        * DumpRenderTree/mac/WebArchiveDumpSupportMac.mm:

2011-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Introduce WTF_USE_EXPORT_MACROS, which will allow us to put shared library import/export
        info into the headers rather than in export symbol definition files, but disable it on 
        all platforms initially so we can deal with port build issues one port at a time.
        
        https://bugs.webkit.org/show_bug.cgi?id=27551

        * DumpRenderTree/cg/ImageDiffCG.cpp:
        * DumpRenderTree/chromium/config.h:
        * DumpRenderTree/config.h:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        * TestWebKitAPI/TestWebKitAPIPrefix.h:
        * WebKitAPITest/HostWindow.cpp:
        * WebKitAPITest/TestsController.cpp:
        * WebKitAPITest/config.h: Added.
        * WebKitAPITest/main.cpp:
        * WebKitAPITest/tests/WebViewDestruction.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.cpp:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        * WebKitTestRunner/InjectedBundle/GCController.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:
        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp:
        * WebKitTestRunner/InjectedBundle/win/ActivateFonts.cpp:
        * WebKitTestRunner/InjectedBundle/win/InjectedBundleWin.cpp:
        * WebKitTestRunner/InjectedBundle/win/LayoutTestControllerWin.cpp:
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/TestInvocation.cpp:
        * WebKitTestRunner/config.h: Added.
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        * WebKitTestRunner/qt/TestControllerQt.cpp:
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        * WebKitTestRunner/qt/main.cpp:
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        * WebKitTestRunner/win/TestControllerWin.cpp:
        * WebKitTestRunner/win/TestInvocationWin.cpp:
        * WebKitTestRunner/win/main.cpp:
        * wx/build/settings.py:

2011-03-15  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        [NRWT] Add support for reftests to new-run-webkit-tests.

        https://bugs.webkit.org/show_bug.cgi?id=55457

        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/test_files.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-03-15  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix compilation warning after r80892
        https://bugs.webkit.org/show_bug.cgi?id=56302

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::originsWithLocalStorage):

2011-03-15  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Barth.

        Document the qmakearg argument, and hint how to build webkit2 on Qt
        https://bugs.webkit.org/show_bug.cgi?id=56326

        * Scripts/build-webkit: add --qmakearg to build-webkit --help

2011-03-15  Adam Roben  <aroben@apple.com>

        Make Windows 7 Release (Tests) a core builder

        We can probably make Windows XP Debug (Tests) a core builder, too, but we should probably
        give it a few more days of greenness first.

        Fixes <http://webkit.org/b/55665> Windows 7 Release (Tests) should be a core builder

        Reviewed by Sam Weinig.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot): Added a regexp to match Windows 7 Release (Tests).

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (BuildBotTest): Updated the list of builders to match the current list on build.webkit.org.
        Updated the core regexps to match the buildbot module. Updated the expected results to match
        the current set of core builders.

2011-03-14  Adam Roben  <aroben@apple.com>

        Add forgotten file from r81116

        * TestWebKitAPI/Configurations/TestWebKitAPICFNetwork.vsprops: Added.

2011-03-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        about:blank fake responses don't get serialized when sent the UIProcess
        <rdar://problem/9108119>
        https://bugs.webkit.org/show_bug.cgi?id=56357

        * TestWebKitAPI/Tests/WebKit2/AboutBlankLoad.cpp: Added.
        (TestWebKitAPI::decidePolicyForResponse):
        (TestWebKitAPI::TEST):
        Add test that loads of about:blank have a response with a MIMEType of text/html.

        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::MIMETypeForWKURLResponse):
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::MIMETypeForWKURLResponse):
        Add helper to get the MIMEType from a WKURLResponse.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Add new files.

2011-03-14  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Command-line options for QGLWidget and WebGL to QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=56006

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2011-03-14  James Kozianski  <koz@chromium.org>

        Reviewed by Ojan Vafai.

        Add method to make BuildBot return test outputs
        https://bugs.webkit.org/show_bug.cgi?id=54374

        The Builder.latest_cached_build will be used by the new rebaseline
        script to determine the build to use baselines from.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-03-14  Adam Roben  <aroben@apple.com>

        Test that WKBundlePageCanHandleRequest returns true for empty document URLs

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest.cpp: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle): Store the result of the test.
        (TestWebKitAPI::setInjectedBundleClient): Hook up our callback.
        (TestWebKitAPI::TEST): Register "emptyscheme" as an empty document scheme, load a page to
        ensure the web process is initialized, then ask the bundle to run the test and assert that
        it succeeded.

        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest_Bundle.cpp: Added.
        (TestWebKitAPI::CanHandleRequestTest::CanHandleRequestTest): Just call up to the base class.
        (TestWebKitAPI::canHandleURL): Helper function to test whether WebKit2 claims to be able to
        handle a given URL.
        (TestWebKitAPI::runTest): Check that empty document URLs can be handled (and that an unknown
        URL type cannot be handled).
        (TestWebKitAPI::CanHandleRequestTest::didReceiveMessage): Run the test and return the
        result.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj:
        Added new files to the project.

2011-03-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81094.
        http://trac.webkit.org/changeset/81094
        https://bugs.webkit.org/show_bug.cgi?id=56355

        Broke the chromium DRT related build. (Requested by dave_levin
        on #webkit).

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::layerTreeAsText):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):
        (TestShell::dump):
        * DumpRenderTree/chromium/TestShell.h:
        (TestParams::TestParams):

2011-03-14  Daniel Sievers  <sievers@google.com>

        Reviewed by Simon Fraser.

        [Chromium] Make RenderAsTextBehavior and LayerTreeAsTextBehavior tweakable from the DumpRenderTree commandline
        https://bugs.webkit.org/show_bug.cgi?id=56139

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::layerTreeAsText):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::setShowDebugLayerTree):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):
        (TestShell::dump):
        * DumpRenderTree/chromium/TestShell.h:
        (TestParams::TestParams):

2011-03-14  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Adam Roben.

        [Qt][WK2]Unbreak InjectedBundle on Qt
        https://bugs.webkit.org/show_bug.cgi?id=54109

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame): Use new WebKit2
        API's instead of KURL to analyze the URL.
        * WebKitTestRunner/StringFunctions.h:
        (WTR::adoptWK): Moved from InjectedBundlePage.cpp to make it available globally
        in the WebKitTestRunner project.
        (WTR::toWK): Use adoptWK.
        (WTR::operator<<): Added helper for printing a WKURL.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Do not link
        against WebCore.

2011-03-14  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        check-webkit-style falsely should not complain about WebKit2 API headers in the Shared directory
        https://bugs.webkit.org/show_bug.cgi?id=56321

        * Scripts/webkitpy/style/checker.py: Add the patch "Source/WebKit2/Shared/API/c"
        to the list of exceptions for WebKit2 C API headers.

2011-03-14  Adam Roben  <aroben@apple.com>

        Show the list of recent leaky builds in reverse chronological order

        Previously they were being shown in a deterministic but surprising order based on
        lexicographically sorting the build offsets (-1, -10, -2, -3...).

        Fixes <http://webkit.org/b/56342> Leaks Viewer shows recent builds in a strange order

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js:
        (RecentBuildsLoader.prototype.start): Sort the builds by revision before passing them to our
        callback.

2011-03-14  Adam Roben  <aroben@apple.com>

        Show a list of up to 10 recent leaky builds when Leaks Viewer loads

        Fixes <http://webkit.org/b/56043> Leaks Viewer should present a list of recent builds to
        analyze

        Reviewed by David Kilzer and Joe Pecoraro.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.css:
        (#url-prompt): Made this a bit taller to make room for the list of builds.

        (#recent-builds-loading-indicator):
        (#recent-builds-list):
        Added styles for the build list and loading indicator.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.js:
        (LeaksViewer.loaded): Pass the URL from the query through decodeURIComponent before loading
        it. This will unescape it.
        (LeaksViewer.urlPromptButtonClicked): Moved code from here to _urlChosenFromPrompt.
        (LeaksViewer._didLoadRecentBuilds): Added. Stores the builds and updates the prompt.
        (LeaksViewer._displayURLPrompt): Start loading the recent leaky builds.
        (LeaksViewer._updateURLPrompt): Create a list of the recent leaky builds and add them to the
        prompt UI.
        (LeaksViewer._urlChosenFromPrompt): Added. Code came from urlPromptButtonClicked. This is
        now also used when a recent build is clicked.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js: Added.
        (RecentBuildsLoader): Store the callback.
        (RecentBuildsLoader.prototype.start): Load the N most recent builds from the specified
        builder. Find the revision number, leak count, and results URL for each one. Pass the
        resulting info to our callback.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/Utilities.js:
        (range): Added this helper function to return an array containing the integers [0, n).

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/index.html: Added
        RecentBuildsLoader.js and added text to the prompt UI to show the recent builds.

2011-03-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adam Roben.

        Fix two memory leaks within LayoutTestController's storage support.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::originsWithLocalStorage): Don't leak the JSStringRef that is returned
        by JSStringCreateWithCFString.
        (LayoutTestController::deleteLocalStorageForOrigin): Don't leak the WebSecurityOrigin that we
        allocate.

2011-03-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        <http://webkit.org/b/56304> REGRESSION(r80892): 100,000+ leaks seen on the build bot

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions): Remove duplicate entries.

2011-03-14  Alice Liu  <alice.liu@apple.com>

        Reviewed by Dan Bernstein.

        DumpRenderTree Perl Support fails to build with ARCHS="i386 x86_64"

        * DumpRenderTree/mac/PerlSupport/Makefile:
        Add whitespace when joining "-arch" with the architectures passed in as arguments.

2011-03-14  Daniel Bates  <dbates@rim.com>

        https://bugs.webkit.org/show_bug.cgi?id=55438
        Add double quotes around value of -DCMAKE_WINCE_SDK that I inadvertently did not add
        when landing changeset 81041 <http://trac.webkit.org/changeset/81041>.

        * Scripts/build-webkit:

2011-03-14  Daniel Bates  <dbates@rim.com>

        Reviewed by David Kilzer.

        Cleanup: Separate port-specific implementation details from webkitdirs::buildCMakeProject()
        https://bugs.webkit.org/show_bug.cgi?id=55438

        Separate out the EFL- and WinCE-specific logic from the port-independent logic in
        webkitdirs::buildCMakeProject(). Also, remove redundant code for generating the
        CMake arguments for feature defines.

        * Scripts/build-webkit:
          - Added cMakeArgsFromFeatures() to convert the @features array to CMake arguments.
          - Modified EFL and WinCE-specific building logic to call buildCMakeProjectOrExit().
          - Sorted forward declarations.
          - Initialize $makeArgs with the empty string so as to simplify its use in string operations;
            Modified call sites as needed.
        * Scripts/webkitdirs.pm:
          - Added cleanCMakeGeneratedProject() to clean a CMake build.
          - Added buildCMakeGeneratedProject() to build using generated build system.
          - Added buildCMakeProjectOrExit() which is a facade for building a CMake project.
          - Added generateBuildSystemFromCMakeProject() to generate the build system from
            a CMake project.
          - Removed buildCMakeProject(). This functionality is in buildCMakeProjectOrExit().

2011-03-14  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        Detach Geolocation from Frame when Page destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=52877

        Extend the layout test controller to expose the number of pending
        geolocation requests, so that we can test that the requests have
        been cancelled on page close.

        * DumpRenderTree/LayoutTestController.cpp:
        (numberOfPendingGeolocationPermissionRequestsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate numberOfPendingGeolocationPermissionRequests]):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):


2011-03-14  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed. Modify my email address in committers.py.

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

2011-03-13  Joe Wild  <joseph.wild@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtLauncher does not load the same set of fonts as the DRT
        https://bugs.webkit.org/show_bug.cgi?id=34959

        This patch adds the option "-use-test-fonts" to the QtTestBrowser.
        When this option is used the webkit fonts are loaded the same
        as they are in DumpRenderTree.  This option can be used on
        QtTestBrowser and run-launcher.  It can only be used
        on Linux systems with FcInit and is configured as such.

        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (initWebKitTestFonts):
        (launcherMain):
        (LauncherApplication::handleUserOptions):

2011-03-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/8995822> Build DumpRenderTree perl support only for the architectures
        DumpRenderTree is being built for.

        * DumpRenderTree/mac/PerlSupport/Makefile:

2011-03-12  Dan Bernstein  <mitz@apple.com>

        Suggested by Mark Rowe.

        * DumpRenderTree/mac/Configurations/Base.xcconfig: Leave C++ exceptions enabled
        as they were before r80915.

2011-03-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Should be able to download a PDF to the Downloads folder
        https://bugs.webkit.org/show_bug.cgi?id=56256

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):
        Update for API changes.

2011-03-11  Anton D'Auria  <adauria@apple.com>

        Reviewed and landed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=51878
        Add WebKit1 API to view and delete local storage

        Added tests that write to LocalStorage, delete one origin, get list of origins with local storage, delete all origins.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/LayoutTestController.cpp:
        (syncLocalStorageCallback):
        (observeStorageTrackerNotificationsCallback):
        (deleteAllLocalStorageCallback):
        (deleteLocalStorageForOriginCallback):
        (originsWithLocalStorageCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/StorageTrackerDelegate.h: Added.
        * DumpRenderTree/StorageTrackerDelegate.mm: Added.
        (-[StorageTrackerDelegate init]):
        (-[StorageTrackerDelegate logNotifications:controller:]):
        (-[StorageTrackerDelegate originModified:]):
        (-[StorageTrackerDelegate dealloc]):
        (-[StorageTrackerDelegate setControllerToNotifyDone:]):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::deleteAllLocalStorage):
        (LayoutTestController::originsWithLocalStorage):
        (LayoutTestController::deleteLocalStorageForOrigin):
        (observeStorageTrackerNotifications):
        (syncLocalStorage):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::originsWithLocalStorage):
        (LayoutTestController::deleteAllLocalStorage):
        (LayoutTestController::deleteLocalStorageForOrigin):
        (LayoutTestController::observeStorageTrackerNotifications):
        (LayoutTestController::syncLocalStorage):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        (allocateGlobalControllers):
        (releaseGlobalControllers):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::syncLocalStorage):
        (LayoutTestController::observeStorageTrackerNotifications):
        (LayoutTestController::deleteAllLocalStorage):
        (LayoutTestController::originsWithLocalStorage):
        (LayoutTestController::deleteLocalStorageForOrigin):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::originsWithLocalStorage):
        (LayoutTestController::deleteAllLocalStorage):
        (LayoutTestController::deleteLocalStorageForOrigin):
        (LayoutTestController::observeStorageTrackerNotifications):
        (LayoutTestController::syncLocalStorage):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::syncLocalStorage):
        (LayoutTestController::observeStorageTrackerNotifications):
        (LayoutTestController::clearAllDatabases):
        (LayoutTestController::deleteAllLocalStorage):
        (LayoutTestController::originsWithLocalStorage):
        (LayoutTestController::deleteLocalStorageForOrigin):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::syncLocalStorage):
        (LayoutTestController::observeStorageTrackerNotifications):
        (LayoutTestController::clearAllDatabases):
        (LayoutTestController::deleteAllLocalStorage):
        (LayoutTestController::originsWithLocalStorage):
        (LayoutTestController::deleteLocalStorageForOrigin):

2011-03-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        Crash calling WebContext::clearResourceCaches(InMemoryResourceCachesOnly) before the Web
        Process has finished launching.
        https://bugs.webkit.org/show_bug.cgi?id=56208

        * TestWebKitAPI/Tests/WebKit2/SendingMessagesToTheWebProcessBeforeItIsValid.cpp: Added.
        (TestWebKitAPI::TEST):
        Test that calling WKContextClearResourceCaches works with both options when called before
        the Web Process is valid.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add the new test.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Ditto.

2011-03-11  Adam Roben  <aroben@apple.com>

        Make it possible to view all leaks from a build at once in Leaks Viewer

        You can now give Leaks Viewer the URL of a build results page (e.g.,
        <http://build.webkit.org/results/SnowLeopard%20Intel%20Leaks/r80847%20(15493)/>), and it
        will load all the leaks files from that build.

        Fixes <http://webkit.org/b/56030> Leaks Viewer: Would like to be able to look at all leaks
        files from a particular build at once, rather than one at a time

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksLoader.js: Added.
        (LeaksLoader): Initialize our properties.
        (LeaksLoader.prototype.start): If the URL ends in .txt, assume it's a single leaks file and
        load it. Otherwise assume it's a build results page URL and start fetching the leaks files
        from that page.
        (LeaksLoader.prototype._loadLeaksFiles): Tell our client how many leaks files we're loading
        so it can provide feedback. Then load each one and pass it to the client.
        (LeaksLoader.prototype._loadLeaksFromResultsPage): Load the HTML of the results page, parse
        it into a DOM, pull out all the links to leaks files, and load each one.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParser.js: Added.
        (LeaksParser): Initialize our worker.
        (LeaksParser.prototype.addLeaksFile): Tell the worker about the leaks file's contents.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParserWorker.js: Added.
        This code mostly came from Worker.js.
        (LeaksParserWorker): Initialize our profile.
        (LeaksParserWorker.prototype.addLeaksFile): Parse the leaks file and incorporate it into our
        profile.
        (LeaksParserWorker.prototype._parseLeaks):
        (LeaksParserWorker.prototype._createNode):
        (LeaksParserWorker.prototype._incorporateLeaks):
        Moved these functions here from LeaksViewer. _incorporateLeaks is essentially just a renamed
        version of createProfile which adds to this.profile instead of making a new profile each
        time.
        (onmessage): Parse the file and send back the new profile.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.css:
        (#loading-indicator):
        (#spinner):
        (#loading-indicator-label):
        Tweaked styles to accomodate a longer label.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.js:
        (LeaksViewer.loaded): Set up a loader and parser.

        (LeaksViewer.get filesLeftToParse):
        (LeaksViewer.set filesLeftToParse):
        Added these simple accessors.

        (LeaksViewer._didCountLeaksFiles): Callback from LeaksLoader. Stores the count.
        (LeaksViewer._didLoadLeaksFile): Callback from LeaksLoader. Passes the file contents off to
        the parser.
        (LeaksViewer._didParseLeaksFile): Callback from LeaksParser. If all files have been parsed,
        tell the ProfilerAgent and mark that we're done loading. (Code came from the old
        _loadLeaksFromURL function).
        (LeaksViewer._loadLeaksFromURL): Now just calls through to the loader.
        (LeaksViewer._loadingIndicatorText): Added. Returns the text that should show up in the
        loading indicator, including the number of files being loaded.
        (LeaksViewer._loadingStatusChanged): Update the loading indicator's label, too.
        (LeaksViewer._updateLoadingIndicatorLabel): Added. Just updates the label!
        (LeaksViewer._updateTitle): Moved code to compute the "Loading" text to
        _loadingIndicatorText.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/Utilities.js: Added.
        (getResource): Moved here from LeaksViewer.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/Worker.js: Subsumed by
        LeaksParserWorker.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/index.html: Added new JS
        files, added a #loading-indicator-label element, and tweaked the prompt wording.

2011-03-11  Adam Roben  <aroben@apple.com>

        Don't trigger a build when build.webkit.org's HTML files are modified

        Fixes <http://webkit.org/b/56190> Windows bots shouldn't have built r80848/r80851, but did

        Reviewed by Dan Bernstein.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build): Added build.webkit.org's public_html directory to the list of
        directories that shouldn't trigger builds. Re-sorted the list.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest): Added a test to cover the above change.

2011-03-11  Adam Roben  <aroben@apple.com>

        Roll out r80848

        It was accidentally committed.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.js:
        (LeaksViewer._loadLeaksFromURL):

2011-03-11  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        kill hung lighttpd processes on the chromium win bot
        https://bugs.webkit.org/show_bug.cgi?id=56152

        Sometimes this process doesn't exit and it holds on to
        a log file that we can't delete or copy, causing the tests
        to go red.

        * BuildSlaveSupport/win/kill-old-processes:

2011-03-11  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Kent Tamura.

        [Chromium] missing HTMLInputElement::setValueForUser() to tests
        https://bugs.webkit.org/show_bug.cgi?id=55854

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setValueForUser): Added.
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-03-10  Peter Kasting  <pkasting@google.com>

        Reviewed by Dimitri Glazkov.

        Clean up some gross code in TestShellWin.cpp.  No functional change.
        https://bugs.webkit.org/show_bug.cgi?id=56048

        * DumpRenderTree/chromium/TestShellWin.cpp:
        (checkLayoutTestSystemDependencies):

2011-03-10  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Buildfix for platforms where X11 is not available (e.g. Symbian)

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts): Guard X11-specific code with Q_WS_X11.

2011-03-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Make single backing store the default for EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=55753

        Set single backing store the default for EWebLauncher.

        * EWebLauncher/main.c:
        (main):

2011-03-10  Adam Roben  <aroben@apple.com>

        Ignore errors from files being held open when creating a test result archive

        Fixes <http://webkit.org/b/55581> Test results don't get uploaded if test-result-archive
        fails to delete the results directory

        Reviewed by Mark Rowe.

        * BuildSlaveSupport/test-result-archive:
        (archiveTestResults): Ignore errno 2 when deleting the results directory, since it can be
        thrown when a process is holding a file open.

2011-03-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80701.
        http://trac.webkit.org/changeset/80701
        https://bugs.webkit.org/show_bug.cgi?id=56126

        fast/dom/Geolocation/window-close-crash.html fails on Snow
        Leopard release builds (Requested by mihaip on #webkit).

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:

2011-03-10  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] run-gtk-tests doesn't fail if a test crashes
        https://bugs.webkit.org/show_bug.cgi?id=56089

        * Scripts/run-gtk-tests: gtester -k exits with a 0 exit status
        even if a test crashes. So run the tests individually and if a
        test fails remember its exit code so run-gtk-test fails too, if
        required.

2011-01-26  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Dmitry Titov.

        Detach Geolocation from Frame when Page destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=52877

        Extend the layout test controller to expose the number of pending
        geolocation requests, so that we can test that the requests have
        been cancelled on page close.

        * DumpRenderTree/LayoutTestController.cpp:
        (numberOfPendingGeolocationPermissionRequestsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate numberOfPendingGeolocationPermissionRequests]):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):


2011-03-09  Adam Roben  <aroben@apple.com>

        Hide Leaks Viewer's URL prompt by default

        We will show it as needed. I think I left it visible by default by accident after doing some
        testing.

        Fixes <http://webkit.org/b/56031> Leaks Viewer: URL prompt overlay shouldn't appear when a
        URL is passed as a query parameter, but does

        Reviewed by Simon Fraser.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/index.html:

2011-03-09  Adam Roben  <aroben@apple.com>

        Don't use Element.classList or box-shadow in Leaks Viewer

        They aren't supported by Safari 5. Luckily we have substitutes for them!

        Fixes <http://webkit.org/b/56035> Leaks viewer doesn't work in Safari 5

        Reviewed by Simon Fraser.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.css:
        (#url-prompt): Use -webkit-box-shadow instead of box-shadow.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.js:
        (LeaksViewer.urlPromptButtonClicked):
        (LeaksViewer._displayURLPrompt):
        (LeaksViewer._setLoadingIndicatorHidden):
        Use add/removeStyleClass (from utilities.js) instead of Element.classList.

2011-03-09  Adam Roben  <aroben@apple.com>

        Add a link to the Leaks Viewer tool on the build.webkit.org homepage

        Rubber-stamped by David Kilzer.

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

2011-03-09  Adam Roben  <aroben@apple.com>

        Add a Leaks Viewer tool to build.webkit.org

        This tool parses leaks from the files generated by the leaks bot and displays them in a
        view similar to the Web Inspector's Profiles pane (in fact, it uses the Web Inspector's
        code).

        The URL of the leaks file can be entered in a prompt when the tools is first shown, or can
        be passed to the tool via the "url" query parameter.

        Only one leaks file can be viewed at a time for now. Only the number of leaks, as opposed to
        the number of leaked bytes, is shown. And this tool has made apparent some bugs in the Web
        Inspector's Heavy profile view. But it's still pretty useful as-is.

        Fixes <http://webkit.org/b/56028> Would like a Shark-like tool for viewing leaks from leak bots

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.css: Added.
        (#url-prompt-container): This is the dark overlay that is shown behind the URL prompt.
        (#url-prompt): This is the prompt itself.

        (#loading-indicator):
        (#loading-indicator > img):
        These show a spinner in the bottom-right when we're loading a leaks file.

        (.percent-time-status-bar-item): Hide the Percent button since we never want to show leaks
        as percentages.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.js: Added.
        (LeaksViewer.loaded): Initialize ourselves and start loading the leaks file (or prompt for a
        URL if one wasn't given to us as a query parameter).

        (LeaksViewer.get loading):
        (LeaksViewer.set loading):
        (LeaksViewer.get url):
        (LeaksViewer.set url):
        Pretty simple accessors.

        (LeaksViewer.urlPromptButtonClicked): Start loading the URL from the prompt and hide the
        prompt.
        (LeaksViewer._displayURLPrompt): Show the prompt and focus the URL input.
        (LeaksViewer._loadLeaksFromURL): Start fetching the leaks file. When we've retrieved the
        file, hand it off to a Web Worker that will parse it into a fake "profile", then hand off
        the profile to the Web Inspector code once it's been created.
        (LeaksViewer._loadingStatusChanged): Update our loading indicator and title.
        (LeaksViewer._setLoadingIndicatorHidden): Simply hide or show the indicator.
        (LeaksViewer._updateTitle): Set our title based on our URL and loading status.
        (getResource): Helper function to fetch a resource via XHR and pass it to a callback.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/WebInspectorShims.js: Added.
        (WebInspector.UIString): Just a simple implementation since this tool isn't localized.
        (ProfilerAgent.getProfile): Store the callback.
        (ProfilerAgent.profileReady): Call the callback.
        (monkeyPatchInspectorObjects): Fix up WebInspector.ProfileDataGridNode to show the self leak
        count and total leak counts as real values, not percentages or milliseconds.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/Worker.js: Added.
        (onmessage): Create a profile based on the leaks file and pass it back to our caller.
        (parseLeaks): Extract call stacks out of a leaks file.
        (createNode): Helper function to create a new empty profile node.
        (createProfile): Take the leak stacks and turn them into a fake "profile" for consumption by
        WebInspector.ProfileView.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/index.html: Added.

2011-03-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        Combine multiple --ignore-tests values
        https://bugs.webkit.org/show_bug.cgi?id=56016

        * Scripts/old-run-webkit-tests:

2011-03-08  Kenji Imasaki  <imasaki@chromium.org>

        Reviewed by David Levin.

        Adding myself to the committer file.

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

2011-03-08  Jessie Berlin  <jberlin@apple.com>

        Rubber-stamped by Adam Roben.

        Fix two leaks I introduced into the API tests.

        * TestWebKitAPI/Tests/WebKit2/win/DoNotCopyANullCFURLResponse.cpp:
        (TestWebKitAPI::TEST):

2011-03-08  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        Crash in CFNetwork visiting google.com
        https://bugs.webkit.org/show_bug.cgi?id=55958

        Add a test for not trying to copy a null CFURLResponse.

        * TestWebKitAPI/Tests/WebKit2/win/DoNotCopyANullCFURLResponse.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2011-03-08  Hayato Ito  <hayato@chromium.org>

        Reviewed by Ojan Vafai.

        [NRWT] Renamed a FailureWithType class to a ComparisonTestFailure class.

        FailureWithType is a confusing naming because we have removed test_type/* classes in r79840.

        https://bugs.webkit.org/show_bug.cgi?id=55450

        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:

2011-03-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add layoutTestController.setValueForUser() after r80412
        https://bugs.webkit.org/show_bug.cgi?id=55862

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setValueForUser): Implement setValueForUser()

2011-03-08  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Add script_shell_command to WebKitPort
        https://bugs.webkit.org/show_bug.cgi?id=55925

        Add a central place where we generate the shell command from the script name.
        This function will be used later to detect the correct script interpreter on Win32.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:

2011-03-07  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        add webkit-patch attach-to-bug for posting to bugzilla from the commandline
        https://bugs.webkit.org/show_bug.cgi?id=55749

        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/attachtobug.py: Added.
        * Scripts/webkitpy/tool/steps/options.py:

2011-03-07  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Add support for DataTransferItems
        https://bugs.webkit.org/show_bug.cgi?id=55115

        Enable data transfer items in DRT.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2011-03-06  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        [test dashboard] pull treemap files
        https://bugs.webkit.org/show_bug.cgi?id=55852

        * TestResultServer/handlers/dashboardhandler.py:

2011-03-03  Hayato Ito  <hayato@chromium.org>

        Reviewed by Mihai Parparita.

        [NRWT] Clear output image file used by DumpRenderTree to make sure the
        previous image should not be used in the ChromiumDriver.

        Also make sure that output image from the ChromiumDriver should be ''
        (empty string) if a test crashes for consistency with the WebKitDriver
        implementation.

        https://bugs.webkit.org/show_bug.cgi?id=55746

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-03-07  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Martin Robinson.

        [Gtk] fast/js/navigator-language.html fails locally
        https://bugs.webkit.org/show_bug.cgi?id=55880

        Add LANG variable to the clean environment when running
        old-run-webkit-tests script.

        * Scripts/old-run-webkit-tests:

2011-03-07  Tony Chang  <tony@chromium.org>

        Reviewed by Mihai Parparita.

        [Chromium] Find .checksum files without .pngs and vice-versa
        https://bugs.webkit.org/show_bug.cgi?id=55236

        * Scripts/find-mismatched-layout-test-results: Added. A script for finding
            mismatched results.

2011-03-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: WK1 needs to use the ScrollView attachment for AXScrollArea, WK2 should not use this element.
        https://bugs.webkit.org/show_bug.cgi?id=55706

        The rootElement in DRT should point to the scroll view. In WK1, that will be the parent of the rootObject.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::focusedElement):
           Remove FIXME comment about caching the focusedElement. In fact, we shouldn't cache this 
           because it could change at any time.
        (AccessibilityController::rootElement):

2011-03-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add unableToImplementPolicy callback for WebKit2 policy client
        <rdar://problem/9071902>
        https://bugs.webkit.org/show_bug.cgi?id=55884

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        Update policy client initialization struct for new member.

2011-03-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Replace WebKit2's decidePolicyForMIMEType with decidePolicyForResponse
        https://bugs.webkit.org/show_bug.cgi?id=55827

        * MiniBrowser/mac/BrowserWindowController.m:
        (decidePolicyForResponse):
        (-[BrowserWindowController awakeFromNib]):
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::decidePolicyForResponse):
        (TestWebKitAPI::TEST):
        Update tools for new name.

2011-03-06  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel and David Kilzer.

        Fix misspelled word in build-webkit's checkForJavaSDK() and sort forward declarations
        https://bugs.webkit.org/show_bug.cgi?id=55503

        Fix misspelled word "Dowloads" [sic] in the message printed to standard output
        in checkForJavaSDK().

        Also, remove extraneous space in function prototype for unlinkZeroFiles.

        * Scripts/build-webkit:

2011-03-05  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Sam Weinig.

        Fix Web Process crashes caused by https://bugs.webkit.org/show_bug.cgi?id=53919.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame): Retain the WKURLRequestRef returned
            by willSendRequestForFrame. The API expects a retained reference to the URL request.

2011-03-05  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Darin Adler.

        HTMLInputElement::setValue() should schedule change event when the element is focused
        In service of https://code.google.com/p/chromium/issues/detail?id=42716
        https://bugs.webkit.org/show_bug.cgi?id=53160

        * DumpRenderTree/LayoutTestController.cpp:
        (setValueForUserCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setValueForUser): Stubbed out; need real implementation.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setValueForUser): Expose HTMLInputElement::setValueForUser() to tests
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setValueForUser): Stubbed out; need real implementation.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setValueForUser): Stubbed out; need real implementation.
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setValueForUser): Stubbed out; need real implementation.

2011-03-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alexey Proskuryakov.

        <rdar://problem/9055252> DumpRenderTree is crashing with GuardMalloc

        GuardMalloc does not expect the memory containing its malloc_zone_t to ever be read-only.
        
        * DumpRenderTree/mac/CheckedMalloc.cpp:
        (protectionOfRegion): Retrieve the protection flags for the VM region containing the given address.
        (makeLargeMallocFailSilently): Save the initial protection flags, temporarily make the region writeable,
        and then restore the initial protection flags when we're done.

2011-03-04  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        [gdb] pretty-print KURL in gdb
        https://bugs.webkit.org/show_bug.cgi?id=55788

        * gdb/webkit.py: extend the pretty-printers to print WTF::CString
        and KURLGooglePrivate.  As always, "p/r" can be used to sidestep
        pretty-printing.

2011-03-03  Timothy Hatcher  <timothy@apple.com>

        Update the tests that use WKPageRunJavaScriptInMainFrame use the WKSerializedScriptValueRef.

        Reviewed by Darin Adler.

        * TestWebKitAPI/JavaScriptTest.cpp:
        (TestWebKitAPI::javaScriptCallback):
        * TestWebKitAPI/Tests/WebKit2/EvaluateJavaScript.cpp:
        (TestWebKitAPI::didRunJavaScript):
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        (TestWebKitAPI::nullJavaScriptCallback):
        * TestWebKitAPI/Tests/WebKit2/PreventEmptyUserAgent.cpp:
        (TestWebKitAPI::didRunJavaScript):

2011-03-03  Timothy Hatcher  <timothy@apple.com>

        Make run-api-tests show failed if a test fails.

        https://webkit.org/b/55725

        Reviewed by Sam Weinig.

        * Scripts/run-api-tests:
        (runTest): Remove "my" from the nested $result assignment so the
        check outside the condition sees the real result.

2011-03-02  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Chromium][DRT] WebTask should use webkit_support::TaskAdaptor
        https://bugs.webkit.org/show_bug.cgi?id=55434

        Changed WebTask to be a subclass of webkit_support::TaskAdaptor
        and passed the object webkit_support::PostDelayedTask directly.

        Note that the change keeps postTask() as is because it has a
        semantics taht webkit_support::PostDelayedTask() has; It jumps to
        the main thread.

        * DumpRenderTree/chromium/Task.cpp:
        (postDelayedTask):
        * DumpRenderTree/chromium/Task.h:
        (WebTask::Run):

2011-03-03  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [QT] Implement mock client-based geolocation for layout testing
        https://bugs.webkit.org/show_bug.cgi?id=54334

        Implement testing for Client-Based geolocation for QtWebkit.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setGeolocationPermission):
        (LayoutTestController::setMockGeolocationError):
        (LayoutTestController::setMockGeolocationPosition):

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

        Unreviewed, rolling out r80237.
        http://trac.webkit.org/changeset/80237
        https://bugs.webkit.org/show_bug.cgi?id=55714

        Windows bots aren't ready to be core (Requested by aroben on
        #webkit).

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-03-03  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        NRWT: AttributeError: TestRunner2 instance has no attribute '_cancel_workers'
        https://bugs.webkit.org/show_bug.cgi?id=55694
        
        Fixes for interruptions in NRWT:
        - Make TestRunInterruptedException be pickleable correctly (the base
          Exception class defines a __reduce__ that does not include the reason)
        - Fix ordering of returned arguments from TestRunner2._run_tests
          (interrupted and keyboard_interrupted were reversed)
        - Fix cancel_workers callsites (was using old name).
        - In handle_exception re-raise actual exception instance that was thrown

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-03-03  Qi Zhang  <qi.2.zhang@nokia.com>

        Unreviewed.

        Adding myself as a committer.

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

2011-03-03  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Mihai Parparita.

        Teach sheriffbot to answer whois commands
        https://bugs.webkit.org/show_bug.cgi?id=55687

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-03-03  Victoria Kirst  <vrk@google.com>

        Reviewed by Eric Carlson.

        Enable media tests in chromium-gpu/test_expectations
        https://bugs.webkit.org/show_bug.cgi?id=53608

        Add media folder to the list of GPU test paths.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-03-03  Adam Roben  <aroben@apple.com>

        Work around a bug in KURL's parsing of Windows-style absolute file: URLs

        Fixes <http://webkit.org/b/55674> Many tests fail in WebKit2 mode on Windows due to
        incorrect parsing of absolute Windows-style file: URLs

        Reviewed by Tim Hatcher.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::createWKURL): Add a "localhost" host to file: URLs we create to work around
        <http://webkit.org/b/55683>.

2011-03-03  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Run kill-old-processes on the chromium-win bot too
        https://bugs.webkit.org/show_bug.cgi?id=55630

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * BuildSlaveSupport/win/kill-old-processes: Add wdiff.exe to the kill list.

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

        Reviewed by Martin Robinson.

        [GTK] DRT needs implementation of EventSender.scheduleAsynchronousClick
        https://bugs.webkit.org/show_bug.cgi?id=53960

        * DumpRenderTree/gtk/EventSender.cpp:
        (sendClick):
        (scheduleAsynchronousClickCallback):

2011-03-03  Adam Roben  <aroben@apple.com>

        Look for Windows-style paths when checking whether a test is an Inspector test

        WTR part of <http://webkit.org/b/55672> <rdar://problem/9080867> All inspector tests time
        out or crash on Windows 7 Release (WebKit2 Tests)

        Reviewed by Darin Adler.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::shouldOpenWebInspector): Also look for backslashes, since that's what we'll get on
        Windows.

2011-03-03  Adam Roben  <aroben@apple.com>

        Make Windows 7 Release (Tests) a core builder

        We can probably make Windows XP Debug (Tests) a core builder, too, but we should probably
        give it a few more days of greenness first.

        Fixes <http://webkit.org/b/55665> Windows 7 Release (Tests) should be a core builder

        Reviewed by Andreas Kling.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot): Added a regexp to match Windows 7 Release (Tests).

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (BuildBotTest): Updated the list of builders to match the current list on build.webkit.org.
        Updated the core regexps to match the buildbot module. Updated the expected results to match
        the current set of core builders.

2011-03-03  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        Adding myself as a reviewer.

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

2011-03-03  Lukasz Slachciak  <l.slachciak@samsung.com>

        Reviewed by Xan Lopez.

        [GTK] Extended application cache database API and added unit tests file.
        https://bugs.webkit.org/show_bug.cgi?id=55335

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: removed external declaration
        of webkit_application_cache_set_maximum_size due to API exposal.

2011-03-02  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        make webkit-patch upload work for security bugs
        https://bugs.webkit.org/show_bug.cgi?id=55655

        The problem is that we shell out to prepare-ChangeLog,
        which does not authenticate with bugzilla. All it needs from
        bugzilla is the bug title though. We just pass it through from
        webkit-patch instead.

        * Scripts/prepare-ChangeLog:
        * Scripts/webkitpy/common/net/bugzilla/bug.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:

2011-03-01  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        [test-dashboard] make gtest JSON match layout-tests JSON
        https://bugs.webkit.org/show_bug.cgi?id=55556

        http://trac.webkit.org/changeset/80090 stopped converting time_ms to t.
        Make this code match.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2011-03-02  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        NRWT - implement Linux Hardy 64-bit port support. This involves
        adding support for non-'x86' architectures and updating the
        "deduplicate_tests" script to correctly understand that
        port.name() is not always equal to basename(port.baseline_path()).

        This change introduces two new port names: 'chromium-linux-x86'
        and 'chromium-linux-x86_64'. Using the prior 'chromium-linux'
        flag will cause the code to determine which one to use at
        runtime, just like we currently do with 'chromium-win'.

        https://bugs.webkit.org/show_bug.cgi?id=55535

        * Scripts/webkitpy/common/system/executive_mock.py:
          Handle 'return_stderr' keyword arg to run_command()
        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome.py:

2011-03-02  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, make sure we put the wxWebKit dylib in the right directory and
        update symlinks accordingly.

        * wx/packaging/build-mac-installer.py:

2011-03-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80139.
        http://trac.webkit.org/changeset/80139
        https://bugs.webkit.org/show_bug.cgi?id=55620

        failing and crashing tests on Snow Leopard bot (Requested by
        mihaip1 on #webkit).

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:

2011-03-02  Adam Roben  <aroben@apple.com>

        Wait for force a paint in WebKitTestRunner until we're actually ready to dump the output

        This matches DumpRenderTree on Windows.

        Fixes <http://webkit.org/b/55469> <rdar://problem/9068539> REGRESSION (r79863): Lots of
        dom/html/level2/html/HTMLFrameElement*.html tests crashing in FrameView::paintOverhangAreas
        in WebKit2

        Reviewed by Beth Dakin.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump): Moved code to force a paint here...
        (WTR::InjectedBundlePage::didFinishLoadForFrame): ...from here.

2011-03-02  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Add feature define for data transfer items
        https://bugs.webkit.org/show_bug.cgi?id=55510

        * Scripts/build-webkit:

2011-03-02  Adam Roben  <aroben@apple.com>

        Look in the new-to-SnowLeopard location for crash logs on SnowLeopard and newer

        ReportCrash saves logs to ~/Library/Logs/CrashReporter on Leopard, but to
        ~/Library/Logs/DiagnosticReports on SnowLeopard. old-run-webkit-tests was only looking in
        the former location, but was getting lucky on some SnowLeopard machines because symlinks
        were being created there pointing into DiagnosticReports. For machines without these
        symlinks, crash logs were not getting captured.

        Fixes <http://webkit.org/b/55607> old-run-webkit-tests doesn't capture crash logs on some
        SnowLeopard machines

        Reviewed by Eric Seidel.

        * Scripts/old-run-webkit-tests:
        (captureSavedCrashLog): Look in ~/Library/Logs/DiagnosticReports on SnowLeopard and newer.

2011-03-02  Adam Roben  <aroben@apple.com>

        Don't try to capture crash logs on platforms that haven't implemented that feature

        Fixes <http://webkit.org/b/55504> Use of uninitialized value in numeric lt (<) at
        Tools/Scripts/old-run-webkit-tests line 1778 seen on Qt bots after a crash

        Reviewed by Joseph Pecoraro.

        * Scripts/old-run-webkit-tests:
        (captureSavedCrashLog): Bail if we don't have a crash log glob.
        (findNewestFileMatchingGlob): Fix a buggy test for when no paths match the glob. This isn't
        strictly required to fix bug 55504, but seems worthwhile.

2011-01-26  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Dmitry Titov.

        Detach Geolocation from Frame when Page destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=52877

        Extend the layout test controller to expose the number of pending
        geolocation requests, so that we can test that the requests have
        been cancelled on page close.

        * DumpRenderTree/LayoutTestController.cpp:
        (numberOfPendingGeolocationPermissionRequestsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate numberOfPendingGeolocationPermissionRequests]):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):


2011-03-01  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Assertion fails when a form validation bubble appears
        https://bugs.webkit.org/show_bug.cgi?id=55550

        Test: fast/forms/interactive-validation-attach-assertion.html

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo): Enable the interactive validation feature by
          default. This matches to Chromium browser.

2011-03-01  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kent Tamura.

        Remove efl port style exception of Webcore/JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=55549

        WebCore and JavaScriptCore need to adhere WebKit coding style.

        * Scripts/webkitpy/style/checker.py:

2011-03-01  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] clean up temp files on chromium-mac builder too
        https://bugs.webkit.org/show_bug.cgi?id=55525

        * BuildSlaveSupport/chromium/remove-crash-logs:

2011-02-28  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        wrap json in a function call to afford cross-domain loading
        https://bugs.webkit.org/show_bug.cgi?id=55353

        Also delete the code that compacts the JSON. It turns out this
        breaks the rebaseline tool and is probably a premature optimization anyways.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:

2011-03-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80079.
        http://trac.webkit.org/changeset/80079
        https://bugs.webkit.org/show_bug.cgi?id=55547

        "Broke the Win debug build?" (Requested by dcheng on #webkit).

        * Scripts/build-webkit:

2011-03-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Update verification scripts to handle WebKit2.

        * Scripts/check-for-global-initializers: Skip object files that use RefCountedLeakChecker.
        * Scripts/check-for-inappropriate-files-in-framework: Add some inappropriate file types for
        WebKit2.

2011-03-01  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Add feature define for data transfer items
        https://bugs.webkit.org/show_bug.cgi?id=55510

        * Scripts/build-webkit:

2011-02-23  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        All Console Messages should be passed to ChromeClients.
        https://bugs.webkit.org/show_bug.cgi?id=54926

        Update DumpRenderTree's UIDelegate to use the new console message delegate.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:withSource:]):

2011-03-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        Tragically, we stopped running the python unit tests
        on Chromium Win just as I was getting them to be green.
        This patch turns them back on.

        https://bugs.webkit.org/show_bug.cgi?id=55521

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

2011-03-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        Disable
        webkitpy.common.system.executive_unittest.ExecutiveTest.\
           test_kill_all fails on win until it can be properly triaged.

        https://bugs.webkit.org/show_bug.cgi?id=54790

        * Scripts/webkitpy/common/system/executive_unittest.py:

    2011-03-01  Helder Correia  <helder@sencha.com>

            Unreviewed. Add myself to committers.py.

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

2011-03-01  Adam Roben  <aroben@apple.com>

        Give up if a crash log for the web process is taking too long to be saved on Windows

        This should keep the bots from getting stuck while waiting for a crash log, if writing a
        crash log ever hangs or the UI process for some reason doesn't notice it's finished.

        Fixes <http://webkit.org/b/55499> WebKitTestRunner can hang forever waiting for a crash log
        to be saved for the web process

        Reviewed by Steve Falkenburg.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::runRunLoopUntil): Moved code to run the run loop here here from platformRunUntil.
        Generalized the code slightly to handle the optional object to wait on.
        (WTR::TestController::platformRunUntil): Use the new runRunLoopUntil function, and also use
        it (with a timeout) when waiting for a crash log for the web process to be saved. This will
        prevent us from waiting forever.

2011-03-01  Adam Roben  <aroben@apple.com>

        Give WebKitLauncherWin's PDB file a name different from WebKit's

        WebKitLauncherWin (which builds WebKit.exe) and WebKit (which builds WebKit.dll) were
        fighting over the same PDB file, meaning that one of them was going to lose and not have
        symbols. WebKitLauncherWin's PDB file is now named WebKitLauncherWin.pdb.

        Fixes <http://webkit.org/b/55495> Crashes in WebKit.dll have bad backtraces for some test
        runs (due to missing symbols)

        Reviewed by David Kilzer.

        * WebKitLauncherWin/WebKitLauncherWinCommon.vsprops: Use the project name,
        "WebKitLauncherWin", instead of the target name, "WebKit", when naming the PDB file.

2011-03-01  Adam Roben  <aroben@apple.com>

        Count web process crashes toward the --exit-after-n-crashes-or-timeouts limit

        Fixes <http://webkit.org/b/55492> Web process crashes aren't counted toward the
        --exit-after-n-crashes-or-timeouts limit

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
        (stopRunningTestsEarlyIfNeeded): Include web process crashes in the computation, and print
        the number of tests that caused the web process to crash when exiting early.

2011-03-01  Adam Roben  <aroben@apple.com>

        Save a crash log when the web process crashes

        On Windows, WebKitTestRunner now detects when the web process is crashing and waits to exit
        until it has finished crashing, which guarantees that the crash log will have had time to be
        saved, too. On Mac, we always wait until ReportCrash has exited before capturing the crash
        log, so all we have to do is choose the right crash log out of the CrashReporter directory.

        Fixes <http://webkit.org/b/44121> <rdar://problem/8320759> When the web process crashes and
        a crash log is being saved, WebKitTestRunner thinks the web process has become unresponsive

        Reviewed by Sam Weinig.

        * Scripts/old-run-webkit-tests:
        (testCrashedOrTimedOut): Don't kill WebKitTestRunner when the web process crashes. It will
        kill itself. On Windows, this will cause us to wait until the crash log has been saved. On
        Mac, it should have no effect. Capture saved crash logs for web process crashes, too.
        (captureSavedCrashLog): Added $webProcessCrashed argument. On Mac, look for
        WebProces_*.crash files when the web process crashes.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize): Added an initializationUserData argument. Updated for
        initializePlatformDefaults -> platformInitialize rename. Pass the initializationUserData
        along to platformInitialize.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.h: See above.

        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:
        (WKBundleInitialize): Pass along the initializationUserData to the InjectedBundle.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WTR::InjectedBundle::platformInitialize):
        Updated function signature.

        * WebKitTestRunner/InjectedBundle/win/InjectedBundleWin.cpp:
        (WTR::exceptionFilter): Added. Tells the UI process we're crashing by signaling the
        webProcessCrashingEvent, then lets the crash continue as normal.

        (WTR::InjectedBundle::platformInitialize): Hook up exceptionFilter. Retrieve the name of the
        event we should use to tell the UI process we're crashing from the initializationUserData,
        and get a handle to that event.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController): Initialize new members.
        (WTR::TestController::processDidCrash): Removed unnecessary WKPageRef argument. Changed to
        only print the "#CRASHED - WebProcess" message once, since this can be called more than once
        when a crash log is being saved on Windows. Exit right away if specified. (This is the
        default.)

        * WebKitTestRunner/TestController.h: Added new members.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformInitialize): Set up the event the web process will use to tell
        us it's crashing.
        (WTR::TestController::platformRunUntil): Pass MWMO_INPUTAVAILABLE to
        ::MsgWaitForMultipleObjectsEx so we'll process messages that have already been seen by
        ::PeekMessage. (This is unrelated to the bug fix.) Notice when the webProcessCrashingEvent
        has been signaled. When this happens, print the "#CRASHED - WebProcess" message right away
        so the test harness will know the web process has crashed and not try to kill us, then wait
        for the web process to finish crashing so a crash log will have time to be saved.
        (WTR::toWK): Simple hepler function.
        (WTR::TestController::platformInitializeContext): Pass along the name of the event the web
        process should use to tell us it is crashing in the context's initialization user data.

2011-03-01  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Tony Gentilcore.

        Move the checks to exclude Python/Perl tests for Chromium Win build to the right place.
        https://bugs.webkit.org/show_bug.cgi?id=55476

        Chromium Win uses BuildAndTestFactory, not TestFactory.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Moved to the right place.

2011-03-01  Adam Roben  <aroben@apple.com>

        Test that the WebKit2 responsiveness timer doesn't fire too early

        Test for <http://webkit.org/b/55417> <rdar://problem/9065287> RunLoop::Timer fires 1000x too
        early on Windows

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/PlatformUtilities.h: Added sleep().

        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly.cpp: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::processDidBecomeUnresponsive):
        (TestWebKitAPI::setInjectedBundleClient):
        (TestWebKitAPI::setPageLoaderClient):
        Simple helper functions.

        (TestWebKitAPI::TEST): Load an HTML file to make sure the web process is initialized. Then
        tell the web process to pause and press the spacebar key. The spacebar keypress should cause
        the responsiveness timer to start, but the web process should unpause before it has a chance
        to fire. Run until the web process has unpaused, and assert that the timer didn't fire.

        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly_Bundle.cpp: Added.
        (TestWebKitAPI::ResponsivenessTimerDoesntFireEarlyTest::ResponsivenessTimerDoesntFireEarlyTest):
        Call up to the base class.
        (TestWebKitAPI::ResponsivenessTimerDoesntFireEarlyTest::didReceiveMessage): When asked to
        pause, sleep for 0.5 seconds, then send back a message saying we paused.

        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::sleep): Added. Calls through to usleep.
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::sleep): Added. Calls through to ::Sleep.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj:
        Added new files.

2011-03-01  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Clean up the project files and move common options to WebKit.pri.

        * WebKitTestRunner/qt/WebKitTestRunner.pro: Deduplicate.


2011-03-01  Adam Roben  <aroben@apple.com>

        Skip another multiprocessing test on Windows

        It is sometimes failing (and may be leaving child Python processes around).
        <http://webkit.org/b/55087> tracks the failure.

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:
        (FuncitonTests.test_get__processes): Skip this test on Windows.

2011-03-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: reduce inspector tests flakiness.
        https://bugs.webkit.org/show_bug.cgi?id=55401

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):

2011-02-28  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by James Robinson.

        NRWT should still upload results when it exits early due to too many failures
        https://bugs.webkit.org/show_bug.cgi?id=55432
        
        Only keyboard interrupts should prevent results from being uploaded.

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-02-28  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam Roben and Gavin Barraclough.

        Test for https://bugs.webkit.org/show_bug.cgi?id=54898
        InjectedBundleNodeHandle dies too early in WKBundleHitTestResultGetNodeHandle.

        * TestWebKitAPI/InjectedBundleController.h:
        (TestWebKitAPI::InjectedBundleController::bundle):
        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle_Bundle.cpp: Added.
        (TestWebKitAPI::HitTestResultNodeHandleTest::HitTestResultNodeHandleTest):
        (TestWebKitAPI::HitTestResultNodeHandleTest::getContextMenuFromDefaultMenu):
        (TestWebKitAPI::HitTestResultNodeHandleTest::didCreatePage):
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::simulateRightClick):
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::simulateRightClick):
        
        Added files to:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj:

2011-02-28  Adam Roben  <aroben@apple.com>

        Start running InjectedBundle API tests on Windows

        A new project, TestWebKitAPIInjectedBundle, builds the injected bundle DLL.

        Fixes <http://webkit.org/b/55420> run-api-tests doesn't run injected bundle tests on Windows

        Reviewed by Darin Adler.

        * TestWebKitAPI/Configurations/TestWebKitAPIDebug.vsprops: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPIDebugAll.vsprops: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPIDebugCairoCFLite.vsprops: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPIRelease.vsprops: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPIReleaseCairoCFLite.vsprops: Added.
        These are just extracted from TestWebKitAPI.vcproj.

        * TestWebKitAPI/Configurations/TestWebKitAPIInjectedBundleCommon.vsprops: Added. Just sets
        up the DLL's filename.

        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp: Fixed DLL name.
        (TestWebKitAPI::Util::createInjectedBundlePath): Changed to use kCFAllocatorNull instead of
        0 (== kCFAllocatorDefault) so that CF won't try to deallocate our C string.

        * TestWebKitAPI/win/TestWebKitAPI.sln: Added TestWebKitAPIInjectedBundle. Removed the bogus
        "all" configuration.

        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Changed to use the new .vsprops files. Added
        injected bundle tests. Let VS resort things.

        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj: Copied from Tools/TestWebKitAPI/win/TestWebKitAPI.vcproj.

2011-02-28  Adam Roben  <aroben@apple.com>

        Add a test for the paint rect passed via WM_PAINT to windowless plugins

        Test for <http://webkit.org/b/55365> <rdar://problem/9031089> REGRESSION (r79040): WebKit2:
        Large portions of pages with plugins paint black

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPP_HandleEvent):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        Added NPP_HandleEvent. Just returns 0 at this level.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/WindowlessPaintRectCoordinates.cpp: Added.
        (WindowlessPaintRectCoordinates::WindowlessPaintRectCoordinates): Call up to the base class.
        (WindowlessPaintRectCoordinates::NPP_New): Mark ourselves as windowless.
        (WindowlessPaintRectCoordinates::NPP_HandleEvent): Check that the paint rect passed via
        WM_PAINT has the expected coordinates.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_HandleEvent): Give the PluginTest a chance to handle the event before doing anything
        else.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Added new file, let VS
        resort things.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didFinishLoadForFrame): Added a call to WKBundlePageForceRepaint.
        This is roughly equivalent to the call to -[WebView displayIfNeeded] in -[FrameLoadDelegate
        webView:didFinishLoadForFrame:] in DumpRenderTree.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView): Tell the WKView it's in a window so that plugins
        can start running.

2011-02-28  Adam Roben  <aroben@apple.com>

        Tell MiniBrowser's WKViews that they're in a window

        Fixes <http://webkit.org/b/55364> Plugins don't work in MiniBrowser on Windows

        Reviewed by Anders Carlsson.

        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create): Call WKViewSetIsInWindow after creating the view.

2011-02-28  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Csaba Osztrogonác.

        The new QML tests require QML_IMPORT_PATH variable to be set in order to
        load the proper plugin.

        * Scripts/run-qtwebkit-tests:

2011-02-28  Joone Hur  <joone.hur@collabora.co.uk>

        Unreviewed, fix spelling mistake.

        hardware-accelated => hardware-accelerated.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-02-28  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Andreas Kling.

        Made sure that the build-webkit --qmake argument is always respected.

        Previously, it would be respected during the build, but not during
        the early feature detection. The build would also fail if qmake was
        not in your path, even if you specified --qmake with a valid qmake
        binary.

        [Qt] WebKit patches required to work with a modularized version of Qt
        https://bugs.webkit.org/show_bug.cgi?id=53916

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:

2011-02-27  Ojan Vafai  <ojan@chromium.org>

        Fix failing tests from http://trac.webkit.org/changeset/79837.

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        This was just a mistake that would break if someone tried printing with this configuration.
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        Method signature changed. Didn't notice that this method was being calling in a unittest.

2011-02-24  Hayato Ito  <hayato@chromium.org>

        Reviewed by Eric Seidel.

        [NRWT] Remove test_types/* classes.

        This is the last patch in the series of efforts which tried to remove test_types classes.
        A single_test_runner module will take over responsibilities of test_type classes.

        From this patch, we won't display statistics per test_type even if a '--verbose' option is given.

        https://bugs.webkit.org/show_bug.cgi?id=55123

        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py:
        * Scripts/webkitpy/layout_tests/test_types/__init__.py: Removed.
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py: Removed.
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py: Removed.
        * Scripts/webkitpy/layout_tests/test_types/test_type_base_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py: Removed.

2011-02-25  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        Change results.json format to the one used by unexpected_results.json
        https://bugs.webkit.org/show_bug.cgi?id=52267

        Also add runtimes in milliseconds to the JSON and make the output format more compact.
        Named the file full_results.json to avoid conflicting with the results.json
        file the test-results server currently serves up.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/result_summary.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-02-27  Adam Roben  <aroben@apple.com>

        Followup fix to r79827

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewAddMessageToConsole): Replaced call to urlSuitableForTestResult with
        lastPathComponent. This matches what we did here before r79827, and matches Mac.

2011-02-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        Make bisect-builds print a trac link for the regression range
        https://bugs.webkit.org/show_bug.cgi?id=55331

        * Scripts/bisect-builds:

2011-02-27  Adam Roben  <aroben@apple.com>

        Use iswalpha instead of isalpha when dealing with wchar_ts in EditingDelegate

        Fixes <http://webkit.org/b/55062> <rdar://problem/9059907> Crash beneath
        EditingDelegate::checkSpellingOfString when running fast/forms/input-text-maxlength.html or
        fast/forms/input-text-paste-maxlength.html on Windows with full page heap enabled

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/EditingDelegate.cpp:
        (indexOfFirstWordCharacter):
        (wordLength):
        Use iswalpha instead of isalpha, since TCHAR is really just wchar_t.

2011-02-27  Adam Roben  <aroben@apple.com>

        Make ResourceLoadDelegate print URLs relative to the main resource on Windows

        This matches Mac. (In fact, the code was ported from Mac!)

        Fixes <http://webkit.org/b/55328> URLs printed by ResourceLoadDelegate on Windows don't
        match Mac

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (substringFromIndex): Added. Emulates -[NSString substringFromIndex:].
        (urlSuitableForTestResult): Ported code from -[NSURL(DRTExtras)
        _drt_descriptionSuitableForTestResult].
        (cfStringRefToWString): Moved here from LayoutTestControllerWin.cpp.

        * DumpRenderTree/win/DumpRenderTreeWin.h: Added declaration of cfStringRefToWString.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Moved cfStringRefToWString to
        DumpRenderTree.cpp.

2011-02-27  Adam Roben  <aroben@apple.com>

        Change the order of Chang Shu's email addresses so the first one is their Bugzilla username

        This makes Bugzilla autocompletion work correctly.

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

2011-02-27  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] fast/loader/user-stylesheet-fast-path.html fails
        https://bugs.webkit.org/show_bug.cgi?id=50911

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setUserStyleSheetLocation):
        Use QUrl::fromEncoded since the passed string is already encoded.

2011-02-27  Adam Roben  <aroben@apple.com>

        Ensure $testResultsDirectory is an absolute path before setting up Windows crash log saving

        Windows 7 (and maybe Vista?) launches the post-mortem debugger with a working directory that
        is different from old-run-webkit-test's. Because of this, the path to the crash log file
        (which is relative to $testResultsDirectory) must be an absolute path. See the bug for more
        details.

        Fixes <http://webkit.org/b/55318> Crash logs aren't saved on Windows 7 when a relative
        --results-directory path is used (like on the test slaves)

        Reviewed by Dan Bernstein.

        * Scripts/old-run-webkit-tests: Moved the call to setUpWindowsCrashLogSaving after we've
        made $testResultsDirectory an absolute path.

2011-02-26  Dominic Mazzoni  <dmazzoni@google.com>

        Reviewed by Adam Barth.

        m_dumpAccessibilityNotifications should be initialized.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        * DumpRenderTree/chromium/AccessibilityController.cpp:
        (AccessibilityController::AccessibilityController):

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener() calls between tests.
        Some tests are using window.open() to change current window location.
        This changes window.opener property whose nullity is checked before
        showing xml viewer.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):

2011-02-26  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Fix the focus in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=55288

        Give focus to the web view when a load starts.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::urlChanged):

2011-02-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Adam Barth.

        [EFL] Add coding style exceptions for EFL port
        https://bugs.webkit.org/show_bug.cgi?id=54733

        The EFL APIs use EFL naming style, which includes both lower-cased and camel-cased,
        underscore-sparated values. But, style checking rule have found parameter_name errors
        in efl directories so far.

        * Scripts/webkitpy/style/checker.py: Add prameter_name rule's exception and efl directories.

2011-02-26  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        check-webkit-style should check for spaces after periods in comments
        https://bugs.webkit.org/show_bug.cgi?id=55253

        * Scripts/webkitpy/style/checkers/cpp.py: Added the check.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added tests
          and fixed the name of one related test.

2011-02-26  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        Make it possible to test the targetdensity-dpi support
        https://bugs.webkit.org/show_bug.cgi?id=55142

        Test the viewport meta tag feature targetdensity-dpi by
        adding extra arguments to dumpConfigurationForViewport

        Add the new arguments to the shared header and all
        implementation.

        * DumpRenderTree/LayoutTestController.cpp:
        (dumpConfigurationForViewportCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::dumpConfigurationForViewport):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::dumpConfigurationForViewport):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::dumpConfigurationForViewport):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::dumpConfigurationForViewport):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::dumpConfigurationForViewport):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79764.
        http://trac.webkit.org/changeset/79764
        https://bugs.webkit.org/show_bug.cgi?id=55295

        "broke Chromium builds" (Requested by rniwa on #webkit).

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):

2011-02-26  Yongjun Zhang  <yongjun_zhang@apple.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=48781

        Add a resource load delegate method to query if WebCore should paint the default broken image for failed images.

        Add a new resource load client method (shouldPaintBrokenImage).  WebKit client can decide if WebCore
        should paint the default broken image when an image fails to load or decode.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (setShouldPaintBrokenImageCallback):
        (LayoutTestController::staticFunctions):
        (LayoutTestController::setShouldPaintBrokenImage):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::shouldPaintBrokenImage):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:shouldPaintBrokenImageForURL:]):

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener() calls between tests.
        Some tests are using window.open() to change current window location.
        This changes window.opener property whose nullity is checked before
        showing xml viewer.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):

2011-02-25  Lukasz Slachciak  <l.slachciak@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Added EWebLauncher command line option to turn on/off frame flattening
        https://bugs.webkit.org/show_bug.cgi?id=54809

        * EWebLauncher/main.c: Handling -f option added.
        (on_key_down):
        (browserCreate):
        (main):

2011-02-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79324.
        http://trac.webkit.org/changeset/79324
        https://bugs.webkit.org/show_bug.cgi?id=55260

        Leopard Debug is once again running out of address space while
        linking (Requested by aroben on #webkit).

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-02-25  Tony Chang  <tony@chromium.org>

        Reviewed by James Robinson.

        Clean up temp files left by crashing DRTs on chromium-win
        https://bugs.webkit.org/show_bug.cgi?id=55182

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * BuildSlaveSupport/chromium/remove-crash-logs: Added.

2011-02-25  Adam Roben  <aroben@apple.com>

        Double-check that modifying the registry worked

        On Windows Vista/7 with UAC enabled, regtool will fail to modify the registry, but it will
        still return a successful exit code. So we double-check here that the value we tried to
        write to the registry was really written.

        Fixes <http://webkit.org/b/55227> old-run-webkit-tests falsely claims to be saving crash
        logs on Windows Vista/7

        Reviewed by Darin Adler.

        * Scripts/old-run-webkit-tests:
        (writeRegistryString): After trying to write the string value, check that it was really
        written.

2011-02-25  Adam Roben  <aroben@apple.com>

        Set the 32-bit post-mortem debugger on 64-bit OSes

        The post-mortem debugger is controlled by some registry values in
        HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug. On 64-bit OSes, you can either
        set the values in that key, which will be used for 64-bit apps, or in the equivalent key
        under Wow6432Node, which will be used for 32-bit apps. Since DumpRenderTree and
        WebKitTestRunner are 32-bit, we want to use the latter location.

        Fixes <http://webkit.org/b/55225> old-run-webkit-tests sets the post-mortem debugger for
        64-bit apps, but should set it for 32-bit apps instead

        Reviewed by Darin Adler.

        * Scripts/old-run-webkit-tests:
        (readRegistryString):
        (writeRegistryString):
        Pass --wow32 to regtool so it will get/set values beneath Wow6432Node, which is where
        Windows looks for the post-mortem debugger values when a 32-bit app crashes on a 64-bit OS.
        Passing --wow32 on a 32-bit OS will not have any effect.

2011-02-25  Adam Roben  <aroben@apple.com>

        Clean up code to set up crash log saving on Windows

        Fixes <http://webkit.org/b/55224> old-run-webkit-test's Windows registry code is ugly

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
        (readRegistryString):
        (writeRegistryString):
        Moved code to read strings from and write strings to the registry here...

        (setUpWindowsCrashLogSaving): ...from here.

2011-02-25  Adam Roben  <aroben@apple.com>

        Work around Cygwin's crash-suppression behavior

        Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which any processes it launches will
        inherit. This is bad for testing/debugging, as it causes the post-mortem debugger not to be
        invoked. (Cygwin does this because it makes crashes more UNIX-y.) We reset the error mode
        when our test apps launch to work around Cygwin's behavior.

        Fixes <http://webkit.org/b/55222> Test apps crash silently (without invoking post-mortem
        debugger) when launched from Cygwin 1.7

        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):
        * TestWebKitAPI/win/main.cpp:
        (main):
        * WebKitAPITest/main.cpp:
        (main):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformInitialize):
        Call ::SetErrorMode(0) to undo Cygwin's folly.

2011-02-24  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Revert the support for QNAM affined to a different thread.
        https://bugs.webkit.org/show_bug.cgi?id=55149

        Qt 4.8 will have QNAM use its own thread internally by default,
        no need to keep this complexity in WebKit.

        This mainly reverts:
        http://trac.webkit.org/changeset/73710
        http://trac.webkit.org/changeset/73712

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::~LauncherWindow):
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/webpage.cpp:
        (WebPage::WebPage):
        * QtTestBrowser/webpage.h:

2011-02-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add a script for creating gypi files
        https://bugs.webkit.org/show_bug.cgi?id=55113

        This is a trivial script to create gypi files from the source code in
        the current directory.

        * Scripts/make-gypi: Added.

2011-02-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79628.
        http://trac.webkit.org/changeset/79628
        https://bugs.webkit.org/show_bug.cgi?id=55195

        "broke chromium win tests" (Requested by dpranke on #webkit).

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:

2011-02-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        rebaseline-chromium-webkit-tests can't handle GPU variants
        https://bugs.webkit.org/show_bug.cgi?id=55002

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-02-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        nrwt: log command used to start web server to --verbose

        https://bugs.webkit.org/show_bug.cgi?id=55188

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:

2011-02-24  Victoria Kirst  <vrk@google.com>

        Reviewed by Mihai Parparita.

        [chromium] Move media-file.js and video-test.js back to media/ for UILayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=55089

        This adds an alias into the media/ directory so that http/tests/media
        tests can access the media resources when running in an httpd process.

        * Scripts/webkitperl/httpd.pm:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:

2011-02-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        nrwt: enable multiple processes by default on Chromium Win.

        https://bugs.webkit.org/show_bug.cgi?id=55163

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:

2011-02-24  Sam Weinig  <sam@webkit.org>

        Attempt to fix Qt.

        * WebKitTestRunner/TestInvocation.cpp:

2011-02-24  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r79598.
        http://trac.webkit.org/changeset/79598
        https://bugs.webkit.org/show_bug.cgi?id=55089

        Appears to be causing trouble with httpd on windows

        * Scripts/webkitperl/httpd.pm:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:

2011-02-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add basic pixel testing support to WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=55161

        * Scripts/old-run-webkit-tests:
        Don't print color space information when using WebKitTestRunner since
        we don't need to change the screen.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):
        Add call to initializePlatformDefaults.
        
        (WTR::InjectedBundle::done):
        Return a dictionary on completion with both the text output and pixel dump override.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        Add declaration for initializePlatformDefaults.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController):
        (WTR::LayoutTestController::dumpAsText):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::shouldDumpPixels):
        Make setting dumpAsText override the dump pixels preference.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm: Added.
        (WTR::InjectedBundle::initializePlatformDefaults):
        Set platform defaults matching DumpRenderTree.

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp: Added.
        (WTR::InjectedBundle::initializePlatformDefaults):
        * WebKitTestRunner/InjectedBundle/win/InjectedBundleWin.cpp: Added.
        (WTR::InjectedBundle::initializePlatformDefaults):
        Add stubs for initializePlatformDefaults.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::runTest):
        (WTR::TestController::runTestingServerLoop):
        (WTR::TestController::run):
        Parse expected pixel results out of stdin and setup the invocation with it.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):
        Initialize new members.

        (WTR::TestInvocation::~TestInvocation):
        (WTR::TestInvocation::setIsPixelTest):
        (WTR::sizeWebViewForCurrentTest):
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::dump):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:
        Dump pixels in addition to text by calling dumpPixelsAndCompareWithExpected.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        Use -[NSColorSpace genericRGBColorSpace] instead of the main screen color space.

        * WebKitTestRunner/mac/TestInvocationMac.mm: Added.
        (WTR::createCGContextFromPlatformView):
        (WTR::computeMD5HashStringForContext):
        (WTR::dumpBitmap):
        (WTR::forceRepaintFunction):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        Add mac specific pixel dumping support. Right now, we always pull pixels
        from the window server.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        Add new files.

2011-02-24  Chang Shu  <cshu@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Launch MiniBrowser if the test run is WebKit2. 
        https://bugs.webkit.org/show_bug.cgi?id=55145

        * Scripts/old-run-webkit-tests:
        * Scripts/run-launcher:
        * Scripts/webkitdirs.pm:

2011-02-24  Victoria Kirst  <vrk@google.com>

        Reviewed by Mihai Parparita.

        [chromium] Move media-file.js and video-test.js back to media/ for UILayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=55089

        This adds an alias into the media/ directory so that http/tests/media
        tests can access the media resources when running in an httpd process.

        * Scripts/webkitperl/httpd.pm:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:

2011-02-24  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r79570.
        http://trac.webkit.org/changeset/79570
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Breaks chromium build because glue/mocks/mock_web_frame.h/cc
        was not updated

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):

2011-02-24  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] add android 2.2 user agent to QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=55085

        Credit to Forrest Hodgkins to find right user-agent which works for youtube.
        * QtTestBrowser/useragentlist.txt:

2011-02-24  Adam Roben  <aroben@apple.com>

        Change FrameLoadDelegate to support any number of delegates with delayed work to process

        This makes our behavior match Mac more closely, and allows us to remove an incorrect
        assertion that was firing during some tests. (The assertion was claiming that there was
        never more than one delegate with delayed work to process, but that was not the case.)

        Fixes <http://webkit.org/b/55146> Assertion failure in FrameLoadDelegate::locationChangeDone
        when running http/tests/navigation/back-twice-without-commit.html

        Reviewed by Eric Carlson.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (delegatesWithDelayedWork): Added. Returns all FrameLoadDelegates that have delayed work to
        process. A single delegate may appear in this Vector more than once (just as, on Mac, a
        single delegate may have multiple performSelector requests).
        (processWorkTimer): Pass the HWND to ::KillTimer, for pedantic brownie points. Added an
        assertion that the timer firing is the shared process work timer. Instead of using the
        single, global "delegate waiting for timer" delegate, give all delegates that have delayed
        work to process a chance to process their work.
        (FrameLoadDelegate::locationChangeDone): If we don't already have an active timer for
        processing delayed work, create one. Then add ourselves to the delegatesWithDelayedWork
        Vector so our processWork function will be called when the timer fires.

2011-02-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Alexey Proskuryakov.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener() calls between tests.
        Some tests are using window.open() to change current window location.
        This changes window.opener property whose nullity is checked before
        showing xml viewer.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):

2011-02-24  Adam Roben  <aroben@apple.com>

        Don't trigger Windows builds for changes to WebCore.exp.in or the top-level GNUmakefile.am

        Fixes <http://webkit.org/b/55144> Windows builders should not have built r79343 or r79440,
        but did

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build): Loosened the pattern for GNUmakefile.am to include the
        top-level GNUmakefile.am, and loosened the pattern for .exp files to include WebCore.exp.in.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest): Added some more tests.

2011-02-24  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] MinGW build fails to link
        https://bugs.webkit.org/show_bug.cgi?id=55050

        Prepend the libraries of subcomponents instead of appending them
        to fix the library order according to the dependency of the libraries

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-02-24  Gabor Loki  <loki@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Remove ARMv5 Release buildbot.

        Remove ARMv5 Release buildbot, because there is very little difference
        between ARMv5 and ARMv7 Release bots, and there is also very little
        interest in ARMv5 build slave (compared to ARMv7).

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-02-22  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        fix revision number finding when creating git patches
        https://bugs.webkit.org/show_bug.cgi?id=55024

        HEAD~n does not walk merge commits correctly. git log however does.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2011-02-23  Kenneth Russell  <kbr@google.com>

        Unreviewed, rolling out r79387.
        https://bugs.webkit.org/show_bug.cgi?id=54885

        Reapply the code changes from r79038 since they weren't the root
        cause of the test timeouts.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::reset):

2011-02-23  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Make sure Symbian binary UIDs are unique

        * MiniBrowser/qt/MiniBrowser.pro: Resolve the UID collision with
        QtTestBrowser.pro by changing the UID.

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Rename PLATFORM(CF) to USE(CF)
        https://bugs.webkit.org/show_bug.cgi?id=53540

        * DumpRenderTree/config.h:

2011-02-23  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        nrwt: turn on multiprocessing on chromium_linux, clean up unit tests for worker model defaults
        https://bugs.webkit.org/show_bug.cgi?id=55016

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:

2011-02-23  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] DumpRenderTree --check-layout-test-sys-deps leaks 4 temp dirs
        https://bugs.webkit.org/show_bug.cgi?id=55004

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (WebKitSupportTestEnvironment::WebKitSupportTestEnvironment):
        (WebKitSupportTestEnvironment::~WebKitSupportTestEnvironment):
        (main): Use a C++ object to ensure that TearDownTestEnvironment
            gets called when --check-layout-test-sys-deps is called

2011-02-23  Gopal Raghavan  <gopal.1.raghavan@nokia.com>

        Reviewed by Anders Carlsson.

        [Qt] [Qt] check webkit style fails in qt/tests
        https://bugs.webkit.org/show_bug.cgi?id=54998

        check-webkit-style was complaining about missing config.h in WebKit/qt/test/qdeclarativewebview. This patch was originally part of 50222. Reviewer suggested to split and create a separate patch for checker.

        * Scripts/webkitpy/style/checker.py:

2011-02-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should dump as text if test path contains "dumpAsText/"
        https://bugs.webkit.org/show_bug.cgi?id=54873

        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::setShouldDumpAsText):
        (LayoutTestController::setShouldGeneratePixelResults):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (shouldDumpAsText):
        (dump):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (shouldDumpAsText):
        (runTest):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::isDumpAsTextTest):
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (shouldDumpAsText):
        (runTest):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):

2011-02-22  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Many tests started timing out on the chrome mac canaries around r79035
        https://bugs.webkit.org/show_bug.cgi?id=54885

        Revert the code changes, but not the Chromium DEPS roll, from
        r79038 to see whether this clears up the timing-out tests. Was not
        able to reproduce the timeouts locally with a Release mode build
        of DRT (on Snow Leopard).

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::reset):

2011-02-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by James Robinson.

        nrwt: --platform chromium-gpu doesn't work with --worker-model=processes
        https://bugs.webkit.org/show_bug.cgi?id=55009

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-02-18  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Ojan Vafai.

        Default to 500 for --exit-after-n-failures
        https://bugs.webkit.org/show_bug.cgi?id=54773

        Make 500 the default value for --exit-after-n-failures (ORWT bots
        already default to this as of r75726). Similarly, change the default for
        --exit-after-n-crashes-or-timeouts to 20.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-02-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] DRT needs an implementation of LayoutTestController.setSelectTrailingWhitespace
        https://bugs.webkit.org/show_bug.cgi?id=53603

        Add support for LayoutTestController.setSelectTrailingWhitespace by calling through
        to DumpRenderTreeSupportGtk for this functionality.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Always call LayoutTestController.setSelectTrailingWhitespace to
        false when reseting values between tests.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setSelectTrailingWhitespaceEnabled): Call LayoutTestController.setSelectTrailingWhitespace
        with the appropriate value.

2011-02-22  Adam Roben  <aroben@apple.com>

        Don't trigger a Windows build when the top-level ChangeLog changes

        r79320 is an example of a change that shouldn't have built on Windows, but did, because of
        this bug.

        Fixes <http://webkit.org/b/54957> Windows bots build when top-level ChangeLog changes, but
        shouldn't

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build): Modified the ChangeLog pattern to match the top-level
        ChangeLog, and re-sorted it in the list.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest): Added a test that ChangeLogs don't trigger builds.

2011-02-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r78691.
        http://trac.webkit.org/changeset/78691
        https://bugs.webkit.org/show_bug.cgi?id=54956

        Leopard Debug is successfully building again (Requested by
        aroben on #webkit).

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-02-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: flakyness of inspector tests.
        https://bugs.webkit.org/show_bug.cgi?id=54729

        As far as we have the protocol with sequence numbers we can simplify test harness support
        and drop out chomium specific methods.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        (DRTDevToolsAgent::sendMessageToInspectorFrontend):
        (DRTDevToolsAgent::runtimePropertyChanged):
        (DRTDevToolsAgent::asyncCall):
        (DRTDevToolsAgent::call):
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/DRTDevToolsCallArgs.cpp: Removed.
        * DumpRenderTree/chromium/DRTDevToolsCallArgs.h: Removed.
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::sendMessageToBackend):
        (DRTDevToolsClient::asyncCall):
        (DRTDevToolsClient::call):
        * DumpRenderTree/chromium/DRTDevToolsClient.h:

2011-02-22  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] Redesign the build system
        https://bugs.webkit.org/show_bug.cgi?id=51339

        Part 2.

        Build WebCore as a static library, compile the WebKit API and WebKit2 API
        in a final step and link to WebKit2, WebCore and JSC libraries to fix
        linking issues resulting from stripped away symbols.

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro: Remove superfluous includepaths.

2011-02-21  Lukasz Slachciak  <l.slachciak@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Restored spatial navigation option in EWebLauncher since #18662 bug is closed
        https://bugs.webkit.org/show_bug.cgi?id=54806

        * EWebLauncher/main.c:
        (on_key_down): calling ewk_view_setting_spatial_navigation_set when "F12" pressed added.

2011-02-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Kent Tamura.

        nrwt: revert behavior on 10.5 to "old-threads". It's possible
        that r79062 has introduced a bunch of flakiness, although I
        can't explain why right now. This change should restore the
        old behavior, and then we can look at the build logs to see
        if the tests stop timing out or being flaky.

        https://bugs.webkit.org/show_bug.cgi?id=54925

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:

2011-02-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        nrwt: fix typo causing us to try and repeatedly shut down the servers
        https://bugs.webkit.org/show_bug.cgi?id=54904

        * Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py:

2011-02-21  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Csaba Osztrogonác.

        REGRESSION(r79157):
        plugins/get-url-with-javascript-destroying-plugin.html make the
        next test crash
        https://bugs.webkit.org/show_bug.cgi?id=54863

        * GNUmakefile.am:

2011-02-20  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        test-webkitpy: stop skipping a bunch of tests on win32
        https://bugs.webkit.org/show_bug.cgi?id=54788

        * Scripts/webkitpy/common/net/testoutputset_unittest.py:
        * Scripts/webkitpy/test/main.py:

2011-02-20  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        Fix various bugs related to handling of dir separators and real
        vs. fake filesystems that were causing test-webkitpy to fail
        tests on win32. These bugs have a variety of causes but are
        lumped together because they should be easy to review.

        https://bugs.webkit.org/show_bug.cgi?id=54700

        * Scripts/webkitpy/common/net/testoutput.py:
          Here we were using os.path.sep but not escaping it prior to
          using in a regexp, which  caused bad things on win32.
        * Scripts/webkitpy/common/net/testoutput_unittest.py:
          Same here.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
          Here we were using the native filesystem instead of the mock
          filesystem, making some tests unnecessarily platform dependent.
          Also we weren't setting the default configuration for the
          TestChromiumWinPort.
        * Scripts/webkitpy/layout_tests/update_webgl_conformance_tests.py:
          Here we *shouldn't* use os.path.join(), just so the code becomes
          less platform dependent.
        * Scripts/webkitpy/style/checker.py:
          Here we should be using os.path.sep instead of "/"; the tests
          require the native filesystem.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
          Here the underlying code is using os.path.sep, so we probably
          should as well.
        * Scripts/webkitpy/style/test_expectations_unittest.py:
          Here we should be using the filesystem hanging of the port
          object (which is the mocked filesystem) rather than the native
          one.

2011-02-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej Stachowiak.

        Crash when a plug-in requests a javascript: url that destroys the plug-in
        https://bugs.webkit.org/show_bug.cgi?id=54837
        <rdar://problem/9005475>

        Add new plug-in test.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPN_GetURL):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        * DumpRenderTree/TestNetscapePlugIn/Tests/GetURLWithJavaScriptURLDestroyingPlugin.cpp: Added.
        (GetURLWithJavaScriptURLDestroyingPlugin::GetURLWithJavaScriptURLDestroyingPlugin):
        (GetURLWithJavaScriptURLDestroyingPlugin::NPP_New):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2011-02-19  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Make WinCE a core builder
        https://bugs.webkit.org/show_bug.cgi?id=54801

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-02-19  Lukasz Slachciak  <l.slachciak@samsung.com>

        Reviewed by Andreas Kling.

        Fixed problem with launching EWebLauncher with "run-launcher --efl". Incorrect path referring to non-existing .libs directory ws set.
        https://webkit.org/b/54778

        * Scripts/webkitdirs.pm:

2011-02-18  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style: Misses brace style error when the line with the { has a } in it.
        https://bugs.webkit.org/show_bug.cgi?id=54769

        * Scripts/webkitpy/style/checkers/cpp.py: Fixed the check for the close brace
          to only look after the last open brace, so that the open brace in this line
          "} else {" will still be able to trigger the error.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added related unit tests.

2011-02-18  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Martin Robinson.

        [Gtk] Re-enable meter tag support
        https://bugs.webkit.org/show_bug.cgi?id=54762

        Meter tag is supported on the Gtk port, enable it by default.

        * Scripts/build-webkit:

2011-02-18  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style falsely complains about WebKitGTK+ public headers
        https://bugs.webkit.org/show_bug.cgi?id=54650

        * Scripts/webkitpy/style/checker.py: Add some exceptions for the gtk files.
        * Scripts/webkitpy/style/checkers/cpp.py: Restrict the checks for WEBKIT_API
          to the chromium directory (and improved the checks slightly).
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added corresponding tests.

2011-02-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by James Robinson.

        new-run-webkit-tests: enable multiple processes by default on
        mac. This change removes the artificial restrictions we placed
        on the # of child processes we used with the old threading
        model, and switches to the new message-based model and multiple
        processes, where available. If multiple processes are not
        available (Leopard / Python 2.5), then we use the 'inline' model
        instead of the 'old-threads' model on the 'mac' port or one
        process on the 'chromium-mac' port. We need additional testing
        to see if the new 'threads' model works reliably and is worth
        supporting, or if we should just live with things being slightly
        slow.

        https://bugs.webkit.org/show_bug.cgi?id=54596

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-02-18  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r79047.
        http://trac.webkit.org/changeset/79047
        https://bugs.webkit.org/show_bug.cgi?id=54596

        Broke canary bots - please watch the canaries the next time
        you land this

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:

2011-02-18  Emil A Eklund  <eae@chromium.org>

        Reviewed by Darin Adler.

        Crash in EventHandler::sendContextMenuEventForKey
        https://bugs.webkit.org/show_bug.cgi?id=54495

        Add support for the context menu key (VK_APPS) to EventSender for
        platforms that support the key.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::keyDown):
        * DumpRenderTree/gtk/EventSender.cpp:
        (keyDownCallback):
        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::keyDown):
        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):

2011-02-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: enable multiple processes by default on mac
        https://bugs.webkit.org/show_bug.cgi?id=54596

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:

2011-02-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        Skip pretty patch unit tests if ruby isn't installed.

        https://bugs.webkit.org/show_bug.cgi?id=54699

        * Scripts/webkitpy/common/prettypatch_unittest.py:

2011-02-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        Skip mac.test_skipped_file_paths() when running on win32; the
        test has hardcoded '/' directory separators and since it's a
        port-specific test and we have coverage on other ports it's not
        worth it to make the test more generic.

        https://bugs.webkit.org/show_bug.cgi?id=54698

        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:

2011-02-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        Fix webkitpy.layout_tests.port.config_unittest to work on Win32.

        https://bugs.webkit.org/show_bug.cgi?id=54703

        * Scripts/webkitpy/layout_tests/port/config_unittest.py:

2011-02-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        Change the default port we're mocking out on win32 when we
        run mock_drt_unittest. Normally we'd default to the
        port-specific default, but that would be "win", which doesn't
        currently work.

        https://bugs.webkit.org/show_bug.cgi?id=54708

        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:

2011-02-18  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        [chromium] Clean up initialization of minimum timer interval
        https://bugs.webkit.org/show_bug.cgi?id=54772

        Use new GetForegroundTabTimerInterval function in webkit_support
        to reset the minimum timer interval before each test.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::reset):

2011-02-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        r78494 fixed the chromium_win unittest failing under win32,
        but not cygwin. This fixes cygwin as well.

        https://bugs.webkit.org/show_bug.cgi?id=54652

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

2011-02-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai, Mihai Parparita.

        new-run-webkit-tests: r78522 made it impossible to create a
        'chromium-win' or 'chromium-mac' port; they would always get the
        version tacked on to the end. It turns out that we actually need
        to be able to create these ports in order for
        rebaseline-chromium-webkit-tests to work correctly given the
        broken coverage of our layout bots. As soon as we get SL and
        Win 7 bots running reliably on the canaries, we can get rid of
        this change. Note that we only need to change the chromium_mac
        and win ports because linux doesn't yet use versions and that
        script doesn't work with non-chromium ports.

        Also, this change fixes a bug where we were using
        "platform/chromium-win-win7" and
        "platform/chromium-mac-snowleopard" as the baseline dirs for
        Win 7 and SL; we should've been using the generic directories
        instead since they are the newest versions of the os's.

        https://bugs.webkit.org/show_bug.cgi?id=54691

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-02-16  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Chromium][DRT] some PostDelayedTask() accesses possibly dangling this pointer.
        http://webkit.org/b/53899

        Replaced static invocation wrappers with MethodTask objects,
        which are removed on WebViewHost destructor.
        
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::requestCheckingOfText):
        (WebViewHost::scheduleAnimation):
        (WebViewHost::closeWidgetSoon):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost::HostMethodTask::HostMethodTask):
        (WebViewHost::HostMethodTask::runIfValid):
        (WebViewHost::taskList):

2011-02-07  Hayato Ito  <hayato@chromium.org>

        Reviewed by Ojan Vafai.

        Get rid of code which writes test results from test_type's
        compare_output() method.
        Writing test results now happens in single_test_runner, using
        newly introduced test_result_writer module.

        Subsequent patches will eliminate test_type/* classes.

        https://bugs.webkit.org/show_bug.cgi?id=53908

        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py: Added.
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2011-02-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        Add blacklist of remaining webkitpy/* modules that fail on
        Win32, so that test-webkitpy will at least run cleanly.

        https://bugs.webkit.org/show_bug.cgi?id=54709

        * Scripts/webkitpy/layout_tests/test/main.py:

2011-02-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Set a preference to ensure that scrollbars are in a predictable
        state for DRT.

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

2011-02-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        test-webkitpy doesn't work with the multiprocessing module on win32
        or cygwin, so we skip it for now.

        https://bugs.webkit.org/show_bug.cgi?id=54520

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/run_webkit_tests_unittest.py:

2011-02-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        Fix version, baseline_search_path for chromium-win-win7. Also
        fix chromium_win_unittests, and fix port_testcase.make_port()
        to correctly use the options passed into it and only set
        results_directory() if necessary.

        https://bugs.webkit.org/show_bug.cgi?id=54652

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:

2011-02-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        Fix a hang in new-run-webkit-tests when run with
        --dry-run --worker-model=processes

        https://bugs.webkit.org/show_bug.cgi?id=54595

        * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-02-17  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes after recent changes.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMinimumTimerInterval):
        * wx/build/settings.py:

2011-02-17  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] ImageDiff sometimes hangs
        https://bugs.webkit.org/show_bug.cgi?id=54641

        * DumpRenderTree/qt/ImageDiff.cpp: Clear actualImage and baselineImage after all comparison.
        (main):

2011-02-17  Peter Varga  <pvarga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        The run-sunspider --v8-suite doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=54660

        * Scripts/run-sunspider:

2011-02-17  Gabor Rapcsanyi  <rgabor@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [NRWT] Fix environment setup on Qt port.
        https://bugs.webkit.org/show_bug.cgi?id=54549

        * Scripts/webkitpy/layout_tests/port/qt.py:

2011-02-16  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Enable tiled backing store by default in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=54581

        Instead of a flag to turn it on, a new flag is defined to turn
        tiled backing store off.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):

2011-02-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Mihai Parparita.

        flaky test archive uploads are always 22 bytes long
        https://bugs.webkit.org/show_bug.cgi?id=54593

        Speculative fix for the 22-bytes bug.

        * Scripts/webkitpy/tool/bot/flakytestreporter.py:

2011-02-16  Anna Cavender  <annacc@chromium.org>

        Reviewed by Mihai Parparita.

        http/tests/media should be served over HTTP (not from local file)
        https://bugs.webkit.org/show_bug.cgi?id=54028

        Removed special file:// treatment of http/tests/media

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/base.py:

2011-02-16  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Ojan Vafai.

        ChangeLog.parse_latest_entry_from_file does not handle rolled over ChangeLogs
        https://bugs.webkit.org/show_bug.cgi?id=54609
        
        r78737 rolled over ChangeLogs, and webkit-patch complains when landing
        patches such as this one that are the first to add an entry to the
        ChangeLog (since they don't see a second date line to know where the
        entry ends).

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:

== Rolled over to ChangeLog-2011-02-16 ==
