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

        Crash when making NPRuntime calls with a null NPP pointer
        https://bugs.webkit.org/show_bug.cgi?id=100569
        <rdar://problem/11726426>
        <rdar://problem/12352836>

        Reviewed by Darin Adler.

        Finally bite the bullet and remove the assertion from NetscapePlugin::fromNPP. The WebKit1 equivalent of this
        function used to return the plug-in currently being initialized in NPP_New, but we've never done that in WebKit2
        and it has never been necessary. The crashes fixed here are not from calls underneath NPP_New so fixing it wouldn't
        do us any good anyway.
        
        Also, make the PluginDestructionProtector handle a null plug-in gracefully.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::PluginDestructionProtector::PluginDestructionProtector):
        (PluginDestructionProtector):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::fromNPP):

2012-10-26  Stephanie Lewis  <slewis@apple.com>

        Add pids to WebMemorySampleFiles.
        https://bugs.webkit.org/show_bug.cgi?id=100449.

        Reviewed by Tim Horton.

        Make it easier to associate WebMemorySamples with a process.  Add the pid to the filename and header.

        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::initializeTimers): Update notification.
        (WebKit::WebMemorySampler::stop): Update notification.
        (WebKit::WebMemorySampler::writeHeaders): dump pid in the header.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::processDidFinishLaunching): append pid to filename.

2012-10-26  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2][AC] Build fix after r132647.
        https://bugs.webkit.org/show_bug.cgi?id=100540

        Reviewed by Kenneth Rohde Christiansen.

        AC enabled build is broken after the latest refactoring of EFL WK2.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::displayTimerFired):
        (EwkViewImpl::informLoadCommitted):
        (EwkViewImpl::createGLSurface):
        (EwkViewImpl::enterAcceleratedCompositingMode):
        (EwkViewImpl::exitAcceleratedCompositingMode):
        (EwkViewImpl::informContentsSizeChange):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        (EwkViewImpl::pageViewportControllerClient):
        (EwkViewImpl::pageViewportController):
        (EwkViewImpl::evasGl):
        (EwkViewImpl::evasGlContext):
        (EwkViewImpl::evasGlSurface):
        (EwkViewImpl::resetEvasGlSurface):
        * UIProcess/API/efl/ewk_view.cpp:
        (mapToWebContent):
        (_ewk_view_smart_calculate):

2012-10-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Get rid of C'ism in text checker API
        https://bugs.webkit.org/show_bug.cgi?id=100513

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Text_Checker a C++ class and move the
        WebKitTextChecker code to this new class. This
        gets rid of the C'ism in the text checker code
        and make it consistent with other Ewk classes.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::Ewk_Context):
        * UIProcess/API/efl/ewk_settings.cpp:
        (spellCheckingLanguagesSetUpdate):
        (ewk_settings_continuous_spell_checking_enabled_set):
        (ewk_settings_spell_checking_available_languages_get):
        (ewk_settings_spell_checking_languages_get):
        * UIProcess/API/efl/ewk_text_checker.cpp:
        (ClientCallbacks):
        (textCheckerEnchant):
        (clientCallbacks):
        (isContinuousSpellCheckingEnabled):
        (setContinuousSpellCheckingEnabled):
        (uniqueSpellDocumentTag):
        (closeSpellDocumentWithTag):
        (checkSpellingOfString):
        (guessesForWord):
        (learnWord):
        (ignoreWord):
        (Ewk_Text_Checker):
        (Ewk_Text_Checker::availableSpellCheckingLanguages):
        (Ewk_Text_Checker::updateSpellCheckingLanguages):
        (Ewk_Text_Checker::loadedSpellCheckingLanguages):
        (Ewk_Text_Checker::initialize):
        * UIProcess/API/efl/ewk_text_checker_private.h:
        (Ewk_Text_Checker):
        * UIProcess/efl/WebKitTextChecker.cpp: Removed.
        * UIProcess/efl/WebKitTextChecker.h: Removed.

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

        [EFL][WK2] Clean up construction/destruction code in Ewk_view
        https://bugs.webkit.org/show_bug.cgi?id=100232

        Reviewed by Kenneth Rohde Christiansen.

        Simplified a lot of initialization and destruction code of Ewk_view and EwkViewImpl
        put all the impl stuff to its constructor and destructor, also made EwkViewImpl member
        variables private.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (pageViewMap):
        (EwkViewImpl::addToPageViewMap):
        (EwkViewImpl::removeFromPageViewMap):
        (EwkViewImpl::viewFromPageViewMap):
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::~EwkViewImpl):
        (EwkViewImpl::wkPage):
        (EwkViewImpl::title):
        (EwkViewImpl::setThemePath):
        (EwkViewImpl::customTextEncodingName):
        (EwkViewImpl::setCustomTextEncodingName):
        (EwkViewImpl::informIconChange):
        (EwkViewImpl::informWebProcessCrashed):
        (EwkViewImpl::updateTextInputState):
        (EwkViewImpl::informURLChange):
        (EwkViewImpl::onFaviconChanged):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebKit):
        (EwkViewImpl):
        (EwkViewImpl::view):
        (EwkViewImpl::page):
        (EwkViewImpl::ewkContext):
        (EwkViewImpl::backForwardList):
        * UIProcess/API/efl/ewk_settings.cpp:
        (Ewk_Settings::preferences):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_focus_in):
        (_ewk_view_smart_focus_out):
        (_ewk_view_smart_mouse_wheel):
        (_ewk_view_smart_mouse_down):
        (_ewk_view_smart_mouse_up):
        (_ewk_view_smart_mouse_move):
        (_ewk_view_smart_key_down):
        (_ewk_view_smart_key_up):
        (_ewk_view_on_show):
        (_ewk_view_on_hide):
        (_ewk_view_smart_add):
        (_ewk_view_smart_del):
        (_ewk_view_smart_calculate):
        (_ewk_view_smart_color_set):
        (createEwkViewSmartClass):
        (createEwkView):
        (ewk_view_base_add):
        (ewk_view_smart_add):
        (ewk_view_add_with_context):
        (ewk_view_url_set):
        (ewk_view_reload):
        (ewk_view_reload_bypass_cache):
        (ewk_view_stop):
        (ewk_view_load_progress_get):
        (ewk_view_scale_set):
        (ewk_view_scale_get):
        (ewk_view_device_pixel_ratio_set):
        (ewk_view_device_pixel_ratio_get):
        (ewk_view_back):
        (ewk_view_forward):
        (ewk_view_intent_deliver):
        (ewk_view_back_possible):
        (ewk_view_forward_possible):
        (ewk_view_back_forward_list_get):
        (ewk_view_html_string_load):
        (ewk_view_text_find):
        (ewk_view_text_find_highlight_clear):
        (ewk_view_text_matches_count):
        (ewk_view_feed_touch_event):
        (ewk_view_inspector_show):
        (ewk_view_inspector_close):
        (ewk_view_pagination_mode_set):
        (ewk_view_pagination_mode_get):

2012-10-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Initialize Ewk_Context class members in initialization list
        https://bugs.webkit.org/show_bug.cgi?id=100503

        Reviewed by Kenneth Rohde Christiansen.

        Move Ewk_Context class members initialization from the
        constructor body to the initialization list for
        efficiency.

        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::Ewk_Context):

2012-10-26  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        LayerTreeCoordinator: Make sure that dependent layers are deleted before their directly composited image
        https://bugs.webkit.org/show_bug.cgi?id=100495

        Reviewed by Kenneth Rohde Christiansen.

        Since r128980 layers removals are delayed until we flush the layer tree.
        This causes a crash if such a layer had a directly composited image since
        the image is now deleted while the layer is still active in the UI process
        and tries to access a deleted backing store.

        Fix it by delaying the directly composited image removal as well.

        Fixes a crash in tst_QQuickWebView::basicRenderingSanity since showWebView is
        called first and loads direct-image-compositing.html.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h: 
        (LayerTreeRenderer): Remove unused variable.
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):
        (WebKit::LayerTreeCoordinator::releaseImageBackingStore):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-10-26  Regina Chung  <heejin.r.chung@samsung.com>

        [EFL][WK2] Enable WebGL
        https://bugs.webkit.org/show_bug.cgi?id=97652

        Reviewed by Gyuyoung Kim.

        Set WebGLEnabled to true when WebGL is enabled.

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_initialize):

2012-10-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add Ewk_Color_Picker API
        https://bugs.webkit.org/show_bug.cgi?id=100472

        Reviewed by Kenneth Rohde Christiansen.

        Move the color picker code out of EwkViewImpl and into
        a new Ewk_Color_Picker class to avoid cluttering the
        view code.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::requestColorPicker):
        (EwkViewImpl::dismissColorPicker):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_color_picker.cpp: Added.
        (Ewk_Color_Picker::Ewk_Color_Picker):
        (Ewk_Color_Picker::setColor):
        (Ewk_Color_Picker::color):
        (ewk_color_picker_color_set):
        (ewk_color_picker_color_get):
        * UIProcess/API/efl/ewk_color_picker.h: Added.
        * UIProcess/API/efl/ewk_color_picker_private.h: Added.
        (Ewk_Color_Picker):
        (Ewk_Color_Picker::create):
        * UIProcess/API/efl/ewk_view.cpp:
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_color_picker.cpp: Added.
        (onColorPickerDone):
        (setColorPickerColor):
        (showColorPicker):
        (hideColorPicker):
        (hideColorPickerByRemovingElement):
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::showColorPicker):

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

        Unreviewed, rolling out r132601.
        http://trac.webkit.org/changeset/132601
        https://bugs.webkit.org/show_bug.cgi?id=100494

        It broke the Qt build (Requested by Ossy on #webkit).

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_initialize):

2012-10-26  Regina Chung  <heejin.r.chung@samsung.com>

        [EFL][WK2] Enable WebGL
        https://bugs.webkit.org/show_bug.cgi?id=97652

        Reviewed by Gyuyoung Kim.

        Set WebGLEnabled to true when WebGL is enabled.

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_initialize):

2012-10-26  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Add feature flags for CSS Device Adaptation
        https://bugs.webkit.org/show_bug.cgi?id=95960

        Reviewed by Kenneth Rohde Christiansen.

        * Configurations/FeatureDefines.xcconfig:

2012-10-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Move input method code out of EwkViewImpl
        https://bugs.webkit.org/show_bug.cgi?id=100468

        Reviewed by Kenneth Rohde Christiansen.

        Move input method code out of EwkViewImpl and into
        a new InputMethodContextEfl class to avoid cluttering
        the view code.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::inputMethodContext):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebKit):
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_mouse_up):
        (_ewk_view_smart_key_down):
        * UIProcess/efl/InputMethodContextEfl.cpp: Added.
        (WebKit):
        (WebKit::InputMethodContextEfl::InputMethodContextEfl):
        (WebKit::InputMethodContextEfl::~InputMethodContextEfl):
        (WebKit::InputMethodContextEfl::onIMFInputSequenceComplete):
        (WebKit::InputMethodContextEfl::onIMFPreeditSequenceChanged):
        (WebKit::InputMethodContextEfl::createIMFContext):
        (WebKit::InputMethodContextEfl::handleMouseUpEvent):
        (WebKit::InputMethodContextEfl::handleKeyDownEvent):
        (WebKit::InputMethodContextEfl::updateTextInputState):
        * UIProcess/efl/InputMethodContextEfl.h: Added.
        (WebKit):
        (InputMethodContextEfl):
        (WebKit::InputMethodContextEfl::create):
        * UIProcess/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::updateTextInputState):

2012-10-26  Jaehun Lim  <ljaehun.lim@samsung.com>

        Implement {get,set}FloatValueForKey
        https://bugs.webkit.org/show_bug.cgi?id=100452

        Reviewed by Anders Carlsson.

        Implement missing functions in WebPreferencesStore.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::setFloatValueForKey):
        (WebKit):
        (WebKit::WebPreferencesStore::getFloatValueForKey):

2012-10-25  Byungwoo Lee  <bw80.lee@samsung.com>

        [WK2] Use per destination ID message receivers for DownloadProxy.
        https://bugs.webkit.org/show_bug.cgi?id=100342

        Reviewed by Anders Carlsson.

        Per destination ID message receivers were proposed in r132386.
        IPC messages of DownloadProxy use download ID for destination ID,
        so the messages should be handled by the messsage receiver that was
        newly proposed.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::createDownloadProxy):
        (WebKit::WebContext::downloadFinished):
        (WebKit::WebContext::addMessageReceiver):
        (WebKit):
        (WebKit::WebContext::removeMessageReceiver):
        * UIProcess/WebContext.h:
        (WebContext):

2012-10-25  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add Ewk_Popup_Menu API
        https://bugs.webkit.org/show_bug.cgi?id=100404

        Reviewed by Kenneth Rohde Christiansen.

        Add new Ewk_Popup_Menu API to complete the existing
        Ewk_Popup_Menu_Item one. This way, we can move the
        popup menu code out of Ewk_View.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::~EwkViewImpl):
        (EwkViewImpl::requestPopupMenu):
        (EwkViewImpl::closePopupMenu):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_popup_menu.cpp: Added.
        (Ewk_Popup_Menu::Ewk_Popup_Menu):
        (Ewk_Popup_Menu::~Ewk_Popup_Menu):
        (Ewk_Popup_Menu::close):
        (Ewk_Popup_Menu::items):
        (Ewk_Popup_Menu::selectedIndex):
        (Ewk_Popup_Menu::setSelectedIndex):
        (ewk_popup_menu_close):
        (ewk_popup_menu_selected_index_set):
        (ewk_popup_menu_selected_index_get):
        (ewk_popup_menu_items_get):
        * UIProcess/API/efl/ewk_popup_menu.h: Added.
        * UIProcess/API/efl/ewk_popup_menu_private.h: Copied from Source/WebKit2/UIProcess/efl/WebPopupMenuProxyEfl.cpp.
        (WebKit):
        (Ewk_Popup_Menu):
        (Ewk_Popup_Menu::create):
        * UIProcess/API/efl/ewk_view.cpp:
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_popup_menu.cpp: Added.
        (checkBasicPopupMenuItem):
        (selectItemAfterDelayed):
        (showPopupMenu):
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        * UIProcess/efl/WebPopupMenuProxyEfl.cpp:
        (WebKit::WebPopupMenuProxyEfl::hidePopupMenu):

2012-10-25  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Close the IconDatabase before the WebContext gets destroyed
        https://bugs.webkit.org/show_bug.cgi?id=100389

        Reviewed by Alexis Menard.

        The WebContext normally gets destroyed 60 seconds after the last page is
        closed and will take down the WebIconDatabase with itself if nothing
        holds a reference to it at this moment.
        We need to close the IconDatabase explicitely before this happens
        to terminate it cleanly and avoid leaking its thread.

        * UIProcess/qt/QtWebIconDatabaseClient.cpp:
        (WebKit::QtWebIconDatabaseClient::~QtWebIconDatabaseClient):

2012-10-25  Dominik Röttsches  <dominik.rottsches@intel.com>

        Conditionalize XHR timeout support
        https://bugs.webkit.org/show_bug.cgi?id=100356

        Reviewed by Adam Barth.

        Adding XHR_TIMEOUT feature to conditionalize this on ports without network backend support.
        Defaults to ON on Mac since the Mac NSUrlConnection based backend has setTimeoutInterval support.

        * Configurations/FeatureDefines.xcconfig:

2012-10-25  Tim Horton  <timothy_horton@apple.com>

        Only full-page PDFPlugins should purport to handle page scale changes
        https://bugs.webkit.org/show_bug.cgi?id=99635

        Reviewed by Sam Weinig.

        PDFPlugin should only handle page scale factor changes itself if it's in the main frame.
        Subframe PDFs will act like images, zooming with the page.

        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (PDFPlugin): Move implementation of handlesPageScaleFactor() to PDFPlugin.mm.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::pdfDocumentDidLoad): Only copy PDFLayerController's default autoscale magnification to PluginView's
        notion of the current scale factor if we're supposed to be handling page scale factor changes.
        (WebKit::PDFPlugin::geometryDidChange): Only update PDFLayerController's magnification from the page scale factor
        if we're supposed to be handling page scale factor changes.
        (WebKit::PDFPlugin::handlesPageScaleFactor): We should only handle page scale factor changes if we're in the main frame.

2012-10-25  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Move non-API classes out of UIProcess/API/efl
        https://bugs.webkit.org/show_bug.cgi?id=100391

        Reviewed by Kenneth Rohde Christiansen.

        Move non-API classes from UIProcess/API/efl to
        UIProcess/efl for clarity.

        * PlatformEfl.cmake:
        * UIProcess/efl/BatteryProvider.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/BatteryProvider.cpp.
        (toBatteryProvider):
        (startUpdatingCallback):
        (stopUpdatingCallback):
        (BatteryProvider::~BatteryProvider):
        (BatteryProvider::create):
        (BatteryProvider::BatteryProvider):
        (BatteryProvider::startUpdating):
        (BatteryProvider::stopUpdating):
        (BatteryProvider::didChangeBatteryStatus):
        * UIProcess/efl/BatteryProvider.h: Renamed from Source/WebKit2/UIProcess/API/efl/BatteryProvider.h.
        (WebKit):
        (BatteryProvider):
        * UIProcess/efl/NetworkInfoProvider.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/NetworkInfoProvider.cpp.
        (toNetworkInfoProvider):
        (startUpdatingCallback):
        (stopUpdatingCallback):
        (getBandwidthCallback):
        (isMeteredCallback):
        (NetworkInfoProvider::create):
        (NetworkInfoProvider::NetworkInfoProvider):
        (NetworkInfoProvider::~NetworkInfoProvider):
        (NetworkInfoProvider::bandwidth):
        (NetworkInfoProvider::metered):
        (NetworkInfoProvider::startUpdating):
        (NetworkInfoProvider::stopUpdating):
        * UIProcess/efl/NetworkInfoProvider.h: Renamed from Source/WebKit2/UIProcess/API/efl/NetworkInfoProvider.h.
        (WebKit):
        (NetworkInfoProvider):
        * UIProcess/efl/PageClientImpl.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp.
        (WebKit):
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::~PageClientImpl):
        (WebKit::PageClientImpl::viewImpl):
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        (WebKit::PageClientImpl::setViewNeedsDisplay):
        (WebKit::PageClientImpl::displayView):
        (WebKit::PageClientImpl::scrollView):
        (WebKit::PageClientImpl::viewSize):
        (WebKit::PageClientImpl::isViewWindowActive):
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::isViewInWindow):
        (WebKit::PageClientImpl::processDidCrash):
        (WebKit::PageClientImpl::didRelaunchProcess):
        (WebKit::PageClientImpl::pageClosed):
        (WebKit::PageClientImpl::toolTipChanged):
        (WebKit::PageClientImpl::setCursor):
        (WebKit::PageClientImpl::setCursorHiddenUntilMouseMoves):
        (WebKit::PageClientImpl::didChangeViewportProperties):
        (WebKit::PageClientImpl::registerEditCommand):
        (WebKit::PageClientImpl::clearAllEditCommands):
        (WebKit::PageClientImpl::canUndoRedo):
        (WebKit::PageClientImpl::executeUndoRedo):
        (WebKit::PageClientImpl::convertToDeviceSpace):
        (WebKit::PageClientImpl::convertToUserSpace):
        (WebKit::PageClientImpl::screenToWindow):
        (WebKit::PageClientImpl::windowToScreen):
        (WebKit::PageClientImpl::doneWithKeyEvent):
        (WebKit::PageClientImpl::doneWithTouchEvent):
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::createContextMenuProxy):
        (WebKit::PageClientImpl::createColorChooserProxy):
        (WebKit::PageClientImpl::setFindIndicator):
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode):
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode):
        (WebKit::PageClientImpl::updateAcceleratedCompositingMode):
        (WebKit::PageClientImpl::didChangeScrollbarsForMainFrame):
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomRepresentation):
        (WebKit::PageClientImpl::customRepresentationZoomFactor):
        (WebKit::PageClientImpl::setCustomRepresentationZoomFactor):
        (WebKit::PageClientImpl::flashBackingStoreUpdates):
        (WebKit::PageClientImpl::findStringInCustomRepresentation):
        (WebKit::PageClientImpl::countStringMatchesInCustomRepresentation):
        (WebKit::PageClientImpl::updateTextInputState):
        (WebKit::PageClientImpl::handleDownloadRequest):
        (WebKit::PageClientImpl::pageDidRequestScroll):
        (WebKit::PageClientImpl::didChangeContentsSize):
        (WebKit::PageClientImpl::didRenderFrame):
        (WebKit::PageClientImpl::pageTransitionViewportReady):
        * UIProcess/efl/PageClientImpl.h: Renamed from Source/WebKit2/UIProcess/API/efl/PageClientImpl.h.
        (WebKit):
        (PageClientImpl):
        (WebKit::PageClientImpl::create):
        (WebKit::PageClientImpl::setPageViewportController):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/PageViewportControllerClientEfl.cpp.
        (WebKit):
        (WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::~PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::drawingArea):
        (WebKit::PageViewportControllerClientEfl::setRendererActive):
        (WebKit::PageViewportControllerClientEfl::display):
        (WebKit::PageViewportControllerClientEfl::updateViewportSize):
        (WebKit::PageViewportControllerClientEfl::setVisibleContentsRect):
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):
        (WebKit::PageViewportControllerClientEfl::setViewportPosition):
        (WebKit::PageViewportControllerClientEfl::setContentsScale):
        (WebKit::PageViewportControllerClientEfl::didResumeContent):
        (WebKit::PageViewportControllerClientEfl::didChangeVisibleContents):
        (WebKit::PageViewportControllerClientEfl::didChangeViewportAttributes):
        (WebKit::PageViewportControllerClientEfl::setController):
        * UIProcess/efl/PageViewportControllerClientEfl.h: Renamed from Source/WebKit2/UIProcess/API/efl/PageViewportControllerClientEfl.h.
        (WebKit):
        (PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::create):
        (WebKit::PageViewportControllerClientEfl::viewSize):
        (WebKit::PageViewportControllerClientEfl::scaleFactor):
        (WebKit::PageViewportControllerClientEfl::scrollPosition):
        * UIProcess/efl/VibrationProvider.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/VibrationProvider.cpp.
        (Ewk_Vibration_Client):
        (Ewk_Vibration_Client::Ewk_Vibration_Client):
        (toVibrationProvider):
        (vibrateCallback):
        (cancelVibrationCallback):
        (VibrationProvider::create):
        (VibrationProvider::VibrationProvider):
        (VibrationProvider::~VibrationProvider):
        (VibrationProvider::vibrate):
        (VibrationProvider::cancelVibration):
        (VibrationProvider::setVibrationClientCallbacks):
        * UIProcess/efl/VibrationProvider.h: Renamed from Source/WebKit2/UIProcess/API/efl/VibrationProvider.h.
        (WebKit):
        (VibrationProvider):
        * UIProcess/efl/WebKitTextChecker.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp.
        (WebKit):
        (WebKit::isContinuousSpellCheckingEnabled):
        (WebKit::setContinuousSpellCheckingEnabled):
        (WebKit::uniqueSpellDocumentTag):
        (WebKit::closeSpellDocumentWithTag):
        (WebKit::checkSpellingOfString):
        (WebKit::guessesForWord):
        (WebKit::learnWord):
        (WebKit::ignoreWord):
        (WebKit::availableSpellCheckingLanguages):
        (WebKit::updateSpellCheckingLanguages):
        (WebKit::loadedSpellCheckingLanguages):
        * UIProcess/efl/WebKitTextChecker.h: Renamed from Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.h.
        (WebKit):

2012-10-25  Brady Eidson  <beidson@apple.com>

        Allow LoaderStrategy to override the ResourceLoadScheduler
        https://bugs.webkit.org/show_bug.cgi?id=100355

        Reviewed by Anders Carlsson.

        Add a WebKit2 subclass of ResourceLoadScheduler that currently adds no new functionality:
        * WebProcess/Network/WebResourceLoadScheduler.cpp: 
        (WebKit::WebResourceLoadScheduler::~WebResourceLoadScheduler):
        * WebProcess/Network/WebResourceLoadScheduler.h: 

        WebProcess hangs on to the default shared WebResourceLoadScheduler:
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::webResourceLoadScheduler):

        If the NetworkProcess is enabled, return the new WebResourceLoadScheduler:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::resourceLoadScheduler):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

        * WebKit2.xcodeproj/project.pbxproj:

2012-10-25  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Remove some C'ism from EwkView
        https://bugs.webkit.org/show_bug.cgi?id=100370

        Reviewed by Kenneth Rohde Christiansen.

        Remove a lot of C'ism from EwkView:
        - Make more members private and add C++ methods to
        EwkViewImpl for the public C API to use
        - Use smart pointers when possible instead of raw
        ones
        - Use C++ naming conventions for callback functions
        and define them as static methods in EwkViewImpl.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::onIMFInputSequenceComplete):
        (EwkViewImpl::onIMFPreeditSequenceChanged):
        (EwkViewImpl::createIMFContext):
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::~EwkViewImpl):
        (EwkViewImpl::setCursor):
        (EwkViewImpl::setColorPickerColor):
        (EwkViewImpl::isFocused):
        (EwkViewImpl::isVisible):
        (EwkViewImpl::title):
        (EwkViewImpl::inputMethodContext):
        (EwkViewImpl::themePath):
        (EwkViewImpl::setThemePath):
        (EwkViewImpl::customTextEncodingName):
        (EwkViewImpl::setCustomTextEncodingName):
        (EwkViewImpl::setMouseEventsEnabled):
        (EwkViewImpl::setTouchEventsEnabled):
        (EwkViewImpl::informIconChange):
        (EwkViewImpl::requestColorPicker):
        (EwkViewImpl::dismissColorPicker):
        (EwkViewImpl::updateTextInputState):
        (EwkViewImpl::informURLChange):
        (EwkViewImpl::onMouseDown):
        (EwkViewImpl::onMouseUp):
        (EwkViewImpl::onMouseMove):
        (EwkViewImpl::feedTouchEvents):
        (EwkViewImpl::onTouchDown):
        (EwkViewImpl::onTouchUp):
        (EwkViewImpl::onTouchMove):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebCore):
        (EwkViewImpl::ewkContext):
        (EwkViewImpl::settings):
        (EwkViewImpl):
        (EwkViewImpl::url):
        (EwkViewImpl::faviconURL):
        (EwkViewImpl::mouseEventsEnabled):
        (EwkViewImpl::touchEventsEnabled):
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::didRelaunchProcess):
        (WebKit::PageClientImpl::handleDownloadRequest):
        * UIProcess/API/efl/ewk_settings_private.h:
        (Ewk_Settings::create):
        (Ewk_Settings::Ewk_Settings):
        (Ewk_Settings):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_mouse_up):
        (_ewk_view_smart_key_down):
        (_ewk_view_smart_add):
        (ewk_view_context_get):
        (ewk_view_url_get):
        (ewk_view_icon_url_get):
        (ewk_view_settings_get):
        (ewk_view_title_get):
        (ewk_view_theme_set):
        (ewk_view_theme_get):
        (ewk_view_setting_encoding_custom_get):
        (ewk_view_setting_encoding_custom_set):
        (ewk_view_mouse_events_enabled_set):
        (ewk_view_mouse_events_enabled_get):
        (ewk_view_color_picker_color_set):
        (ewk_view_touch_events_enabled_set):
        (ewk_view_touch_events_enabled_get):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

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

        Assertion failure trying to dispatch notification messages
        https://bugs.webkit.org/show_bug.cgi?id=100387
        <rdar://problem/12573195>

        Reviewed by Jessie Berlin.

        Pass a zero destination ID when sending WebNotificationManagerProxy messages; they are not
        used by the UI process and since the WebNotificationManagerProxy message receiver is global
        passing a non-zero destination ID would cause the aforementioned assertion failure.

        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::cancel):
        (WebKit::WebNotificationManager::clearNotifications):
        (WebKit::WebNotificationManager::didDestroyNotification):

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

        REGRESSION (r131686): Crashes in NSToolTipManager
        https://bugs.webkit.org/show_bug.cgi?id=99792

        Now that NSToolTip related parts of this change have been rolled out, roll out
        the initial crash fix, too. We have no direct evidence that it's to blame, but it
        doesn't serve any specific purpose any more.

        * UIProcess/API/mac/WKView.mm: (-[WKView viewDidMoveToWindow]):

2012-10-25  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Memory leak in _ewk_view_preedit_changed()
        https://bugs.webkit.org/show_bug.cgi?id=100380

        Reviewed by Antonio Gomes.

        Fix memory leak in _ewk_view_preedit_changed(). The buffer
        returned by ecore_imf_context_preedit_string_get() is never
        freed.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (_ewk_view_preedit_changed):

2012-10-25  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2][AC] Regression(132392) infinite loop when displaying certain animations.
        https://bugs.webkit.org/show_bug.cgi?id=100288

        Reviewed by Kenneth Rohde Christiansen.

        When PageClientImpl::setViewNeedsDisplay is called, start a 0 length timer.
        That breaks the synchronous loop we were experiencing when ewk_view_display
        was called directly.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::displayTimerFired):
        (EwkViewImpl::redrawRegion):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):

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

        Add setMediaTypeOverride to window.internals.settings
        https://bugs.webkit.org/show_bug.cgi?id=100249

        Reviewed by Kenneth Rohde Christiansen.

        Exported WebCore::Settings::setMediaTypeOverride(WTF::String const&) for WIN port.

        * win/WebKit2.def:

2012-10-25  KyungTae Kim  <ktf.kim@samsung.com>

        [WK2][EFL] Add ewk_view_pagination_mode_set/get() APIs
        https://bugs.webkit.org/show_bug.cgi?id=100213

        Reviewed by Gyuyoung Kim.

        Add ewk_view_pagination_mode_set/get() APIs for paginated display.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_pagination_mode_set):
        (ewk_view_pagination_mode_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

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

        [EFL][AC] Fix build break when AC is enabled
        https://bugs.webkit.org/show_bug.cgi?id=100367

        Unreviewed build fix after r132405.

        * UIProcess/API/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):

2012-10-25  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] Add missing namespace.
        https://bugs.webkit.org/show_bug.cgi?id=100251

        Reviewed by Kenneth Rohde Christiansen.

        Add 'WebKit' namespace for BatteryProvider, NetworkInfoProvider and
        VibrationProvider.

        * UIProcess/API/efl/BatteryProvider.h:
        (WebKit):
        * UIProcess/API/efl/NetworkInfoProvider.cpp:
        * UIProcess/API/efl/NetworkInfoProvider.h:
        (WebKit):
        * UIProcess/API/efl/VibrationProvider.cpp:
        * UIProcess/API/efl/VibrationProvider.h:
        (WebKit):
        * UIProcess/API/efl/ewk_context_private.h:
        (WebKit):
        (Ewk_Context):

2012-10-25  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Detach WebContext's clients from QtWebContext
        https://bugs.webkit.org/show_bug.cgi?id=100224

        Reviewed by Simon Hausmann.

        The lifetime of WebContext isn't bound to QtWebContext and we wouldn't
        keep a reference to our WebContext and would create a new one if a new
        QQuickWebView/QtWebContext was created after we destroyed our QtWebContext.
        This would cause a new WebContext and a new web process and somehow the
        new WebContext could pick the IPC messages from the old WebProcess
        and this would cause the new download client to receive messages about
        downloads he doesn't know about and crash.

        We assumed in the past that we would need multiple WebContext to allow
        multiple web processes but this assumption doesn't hold anymore with
        the work on ProcessModelMultipleSecondaryProcesses.
        This patch enforces the use of a single WebContext by:
        - Holding a single instance of QtWebIconDatabaseClient and QtDownloadManager
        statically in QtWebContext
        - Removing the context ID from QWebIconImageProvider's URLs
        - Using QtWebContext as a temporary wrapper handle on WebContext to
        initialize the WebContext's clients and allow us creating the first web page

        platformInvalidateContext is used to clean up static global instances
        when the WebContext is getting destroyed.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::handleDownloadRequest):
        * UIProcess/API/qt/qwebiconimageprovider.cpp:
        (QWebIconImageProvider::iconURLForPageURLInContext):
        (QWebIconImageProvider::requestImage):
        * UIProcess/qt/QtWebContext.cpp:
        (WebKit):
        (WebKit::QtWebContext::QtWebContext):
        (WebKit::QtWebContext::~QtWebContext):
        (WebKit::QtWebContext::create):
        (WebKit::QtWebContext::defaultContext):
        (WebKit::QtWebContext::downloadManager):
        (WebKit::QtWebContext::iconDatabase):
        (WebKit::QtWebContext::invalidateContext):
        * UIProcess/qt/QtWebContext.h:
        (QtWebContext):
        * UIProcess/qt/QtWebIconDatabaseClient.cpp:
        (WebKit::QtWebIconDatabaseClient::QtWebIconDatabaseClient):
        * UIProcess/qt/QtWebIconDatabaseClient.h:
        (WebKit):
        (QtWebIconDatabaseClient):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformInvalidateContext):

2012-10-25  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Make the context injected bundle client static
        https://bugs.webkit.org/show_bug.cgi?id=100223

        Reviewed by Kenneth Rohde Christiansen.

        It doesn't need any data from QtWebContext.

        * UIProcess/qt/QtWebContext.cpp:
        (WebKit::didReceiveMessageFromInjectedBundle):
        (WebKit):
        (WebKit::initializeContextInjectedBundleClient):
        (WebKit::QtWebContext::defaultContext):
        * UIProcess/qt/QtWebContext.h:
        (QtWebContext):

2012-10-25  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Get rid of Ewk_View private C API (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=100331

        Reviewed by Kenneth Rohde Christiansen.

        Convert most of the remaining Ewk_View private C API
        into C++ methods in EwkViewImpl class. Only one private
        C function remains but it will be taken care of in a
        later patch to clean up the view construction code.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::addToPageViewMap):
        (EwkViewImpl::removeFromPageViewMap):
        (EwkViewImpl::viewFromPageViewMap):
        (EwkViewImpl::fromEvasObject):
        (EwkViewImpl::informLoadFinished):
        (EwkViewImpl::informProvisionalLoadRedirect):
        (EwkViewImpl::informProvisionalLoadStarted):
        (EwkViewImpl::informWebProcessCrashed):
        (EwkViewImpl::informContentsSizeChange):
        (EwkViewImpl::requestPopupMenu):
        (EwkViewImpl::requestJSAlertPopup):
        (EwkViewImpl::requestJSConfirmPopup):
        (EwkViewImpl::requestJSPromptPopup):
        (EwkViewImpl::informDatabaseQuotaReached):
        (EwkViewImpl::updateTextInputState):
        (EwkViewImpl::informURLChange):
        (EwkViewImpl::createNewPage):
        (EwkViewImpl::closePage):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebKit):
        (EwkViewImpl):
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::processDidCrash):
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::updateTextInputState):
        (WebKit::PageClientImpl::didChangeContentsSize):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_del):
        (_ewk_view_initialize):
        (ewk_view_url_set):
        (ewk_view_reload):
        (ewk_view_reload_bypass_cache):
        (ewk_view_html_string_load):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/efl/ContextHistoryClientEfl.cpp:
        (WebKit::ContextHistoryClientEfl::didNavigateWithNavigationData):
        (WebKit::ContextHistoryClientEfl::didPerformClientRedirect):
        (WebKit::ContextHistoryClientEfl::didPerformServerRedirect):
        (WebKit::ContextHistoryClientEfl::didUpdateHistoryTitle):
        * UIProcess/efl/FindClientEfl.cpp:
        * UIProcess/efl/FormClientEfl.cpp:
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didSameDocumentNavigationForFrame):
        * UIProcess/efl/PageLoadClientEfl.h:
        * UIProcess/efl/PagePolicyClientEfl.cpp:
        * UIProcess/efl/PagePolicyClientEfl.h:
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::closePage):
        (WebKit::PageUIClientEfl::createNewPage):
        (WebKit::PageUIClientEfl::runJavaScriptAlert):
        (WebKit::PageUIClientEfl::runJavaScriptConfirm):
        (WebKit::PageUIClientEfl::runJavaScriptPrompt):
        (WebKit::PageUIClientEfl::exceededDatabaseQuota):
        * UIProcess/efl/PageUIClientEfl.h:
        * UIProcess/efl/ResourceLoadClientEfl.h:
        * UIProcess/efl/WebPopupMenuProxyEfl.cpp:
        (WebKit::WebPopupMenuProxyEfl::WebPopupMenuProxyEfl):
        (WebKit::WebPopupMenuProxyEfl::showPopupMenu):
        (WebKit::WebPopupMenuProxyEfl::hidePopupMenu):
        * UIProcess/efl/WebPopupMenuProxyEfl.h:
        (WebKit::WebPopupMenuProxyEfl::create):
        (WebPopupMenuProxyEfl):

2012-10-24  Joone Hur  <joone.hur@intel.com>

        [EFL][AC] Unreviewed, fix build break when AC is enabled

        Fix build break after r132405.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::enterAcceleratedCompositingMode):
        * UIProcess/API/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):
        (WebKit::PageViewportControllerClientEfl::didChangeVisibleContents):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_calculate):

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

        Make it a compile error to send a sync message as async (and vice versa)
        https://bugs.webkit.org/show_bug.cgi?id=100285

        Reviewed by Sam Weinig.

        Add an "isSync" boolean to each generated message struct and add compile asserts to the message senders.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::send):
        (CoreIPC::Connection::sendSync):
        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC::MessageSender::send):
        (CoreIPC::MessageSender::sendSync):
        * Scripts/webkit2/messages.py:
        (message_to_struct_declaration):
        * Scripts/webkit2/messages_unittest.py:
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::send):
        (WebKit::WebProcessProxy::sendSync):

2012-10-24  Kiran Muppala  <cmuppala@apple.com>

        Disable auto termination of WebKit2 processes on mac
        https://bugs.webkit.org/show_bug.cgi?id=100176

        Reviewed by Alexey Proskuryakov.

        Disable WebKit2 auto termination by taking corresponding assertion
        until UI process is enhanced to determine when it is safe to enable it.

        * NetworkProcess/mac/NetworkProcessMainMac.mm:
        (WebKit::NetworkProcessMain):
        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain):
        * SharedWorkerProcess/mac/SharedWorkerProcessMainMac.mm:
        (WebKit::SharedWorkerProcessMain):
        * WebProcess/mac/WebProcessInitialization.mm:
        (WebKit::InitializeWebProcess):

2012-10-24  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Get rid of Ewk_View private C API (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=100230

        Reviewed by Kenneth Rohde Christiansen.

        Remove part of the Ewk_View private C API and replace
        it by C++ methods in EwkViewImpl class. Eventually,
        all the private C functions will be removed but it
        will be done in several patches.

        * UIProcess/API/C/efl/WKView.cpp:
        (WKViewGetPage):
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (_ewk_view_commit):
        (_ewk_view_preedit_changed):
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::smartData):
        (EwkViewImpl::fromEvasObject):
        (EwkViewImpl::wkPage):
        (EwkViewImpl::setCursor):
        (EwkViewImpl::redrawRegion):
        (EwkViewImpl::informDownloadJobCancelled):
        (EwkViewImpl::informDownloadJobFailed):
        (EwkViewImpl::informDownloadJobFinished):
        (EwkViewImpl::informDownloadJobRequested):
        (EwkViewImpl::informNewFormSubmissionRequest):
        (EwkViewImpl::enterFullScreen):
        (EwkViewImpl::exitFullScreen):
        (EwkViewImpl::setImageData):
        (EwkViewImpl::informLoadError):
        (EwkViewImpl::informLoadFinished):
        (EwkViewImpl::informLoadProgress):
        (EwkViewImpl::informProvisionalLoadFailed):
        (EwkViewImpl::informLoadCommitted):
        (EwkViewImpl::informProvisionalLoadRedirect):
        (EwkViewImpl::informProvisionalLoadStarted):
        (EwkViewImpl::informNavigationPolicyDecision):
        (EwkViewImpl::informNewWindowPolicyDecision):
        (EwkViewImpl::informResourceLoadStarted):
        (EwkViewImpl::informResourceLoadResponse):
        (EwkViewImpl::informResourceLoadFailed):
        (EwkViewImpl::informResourceLoadFinished):
        (EwkViewImpl::informResourceRequestSent):
        (EwkViewImpl::informTitleChange):
        (EwkViewImpl::informTooltipTextChange):
        (EwkViewImpl::informTextFound):
        (EwkViewImpl::size):
        (EwkViewImpl::informIconChange):
        (EwkViewImpl::informIntentRequest):
        (EwkViewImpl::informIntentServiceRegistration):
        (EwkViewImpl::createGLSurface):
        (EwkViewImpl::enterAcceleratedCompositingMode):
        (EwkViewImpl::exitAcceleratedCompositingMode):
        (EwkViewImpl::requestColorPicker):
        (EwkViewImpl::dismissColorPicker):
        (EwkViewImpl::informBackForwardListChange):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebCore):
        (EwkViewImpl):
        (EwkViewImpl::view):
        (EwkViewImpl::page):
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::viewImpl):
        (WebKit):
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        (WebKit::PageClientImpl::setViewNeedsDisplay):
        (WebKit::PageClientImpl::viewSize):
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::processDidCrash):
        (WebKit::PageClientImpl::didRelaunchProcess):
        (WebKit::PageClientImpl::toolTipChanged):
        (WebKit::PageClientImpl::setCursor):
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode):
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode):
        (WebKit::PageClientImpl::updateTextInputState):
        (WebKit::PageClientImpl::handleDownloadRequest):
        (WebKit::PageClientImpl::didChangeContentsSize):
        * UIProcess/API/efl/PageClientImpl.h:
        (WebKit::PageClientImpl::create):
        (PageClientImpl):
        * UIProcess/API/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::drawingArea):
        (WebKit::PageViewportControllerClientEfl::updateViewportSize):
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):
        (WebKit::PageViewportControllerClientEfl::didChangeVisibleContents):
        * UIProcess/API/efl/PageViewportControllerClientEfl.h:
        (WebKit::PageViewportControllerClientEfl::create):
        (PageViewportControllerClientEfl):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (Ewk_Download_Job::Ewk_Download_Job):
        (Ewk_Download_Job::viewImpl):
        * UIProcess/API/efl/ewk_download_job_private.h:
        (Ewk_Download_Job::create):
        (Ewk_Download_Job):
        * UIProcess/API/efl/ewk_view.cpp:
        (pageViewMap):
        (addToPageViewMap):
        (removeFromPageViewMap):
        (_ewk_view_on_favicon_changed):
        (_ewk_view_smart_focus_in):
        (_ewk_view_smart_focus_out):
        (mapToWebContent):
        (_ewk_view_smart_mouse_wheel):
        (_ewk_view_smart_mouse_down):
        (_ewk_view_smart_mouse_up):
        (_ewk_view_smart_mouse_move):
        (_ewk_view_smart_key_down):
        (_ewk_view_smart_key_up):
        (_ewk_view_on_show):
        (_ewk_view_on_hide):
        (_ewk_view_impl_del):
        (_ewk_view_smart_del):
        (_ewk_view_smart_calculate):
        (_ewk_view_smart_color_set):
        (_ewk_view_initialize):
        (_ewk_view_add_with_smart):
        (ewk_view_context_get):
        (ewk_view_url_update):
        (ewk_view_url_set):
        (ewk_view_url_get):
        (ewk_view_icon_url_get):
        (ewk_view_reload):
        (ewk_view_reload_bypass_cache):
        (ewk_view_stop):
        (ewk_view_settings_get):
        (ewk_view_title_get):
        (ewk_view_text_input_state_update):
        (ewk_view_load_progress_get):
        (ewk_view_scale_set):
        (ewk_view_scale_get):
        (ewk_view_device_pixel_ratio_set):
        (ewk_view_device_pixel_ratio_get):
        (ewk_view_theme_set):
        (ewk_view_theme_get):
        (ewk_view_back):
        (ewk_view_forward):
        (ewk_view_intent_deliver):
        (ewk_view_back_possible):
        (ewk_view_forward_possible):
        (ewk_view_back_forward_list_get):
        (ewk_view_html_string_load):
        (ewk_view_setting_encoding_custom_get):
        (ewk_view_setting_encoding_custom_set):
        (ewk_view_page_create):
        (ewk_view_text_find):
        (ewk_view_text_find_highlight_clear):
        (ewk_view_text_matches_count):
        (ewk_view_contents_size_changed):
        (ewk_view_popup_menu_request):
        (ewk_view_popup_menu_close):
        (ewk_view_popup_menu_select):
        (ewk_view_mouse_events_enabled_set):
        (ewk_view_mouse_events_enabled_get):
        (ewk_view_webprocess_crashed):
        (ewk_view_color_picker_color_set):
        (ewk_view_feed_touch_event):
        (ewk_view_touch_events_enabled_set):
        (ewk_view_touch_events_enabled_get):
        (ewk_view_inspector_show):
        (ewk_view_inspector_close):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::incorporateUpdate):
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::decideDestinationWithSuggestedFilename):
        (WebKit::DownloadManagerEfl::didFail):
        (WebKit::DownloadManagerEfl::didCancel):
        (WebKit::DownloadManagerEfl::didFinish):
        (WebKit::DownloadManagerEfl::registerDownload):
        * UIProcess/efl/DownloadManagerEfl.h:
        (DownloadManagerEfl):
        * UIProcess/efl/FindClientEfl.cpp:
        (WebKit::FindClientEfl::didFindString):
        (WebKit::FindClientEfl::didFailToFindString):
        (WebKit::FindClientEfl::FindClientEfl):
        * UIProcess/efl/FindClientEfl.h:
        (WebKit::FindClientEfl::create):
        (FindClientEfl):
        * UIProcess/efl/FormClientEfl.cpp:
        (WebKit::FormClientEfl::willSubmitForm):
        (WebKit::FormClientEfl::FormClientEfl):
        * UIProcess/efl/FormClientEfl.h:
        (WebKit::FormClientEfl::create):
        (FormClientEfl):
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didReceiveTitleForFrame):
        (WebKit::PageLoadClientEfl::didReceiveIntentForFrame):
        (WebKit::PageLoadClientEfl::registerIntentServiceForFrame):
        (WebKit::PageLoadClientEfl::didChangeProgress):
        (WebKit::PageLoadClientEfl::didFinishLoadForFrame):
        (WebKit::PageLoadClientEfl::didFailLoadWithErrorForFrame):
        (WebKit::PageLoadClientEfl::didStartProvisionalLoadForFrame):
        (WebKit::PageLoadClientEfl::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::PageLoadClientEfl::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::PageLoadClientEfl::didCommitLoadForFrame):
        (WebKit::PageLoadClientEfl::didChangeBackForwardList):
        (WebKit::PageLoadClientEfl::didSameDocumentNavigationForFrame):
        (WebKit::PageLoadClientEfl::PageLoadClientEfl):
        * UIProcess/efl/PageLoadClientEfl.h:
        (WebKit::PageLoadClientEfl::create):
        (PageLoadClientEfl):
        (WebKit::PageLoadClientEfl::viewImpl):
        * UIProcess/efl/PagePolicyClientEfl.cpp:
        (WebKit::PagePolicyClientEfl::decidePolicyForNavigationAction):
        (WebKit::PagePolicyClientEfl::decidePolicyForNewWindowAction):
        (WebKit::PagePolicyClientEfl::PagePolicyClientEfl):
        * UIProcess/efl/PagePolicyClientEfl.h:
        (WebKit::PagePolicyClientEfl::create):
        (PagePolicyClientEfl):
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::closePage):
        (WebKit::PageUIClientEfl::createNewPage):
        (WebKit::PageUIClientEfl::runJavaScriptAlert):
        (WebKit::PageUIClientEfl::runJavaScriptConfirm):
        (WebKit::PageUIClientEfl::runJavaScriptPrompt):
        (WebKit::PageUIClientEfl::showColorPicker):
        (WebKit::PageUIClientEfl::hideColorPicker):
        (WebKit::PageUIClientEfl::exceededDatabaseQuota):
        (WebKit::PageUIClientEfl::focus):
        (WebKit::PageUIClientEfl::unfocus):
        (WebKit::PageUIClientEfl::takeFocus):
        (WebKit::PageUIClientEfl::getWindowFrame):
        (WebKit::PageUIClientEfl::setWindowFrame):
        (WebKit::PageUIClientEfl::PageUIClientEfl):
        * UIProcess/efl/PageUIClientEfl.h:
        (WebKit::PageUIClientEfl::create):
        (PageUIClientEfl):
        * UIProcess/efl/ResourceLoadClientEfl.cpp:
        (WebKit::ResourceLoadClientEfl::didInitiateLoadForResource):
        (WebKit::ResourceLoadClientEfl::didSendRequestForResource):
        (WebKit::ResourceLoadClientEfl::didReceiveResponseForResource):
        (WebKit::ResourceLoadClientEfl::didFinishLoadForResource):
        (WebKit::ResourceLoadClientEfl::didFailLoadForResource):
        (WebKit::ResourceLoadClientEfl::ResourceLoadClientEfl):
        (WebKit::ResourceLoadClientEfl::~ResourceLoadClientEfl):
        * UIProcess/efl/ResourceLoadClientEfl.h:
        (WebKit::ResourceLoadClientEfl::create):
        (ResourceLoadClientEfl):
        * UIProcess/efl/WebFullScreenManagerProxyEfl.cpp:
        (WebKit::WebFullScreenManagerProxy::enterFullScreen):
        (WebKit::WebFullScreenManagerProxy::exitFullScreen):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::viewWidget):

2012-10-24  Brady Eidson  <beidson@apple.com>

        Add a strategy for loader customization.
        https://bugs.webkit.org/show_bug.cgi?id=100278

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createLoaderStrategy):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):

2012-10-24  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Coordinated Graphics: Enable threaded/IPC animations
        https://bugs.webkit.org/show_bug.cgi?id=93146

        Reviewed by Caio Marcelo de Oliveira Filho.

        In some cases there are pending changes in the layers, but no actual changes to the frame.
        In that case we should unlock the animations.

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):

2012-10-24  Noam Rosenthal  <noam.rosenthal@nokia.com>

        [Qt-on-Mac] GraphicsSurfaces should not create a global IOSurface handle
        https://bugs.webkit.org/show_bug.cgi?id=89885

        Reviewed by Kenneth Rohde Christiansen.

        Use mach_port instead of global tokens for IOSurfaces.
        Global IOSurfaces are accessible from other processes, while mach_ports can only be shared
        directly via IPC.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):

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

        Add per destination ID message receivers
        https://bugs.webkit.org/show_bug.cgi?id=100276

        Reviewed by Andreas Kling.

        Extend MessageReceiverMap to handle adding message receivers for a given destinationID/receiver name pair.
        Use this to make every WebPage object a message receiver.

        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::addMessageReceiver):
        (CoreIPC):
        (CoreIPC::MessageReceiverMap::removeMessageReceiver):
        (CoreIPC::MessageReceiverMap::invalidate):
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::~WebPage):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::addMessageReceiver):
        (WebKit):
        (WebKit::WebProcess::removeMessageReceiver):
        (WebKit::WebProcess::didReceiveSyncMessage):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        (WebProcess):

2012-10-24  Timothy Hatcher  <timothy@apple.com>

        Make the Inspector WKView/WebView become the first responder when bringToFront is called.

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

        Reviewed by Joseph Pecoraro.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformBringToFront): Make the Inspector WKView become the first responder.

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

        Add a strategy for shared workers
        https://bugs.webkit.org/show_bug.cgi?id=100165

        Reviewed by Brady Eidson.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createPasteboardStrategy):
        (WebKit::WebPlatformStrategies::createSharedWorkerStrategy):
        (WebKit::WebPlatformStrategies::createVisitedLinkStrategy):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2012-10-23  Sam Weinig  <sam@webkit.org>

        Move a few more WebProcess sub-objects to be MessageReceivers
        https://bugs.webkit.org/show_bug.cgi?id=100186

        Reviewed by Anders Carlsson.

        * WebProcess/Battery/WebBatteryManager.cpp:
        (WebKit::WebBatteryManager::WebBatteryManager):
        * WebProcess/Battery/WebBatteryManager.h:
        (WebBatteryManager):
        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        (WebKit::WebIconDatabaseProxy::WebIconDatabaseProxy):
        (WebKit):
        * WebProcess/IconDatabase/WebIconDatabaseProxy.h:
        (WebIconDatabaseProxy):
        * WebProcess/NetworkInfo/WebNetworkInfoManager.cpp:
        (WebKit::WebNetworkInfoManager::WebNetworkInfoManager):
        * WebProcess/NetworkInfo/WebNetworkInfoManager.h:
        (WebNetworkInfoManager):
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::WebNotificationManager):
        * WebProcess/Notifications/WebNotificationManager.h:
        (WebNotificationManager):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/soup/WebSoupRequestManager.cpp:
        (WebKit::WebSoupRequestManager::WebSoupRequestManager):
        * WebProcess/soup/WebSoupRequestManager.h:
        (WebSoupRequestManager):

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

        encode should take an ArgumentEncoder reference
        https://bugs.webkit.org/show_bug.cgi?id=100183

        Reviewed by Jessie Berlin.

        * Platform/CoreIPC/ArgumentCoder.h:
        (CoreIPC::ArgumentCoder::encode):
        * Platform/CoreIPC/Arguments.h:
        (CoreIPC::Arguments0::encode):
        (CoreIPC::Arguments1::encode):
        (CoreIPC::Arguments2::encode):
        (CoreIPC::Arguments3::encode):
        (CoreIPC::Arguments4::encode):
        (CoreIPC::Arguments5::encode):
        (CoreIPC::Arguments6::encode):
        (CoreIPC::Arguments7::encode):
        (CoreIPC::Arguments8::encode):
        (CoreIPC::Arguments10::encode):
        * Platform/CoreIPC/Attachment.cpp:
        (CoreIPC::Attachment::encode):
        * Platform/CoreIPC/Attachment.h:
        (Attachment):
        * Platform/CoreIPC/DataReference.cpp:
        (CoreIPC::DataReference::encode):
        * Platform/CoreIPC/DataReference.h:
        (DataReference):
        * Platform/CoreIPC/StringReference.cpp:
        (CoreIPC::StringReference::encode):
        * Platform/CoreIPC/StringReference.h:
        (StringReference):
        * Platform/CoreIPC/mac/MachPort.h:
        (CoreIPC::MachPort::encode):
        * Platform/SharedMemory.h:
        (Handle):
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::Handle::encode):
        * PluginProcess/PluginCreationParameters.cpp:
        (WebKit::PluginCreationParameters::encode):
        * PluginProcess/PluginCreationParameters.h:
        (PluginCreationParameters):
        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode):
        * Shared/DictionaryPopupInfo.h:
        (DictionaryPopupInfo):
        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        * Shared/EditorState.h:
        (EditorState):
        * Shared/FontInfo.cpp:
        (WebKit::FontInfo::encode):
        * Shared/FontInfo.h:
        (FontInfo):
        * Shared/LayerTreeContext.h:
        (LayerTreeContext):
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        (NetworkProcessCreationParameters):
        * Shared/OriginAndDatabases.cpp:
        (WebKit::OriginAndDatabases::encode):
        * Shared/OriginAndDatabases.h:
        (OriginAndDatabases):
        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::encode):
        * Shared/PlatformPopupMenuData.h:
        (PlatformPopupMenuData):
        * Shared/Plugins/NPIdentifierData.cpp:
        (WebKit::NPIdentifierData::encode):
        * Shared/Plugins/NPIdentifierData.h:
        (NPIdentifierData):
        * Shared/Plugins/NPVariantData.cpp:
        (WebKit::NPVariantData::encode):
        * Shared/Plugins/NPVariantData.h:
        (NPVariantData):
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::encode):
        * Shared/Plugins/PluginProcessCreationParameters.h:
        (PluginProcessCreationParameters):
        * Shared/PrintInfo.cpp:
        (WebKit::PrintInfo::encode):
        * Shared/PrintInfo.h:
        (PrintInfo):
        * Shared/SandboxExtension.h:
        (Handle):
        (HandleArray):
        * Shared/SecurityOriginData.cpp:
        (WebKit::SecurityOriginData::encode):
        * Shared/SecurityOriginData.h:
        (SecurityOriginData):
        * Shared/SessionState.cpp:
        (WebKit::SessionState::encode):
        * Shared/SessionState.h:
        (SessionState):
        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Handle::encode):
        * Shared/ShareableBitmap.h:
        (Handle):
        * Shared/SharedWorkerProcessCreationParameters.cpp:
        (WebKit::SharedWorkerProcessCreationParameters::encode):
        * Shared/SharedWorkerProcessCreationParameters.h:
        (SharedWorkerProcessCreationParameters):
        * Shared/StatisticsData.cpp:
        (WebKit::StatisticsData::encode):
        * Shared/StatisticsData.h:
        (StatisticsData):
        * Shared/StringPairVector.h:
        (WebKit::StringPairVector::encode):
        * Shared/UpdateInfo.cpp:
        (WebKit::UpdateInfo::encode):
        * Shared/UpdateInfo.h:
        (UpdateInfo):
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::encode):
        * Shared/WebContextMenuItemData.h:
        (WebContextMenuItemData):
        * Shared/WebEvent.cpp:
        (WebKit::WebEvent::encode):
        * Shared/WebEvent.h:
        (WebEvent):
        (WebMouseEvent):
        (WebWheelEvent):
        (WebKeyboardEvent):
        (WebGestureEvent):
        (WebPlatformTouchPoint):
        (WebTouchEvent):
        * Shared/WebGeolocationPosition.cpp:
        (WebKit::WebGeolocationPosition::Data::encode):
        * Shared/WebGeolocationPosition.h:
        (Data):
        * Shared/WebGestureEvent.cpp:
        (WebKit::WebGestureEvent::encode):
        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::encode):
        * Shared/WebHitTestResult.h:
        (Data):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::encode):
        * Shared/WebMouseEvent.cpp:
        (WebKit::WebMouseEvent::encode):
        * Shared/WebNavigationDataStore.h:
        (WebKit::WebNavigationDataStore::encode):
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        * Shared/WebPageCreationParameters.h:
        (WebPageCreationParameters):
        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::encode):
        * Shared/WebPageGroupData.h:
        (WebPageGroupData):
        * Shared/WebPopupItem.cpp:
        (WebKit::WebPopupItem::encode):
        * Shared/WebPopupItem.h:
        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::encode):
        * Shared/WebPreferencesStore.h:
        (WebPreferencesStore):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters):
        * Shared/WebWheelEvent.cpp:
        (WebKit::WebWheelEvent::encode):
        * Shared/mac/AttributedString.h:
        (AttributedString):
        * Shared/mac/AttributedString.mm:
        (WebKit::AttributedString::encode):
        * Shared/mac/ColorSpaceData.h:
        (ColorSpaceData):
        * Shared/mac/ColorSpaceData.mm:
        (WebKit::ColorSpaceData::encode):
        * Shared/mac/LayerTreeContextMac.mm:
        (WebKit::LayerTreeContext::encode):
        * Shared/mac/PlatformCertificateInfo.h:
        (PlatformCertificateInfo):
        * Shared/mac/PlatformCertificateInfo.mm:
        (WebKit::PlatformCertificateInfo::encode):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::Handle::encode):
        (WebKit::SandboxExtension::HandleArray::encode):
        * Shared/mac/SecItemRequestData.cpp:
        (WebKit::SecItemRequestData::encode):
        * Shared/mac/SecItemRequestData.h:
        * Shared/mac/SecItemResponseData.cpp:
        (WebKit::SecItemResponseData::encode):
        * Shared/mac/SecItemResponseData.h:
        (SecItemResponseData):
        * Shared/mac/SecKeychainItemRequestData.cpp:
        (WebKit::SecKeychainItemRequestData::encode):
        * Shared/mac/SecKeychainItemRequestData.h:
        * Shared/mac/SecKeychainItemResponseData.cpp:
        (WebKit::SecKeychainItemResponseData::encode):
        * Shared/mac/SecKeychainItemResponseData.h:
        (SecKeychainItemResponseData):
        * UIProcess/WebContextUserMessageCoders.h:
        (WebKit::WebContextUserMessageEncoder::encode):
        * WebProcess/InjectedBundle/InjectedBundleUserMessageCoders.h:
        (WebKit::InjectedBundleUserMessageEncoder::encode):
        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::Parameters::encode):
        * WebProcess/Plugins/Plugin.h:
        (Parameters):

2012-10-24  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Move the QQuickWebViewExperimental pointer to QQuickWebViewPrivate
        https://bugs.webkit.org/show_bug.cgi?id=100253

        Reviewed by Kenneth Rohde Christiansen.

        We'll need to avoid placing data in QQuickWebView to preserve
        its binary compatibility once it's public.
        Also make the QQuickWebViewExperimental constructor private.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::QQuickWebViewPrivate):
        (QQuickWebViewExperimental::QQuickWebViewExperimental):
        (QQuickWebView::QQuickWebView):
        (QQuickWebView::experimental):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):

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

        [EFL][WK2] Ewk_Settings refactoring
        https://bugs.webkit.org/show_bug.cgi?id=100233

        Reviewed by Kenneth Rohde Christiansen.

        Ewk_Settings private implementation is now C++ class which allows direct internal
        access to WebKit::WebPreferences.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        * UIProcess/API/efl/ewk_settings.cpp:
        (Ewk_Settings::preferences):
        (ewk_settings_fullscreen_enabled_set):
        (ewk_settings_fullscreen_enabled_get):
        (ewk_settings_javascript_enabled_set):
        (ewk_settings_javascript_enabled_get):
        (ewk_settings_loads_images_automatically_set):
        (ewk_settings_loads_images_automatically_get):
        (ewk_settings_developer_extras_enabled_set):
        (ewk_settings_developer_extras_enabled_get):
        (ewk_settings_file_access_from_file_urls_allowed_set):
        (ewk_settings_file_access_from_file_urls_allowed_get):
        (ewk_settings_frame_flattening_enabled_set):
        (ewk_settings_frame_flattening_enabled_get):
        (ewk_settings_dns_prefetching_enabled_set):
        (ewk_settings_dns_prefetching_enabled_get):
        * UIProcess/API/efl/ewk_settings_private.h:
        (WebKit):
        (Ewk_Settings):
        (Ewk_Settings::Ewk_Settings):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_initialize):

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

        [EFL][AC] Fix build break when AC is enabled
        https://bugs.webkit.org/show_bug.cgi?id=100245

        Reviewed by Kenneth Rohde Christiansen.

        Fix build break after r132337.

        * UIProcess/API/efl/EwkViewImpl.h:
        * UIProcess/API/efl/ewk_view.cpp:

2012-10-24  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] run-webkit-tests writes garbage on stderr when running on Xvfb
        https://bugs.webkit.org/show_bug.cgi?id=100243

        Reviewed by Kenneth Rohde Christiansen.

        These errors generate noise on the reports and in some cases, like when
        running perf tests, makes the test fail. By using Xext, we can add a
        dummy handler to ignore these errors.

        * PlatformEfl.cmake:
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (dummyExtensionErrorHandler):
        (WebKit::WebProcessMainEfl):

2012-10-24  Eric Carlson  <eric.carlson@apple.com>

        Allow ports to override text track rendering style
        https://bugs.webkit.org/show_bug.cgi?id=97800
        <rdar://problem/12044964>

        Reviewed by Maciej Stachowiak.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize new WKSI function pointers.

2012-10-24  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Expose useful WebCore::Settings
        https://bugs.webkit.org/show_bug.cgi?id=100239

        Reviewed by Kenneth Rohde Christiansen.

        Expose the two settings CaretBrowsingEnabled and NotificationsEnabled.

        * UIProcess/API/qt/qwebpreferences.cpp:
        (QWebPreferencesPrivate::testAttribute):
        (QWebPreferencesPrivate::setAttribute):
        (QWebPreferences::caretBrowsingEnabled):
        (QWebPreferences::setCaretBrowsingEnabled):
        (QWebPreferences::notificationsEnabled):
        (QWebPreferences::setNotificationsEnabled):
        * UIProcess/API/qt/qwebpreferences_p.h:
        * UIProcess/API/qt/qwebpreferences_p_p.h:

2012-10-24  Zeno Albisser  <zeno@webkit.org>

        Implement GraphicsSurface for Windows.
        https://bugs.webkit.org/show_bug.cgi?id=98147

        Add encode and decode implementation for GraphicsSurfaceToken on Windows.

        Reviewed by Kenneth Rohde Christiansen.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):

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

        [EFL][WK2] ASSERTION FAILED: edje(): could not paint native HTML part due to missing theme
        https://bugs.webkit.org/show_bug.cgi?id=100227

        Reviewed by Kenneth Rohde Christiansen.

        Browser crashes on loading any page due to missing theme after
        the web process has crashed and recovered.

        This patch reset the theme when the web process is recovered to
        avoid a crash.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didRelaunchProcess):

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

        Unreviewed, rolling out r132333.
        http://trac.webkit.org/changeset/132333
        https://bugs.webkit.org/show_bug.cgi?id=100234

        Crashes many tests on the EFL-WK2 bot. (Requested by rakuco on
        #webkit).

        * Target.pri:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::updateTextCheckerState):

2012-10-24  Christophe Dumez  <christophe.dumez@intel.com> and Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Move Ewk_View_Private_Data out of ewk_view.cpp
        https://bugs.webkit.org/show_bug.cgi?id=100228

        Reviewed by Gyuyoung Kim.

        Move Ewk_View_Private_Data out of ewk_view.cpp and
        rename it to EwkViewImpl. This is a first step towards
        getting rid of C'ism in Ewk_View.

        In a future, we will make EwkViewImpl a proper C++
        class and get rid of the private ewk_view C API so
        that WebKit code interacts with EwkViewImpl instead
        of Evas_Object.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EwkViewImpl.cpp: Added.
        (_ewk_view_commit):
        (_ewk_view_preedit_changed):
        (_ewk_view_imf_context_destroy):
        (_ewk_view_imf_context_create):
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::~EwkViewImpl):
        * UIProcess/API/efl/EwkViewImpl.h: Added.
        (WebKit):
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_priv_del):
        (_ewk_view_smart_add):
        * UIProcess/API/efl/ewk_view.h:

2012-10-24  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL][WK2] Crash when passing NULL instead of ewk_view instance
        https://bugs.webkit.org/show_bug.cgi?id=100078

        Reviewed by Gyuyoung Kim.

        Although applications should pass valid ewk_view to call ewk_view_XXX,
        ewk_view_XXX should not be crashed.

        * UIProcess/API/efl/ewk_view.cpp:
        Checked null and early exited from EWK_VIEW_TYPE_CHECK if error occured.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp: Added test case.
        (TEST_F):

2012-10-24  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make find and form clients C++ classes
        https://bugs.webkit.org/show_bug.cgi?id=100199

        Reviewed by Kenneth Rohde Christiansen.

        Make form and find client C++ classes to move away
        from C'ism in WK2 EFL port. The new classes have been
        moved up to UIProcess/efl instead of UIProcess/API/efl
        since it is not part of the public API.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (_ewk_view_initialize):
        * UIProcess/efl/FindClientEfl.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_view_find_client.cpp.
        (WebKit):
        (WebKit::toFindClientEfl):
        (WebKit::FindClientEfl::didFindString):
        (WebKit::FindClientEfl::didFailToFindString):
        (WebKit::FindClientEfl::FindClientEfl):
        * UIProcess/efl/FindClientEfl.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_view_find_client_private.h.
        (WebKit):
        (FindClientEfl):
        (WebKit::FindClientEfl::create):
        * UIProcess/efl/FormClientEfl.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_view_form_client.cpp.
        (WebKit):
        (WebKit::toFormClientEfl):
        (WebKit::FormClientEfl::willSubmitForm):
        (WebKit::FormClientEfl::FormClientEfl):
        * UIProcess/efl/FormClientEfl.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_view_form_client_private.h.
        (WebKit):
        (FormClientEfl):
        (WebKit::FormClientEfl::create):

2012-10-24  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] WebKitTestRunner needs to turn on 'setContinuousSpellCheckingEnabled'
        https://bugs.webkit.org/show_bug.cgi?id=93611

        Reviewed by Hajime Morita.

        When WebKitTestRunner turns on the spelling feature with the resetStateToConsistentValues() method,
        it happens that the WebProcess is still not launched (although it is already created).
        In this case, isValid() method returns false.

        This fix sends a message to the WebProcess messages queue, and the message
        will be handled once the WebProcess is ready.

        * Target.pri:
        Adds missing files to compile spellcheking feature for WebKit2-Qt
        to use WebKit C API from WKTextChecker.h.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::updateTextCheckerState):
        Uses canSendMessage() method instead of isValid() to check whether the message to
        the WebProcess can be sent.

2012-10-24  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2][AC] Black screen in web inspector window with AC on
        https://bugs.webkit.org/show_bug.cgi?id=100168

        Reviewed by Kenneth Rohde Christiansen.

        When ACCELERATED_COMPOSITING flag is turned on, and using X11,
        pass "opengl_x11" engine name to ecore_evas_new when creating a
        web inspector window. It is guaranteed to be available, because
        we wouldn't be able to create a main window if it wasn't.

        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

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

        [EFL][WK2] Make History client a C++ class
        https://bugs.webkit.org/show_bug.cgi?id=100104

        Reviewed by Kenneth Rohde Christiansen.

        Created ContextHistoryClientEfl class to encapsulate history client code for EFL.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::Ewk_Context):
        (ewk_context_history_callbacks_set):
        * UIProcess/API/efl/ewk_context_history_client.cpp: Removed.
        * UIProcess/API/efl/ewk_context_history_client_private.h: Removed.
        * UIProcess/API/efl/ewk_context_private.h:
        (WebKit):
        (Ewk_Context):
        * UIProcess/efl/ContextHistoryClientEfl.cpp: Added.
        (WebKit):
        (WebKit::toContextHistoryClientEfl):
        (WebKit::ContextHistoryClientEfl::didNavigateWithNavigationData):
        (WebKit::ContextHistoryClientEfl::didPerformClientRedirect):
        (WebKit::ContextHistoryClientEfl::didPerformServerRedirect):
        (WebKit::ContextHistoryClientEfl::didUpdateHistoryTitle):
        (WebKit::ContextHistoryClientEfl::populateVisitedLinks):
        (WebKit::ContextHistoryClientEfl::ContextHistoryClientEfl):
        (WebKit::ContextHistoryClientEfl::setCallbacks):
        * UIProcess/efl/ContextHistoryClientEfl.h: Added.
        (WebKit):
        (ContextHistoryClientEfl):
        (WebKit::ContextHistoryClientEfl::create):

2012-10-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to get the WebKitWebView associated to a WebKitDownload to WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=99836

        Reviewed by Martin Robinson.

        Add webkit_download_get_web_view() to get the WebKitWebView that
        initiated the download and webkit_web_view_download_uri() to start
        a new download associated to a WebKitWebView.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::handleDownloadRequest): Call
        webkitWebViewBaseHandleDownloadRequest().
        * UIProcess/API/gtk/PageClientImpl.h:
        (PageClientImpl): Add handleDownloadRequest().
        * UIProcess/API/gtk/WebKitDownload.cpp:
        (webkitDownloadSetWebView): Set the WebKitWebView associated to
        the download.
        (webkit_download_get_web_view): Public method to get the
        WebKitWebView associated to the download.
        * UIProcess/API/gtk/WebKitDownload.h:
        * UIProcess/API/gtk/WebKitDownloadPrivate.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_download_uri): Use the new helper
        webkitWebContextStartDownload().
        (webkitWebContextStartDownload): Helper function to start a new
        download that is also used by WebKitWebView.
        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewHandleDownloadRequest): Call
        webkitDownloadSetWebView() to associate the download with the
        WebKitWebView.
        (webkitWebViewConstructed): Set a download request handler.
        (webkit_web_view_download_uri): Public method to start a new
        download associated to the web view.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSetDownloadRequestHandler): Set a function
        pointer to be called when a new download is request for the web
        view.
        (webkitWebViewBaseHandleDownloadRequest): Call the download
        request handler if any.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/tests/TestDownloads.cpp:
        (testDownloadLocalFile):
        (testDownloadLocalFileError):
        (testDownloadRemoteFile):
        (testDownloadRemoteFileError):
        (testWebViewDownloadURI):
        (testPolicyResponseDownload):
        (beforeAll):
        * UIProcess/PageClient.h:
        (PageClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):

2012-10-23  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of <rdar://problem/2966974> [mac] Kerning and ligatures are not enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=100188

        Reviewed by Sam Weinig.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::registerUserDefaultsIfNeeded): Added. Registers a value of YES for the
        WebKitKerningAndLigaturesEnabledByDefault user default if it has not been registered yet.
        (WebKit::WebContext::platformInitializeWebProcess): Added a call to
        registerUserDefaultsIfNeeded, and changed to refer to the defaults key by name.

2012-10-23  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Coordinated Graphics: Enable threaded/IPC animations
        https://bugs.webkit.org/show_bug.cgi?id=93146

        Unreviewed build fix, some function names changed between review and landing.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::encodeTimingFunction):
        (CoreIPC::decodeTimingFunction):
        (CoreIPC::::encode):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:
        (WebCore):

2012-10-23  Sam Weinig  <sam@webkit.org>

        Stop using NSHomeDirectory() to get the home directory, it doesn't always return what we want
        https://bugs.webkit.org/show_bug.cgi?id=100180

        Reviewed by Anders Carlsson.

        NSHomeDirectory() doesn't return the real home directory if the host process
        is App Sandboxed, so drop down and use getpwuid_r instead.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::appendReadwriteSandboxDirectory):
        There is no reason anymore to try to create the directory.

        (WebKit::WebProcess::initializeSandbox):
        Switch to getpwuid_r.

2012-10-23  Martin Robinson  <mrobinson@igalia.com>

        [GTK][Soup] Implement the default authentication dialog via WebCoreSupport
        https://bugs.webkit.org/show_bug.cgi?id=99351

        Reviewed by Carlos Garcia Campos.

        Instead of using a custom SoupSessionFeature to show the authentication
        dialog, show it using the corresponding WebCore message.

        * GNUmakefile.list.am: Removed the SoupSessionFeature files.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit): Only use the default dispatchDidReceiveAuthenticationChallenge
        for non-GTK+ ports.
        * WebProcess/WebCoreSupport/gtk/WebFrameLoaderClientGtk.cpp: Added.
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge): Added
        a GTK+-specific implementation that shows the GtkAuthenticationDialog.
        * WebProcess/gtk/WebAuthDialog.cpp: Removed.
        * WebProcess/gtk/WebAuthDialog.h: Removed.
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainGtk): Don't install the custom session feature.

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

        Remove deprecatedSend
        https://bugs.webkit.org/show_bug.cgi?id=100127

        Reviewed by Andreas Kling.

        deprecatedSend is no longer used anywhere, remove it.

        * Platform/CoreIPC/Connection.h:
        (Connection):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):

2012-10-23  Andy Estes  <aestes@apple.com>

        [WebKit2 API] Add properties to get textRects from a WKDOMRange or WKDOMNode
        https://bugs.webkit.org/show_bug.cgi?id=100162

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        (WebKit::toNSArray): Added a helper function to convert a Vector of IntRects to an NSArray.
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:
        (-[WKDOMNode textRects]):
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange textRects]):

2012-10-23  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Coordinated Graphics: Enable threaded/IPC animations
        https://bugs.webkit.org/show_bug.cgi?id=93146

        Reviewed by Kenneth Rohde Christiansen.

        Re-enable UI-process animations for Coordinated-Graphics/TextureMapper.
        - Added an argument coder for GraphicsLayerAnimations.
        - Allow LayerTreeCoordinator to manage the animations per layer with the proxy,
          as opposed to applying the animation values in the web process as before.
        - LayerTreeRenderer now calls updateViewport() after painting when an animation is active.

        To overcome the problem we've had in the past with synchronizing UI-side and web-side
        animations, we now lock the animations in the UI process when a frame starts rendering,
        and unlock it when the frame finishes rendering, or if after the layout there is no visible
        changes pending on the screen.

        * Scripts/webkit2/messages.py:
        (headers_for_type):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC):
        (CoreIPC::encodeTimingFunction):
        (CoreIPC::decodeTimingFunction):
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:
        (WebCore):
            Added argument coders for GraphicsLayerAnimations.

        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::setLayerAnimations):
        (WebKit::LayerTreeCoordinatorProxy::setAnimationsLocked):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
            Added an option to sync the layer's animations, and also to lock/unlock animations.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::LayerTreeRenderer):
        (WebKit::LayerTreeRenderer::paintToCurrentGLContext):
            Sync animations if they're not locked, and call updateViewport() if we have animations.

        (WebKit::LayerTreeRenderer::flushLayerChanges):
        (WebKit::LayerTreeRenderer::setLayerAnimations):
        (WebKit::LayerTreeRenderer::setAnimationsLocked):

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::didChangeAnimations):
        (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::syncLayerState):
        (WebCore::CoordinatedGraphicsLayer::syncAnimations):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        (WebCore::CoordinatedGraphicsLayer::addAnimation):
        (WebCore::CoordinatedGraphicsLayer::pauseAnimation):
        (WebCore::CoordinatedGraphicsLayer::removeAnimation):
        (WebCore::CoordinatedGraphicsLayer::animationStartedTimerFired):
        (WebCore):
            Pass the animation info to the UI process instead of applying it in the web process.

        (WebCore::CoordinatedGraphicsLayer::hasPendingVisibleChanges):
            Compute whether a layer tree might have sync issues or flickers if rendered while
            background animations are ongoing.

        (WebCore::CoordinatedGraphicsLayer::computeTransformedVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::selfOrAncestorHaveNonAffineTransforms):
            Don't allow progressive tiling for layers with animations.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (WebCore):
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::lockAnimations):
        (WebKit):
        (WebKit::LayerTreeCoordinator::unlockAnimations):
        (WebKit::LayerTreeCoordinator::performScheduledLayerFlush):
        (WebKit::LayerTreeCoordinator::setLayerAnimations):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-10-23  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt][WK2] Add preference for enabling scroll animators
        https://bugs.webkit.org/show_bug.cgi?id=100124

        Reviewed by Jocelyn Turcotte.

        Expose the ScollAnimatorEnabled setting in QWebPreferences.

        * UIProcess/API/qt/qwebpreferences.cpp:
        (QWebPreferencesPrivate::testAttribute):
        (QWebPreferencesPrivate::setAttribute):
        (QWebPreferences::scrollAnimatorEnabled):
        (QWebPreferences::setScrollAnimatorEnabled):
        * UIProcess/API/qt/qwebpreferences_p.h:
        * UIProcess/API/qt/qwebpreferences_p_p.h:

2012-10-23  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2] Use the port independent PageViewportController
        https://bugs.webkit.org/show_bug.cgi?id=99850

        Reviewed by Kenneth Rohde Christiansen.

        Take PageViewportController into use, and rely on it to calculate
        scroll position and zoom level.
        With this patch, we can do intra page navigation and use the scrollwheel
        to scroll, when WTF_USE_TILED_BACKING_STORE and all related flags are enabled.

        * CMakeLists.txt:
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didChangeViewportProperties):
        (WebKit::PageClientImpl::pageDidRequestScroll):
        (WebKit::PageClientImpl::didChangeContentsSize):
        (WebKit):
        (WebKit::PageClientImpl::didRenderFrame):
        (WebKit::PageClientImpl::pageTransitionViewportReady):
        * UIProcess/API/efl/PageClientImpl.h:
        (WebKit):
        (PageClientImpl):
        (WebKit::PageClientImpl::setPageViewportController):
        * UIProcess/API/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::display):
        (WebKit::PageViewportControllerClientEfl::updateViewportSize):
        (WebKit::PageViewportControllerClientEfl::setVisibleContentsRect):
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):
        (WebKit::PageViewportControllerClientEfl::setViewportPosition):
        (WebKit::PageViewportControllerClientEfl::setContentsScale):
        (WebKit::PageViewportControllerClientEfl::didResumeContent):
        (WebKit::PageViewportControllerClientEfl::didChangeVisibleContents):
        (WebKit::PageViewportControllerClientEfl::setController):
        * UIProcess/API/efl/PageViewportControllerClientEfl.h:
        (WebKit::PageViewportControllerClientEfl::scaleFactor):
        (WebKit::PageViewportControllerClientEfl::scrollPosition):
        (PageViewportControllerClientEfl):
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (mapToWebContent):
        (_ewk_view_smart_mouse_wheel):
        (_ewk_view_smart_mouse_down):
        (_ewk_view_smart_mouse_up):
        (_ewk_view_smart_mouse_move):
        (_ewk_view_initialize):
        (ewk_view_load_committed):
        (ewk_view_feed_touch_event):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::didRenderFrame):
        * UIProcess/PageClient.h:
        (PageClient):
        * UIProcess/PageViewportController.cpp:
        * UIProcess/PageViewportController.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit):
        (WebKit::WebPageProxy::pageTransitionViewportReady):
        (WebKit::WebPageProxy::didRenderFrame):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit):
        (WebKit::PageLoadClientEfl::didCommitLoadForFrame):
        (WebKit::PageLoadClientEfl::PageLoadClientEfl):
        * UIProcess/efl/PageLoadClientEfl.h:
        (PageLoadClientEfl):
        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit):
        (WebKit::WebPageProxy::setUserScripts):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCompletePageTransition):

2012-10-16  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Add support for resolution media query
        https://bugs.webkit.org/show_bug.cgi?id=99077

        Reviewed by Antti Koivisto.

        * win/WebKit2.def:

            Add exports for the WebCore::Settings setting.

        * Configurations/FeatureDefines.xcconfig:

            Add support for the RESOLUTION_MEDIA_QUERY feature flag.

2012-10-23  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Port QWebPreferences to C++
        https://bugs.webkit.org/show_bug.cgi?id=100121

        Reviewed by Kenneth Rohde Christiansen.

        Port all the WebPreference calls to using the direct API instead of going through
        the auto-generated C API.

        * UIProcess/API/qt/qwebpreferences.cpp:
        (QWebPreferencesPrivate::testAttribute):
        (QWebPreferencesPrivate::setAttribute):
        (QWebPreferencesPrivate::setFontFamily):
        (QWebPreferencesPrivate::fontFamily):
        (QWebPreferencesPrivate::setFontSize):
        (QWebPreferencesPrivate::fontSize):
        (QWebPreferencesPrivate::preferences):
        * UIProcess/API/qt/qwebpreferences_p_p.h:

2012-10-23  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Convert WebEvent's timestamp from millisecond to second.
        https://bugs.webkit.org/show_bug.cgi?id=100101

        Reviewed by Kenneth Rohde Christiansen.

        Convert timestamp to second to create WebEvent from Evas event because
        the unit of timestamp from Evas Event is millisecond, but the unit of
        timestamp for WebEvent is second.

        * Shared/efl/WebEventFactory.cpp:
        (WebKit::convertMillisecondToSecond):
        (WebKit):
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):

2012-10-23  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make request manager client a C++ class
        https://bugs.webkit.org/show_bug.cgi?id=100093

        Reviewed by Kenneth Rohde Christiansen.

        Make EFL's request manager client a C++ class and
        move URL scheme handling code to it. The new
        RequestManagerClientEfl is now in UIProcess/efl
        instead of UIProcess/API/efl since it is not
        part of the public API.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::Ewk_Context):
        (Ewk_Context::requestManager):
        (ewk_context_url_scheme_register):
        * UIProcess/API/efl/ewk_context_private.h:
        (WebKit):
        (Ewk_Context):
        * UIProcess/efl/RequestManagerClientEfl.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_context_request_manager_client.cpp.
        (WebKit):
        (Ewk_Url_Scheme_Handler):
        (WebKit::Ewk_Url_Scheme_Handler::Ewk_Url_Scheme_Handler):
        (WebKit::toRequestManagerClientEfl):
        (WebKit::RequestManagerClientEfl::didReceiveURIRequest):
        (WebKit::RequestManagerClientEfl::RequestManagerClientEfl):
        (WebKit::RequestManagerClientEfl::~RequestManagerClientEfl):
        (WebKit::RequestManagerClientEfl::registerURLSchemeHandler):
        * UIProcess/efl/RequestManagerClientEfl.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_context_request_manager_client_private.h.
        (WebKit):
        (RequestManagerClientEfl):
        (WebKit::RequestManagerClientEfl::create):

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

        [EFL][WK2] ecore_x should be initialised in WebProcess to avoid re-initialization by PlatformScreenEfl utilities and systemBeep() function
        https://bugs.webkit.org/show_bug.cgi?id=100110

        Reviewed by Kenneth Rohde Christiansen.

        PlatformScreenEfl functions and systemBeep() depend on ecore_x functionality, therefore,
        ecore_x should be initialized when web process starts to avoid re-initialization.

        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl): Initialized ecore_x module.

2012-10-23  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Add support for IMF composition
        https://bugs.webkit.org/show_bug.cgi?id=89552

        Reviewed by Gyuyoung Kim.

        Implemented basic IMF support.

        * PlatformEfl.cmake:
        * Shared/NativeWebKeyboardEvent.h:
        (NativeWebKeyboardEvent):
        (WebKit::NativeWebKeyboardEvent::isFiltered):
        Added to determine whether current keyboard event is compositing.
        * Shared/efl/NativeWebKeyboardEventEfl.cpp:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::updateTextInputState):
        Added to change input state.
        * UIProcess/API/efl/PageClientImpl.h:
        (PageClientImpl):
        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init): Called ecore_imf_init.
        (ewk_shutdown): Called ecore_imf_shutdown.
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::~_Ewk_View_Private_Data):
        (_ewk_view_smart_key_down): Modified to send keyboard event to IMF.
        (_ewk_view_smart_mouse_up): Modified to reset input method context.
        (_ewk_view_preedit_changed): Added to send composition string.
        (_ewk_view_commit): Added to send a message that composition is finished.
        (_ewk_view_imf_context_create): Added to create Ecore_IMF_Context.
        (_ewk_view_imf_context_destroy): Added to destroy Ecore_IMF_Context.
        (ewk_view_text_input_state_update): Added to update input state.
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/PageClient.h: Moved updateTextInputState() to share with EFL port.
        (PageClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::editorStateChanged):
        Added PLATFORM(EFL) to call updateTextInputState()
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        Added HandleInputMethodKeydown message to determine whether keydown is handled.
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::handleInputMethodKeydown):
        Added to check whether input method handled keydown.
        (WebKit::WebPageProxy::confirmComposition): Added to support composition.
        (WebKit::WebPageProxy::setComposition): Ditto.
        (WebKit::WebPageProxy::cancelComposition): Ditto.
        * WebProcess/WebCoreSupport/efl/WebEditorClientEfl.cpp:
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        Added to check whether input method handled keydown.
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in: Added messages to support composition.
        * WebProcess/WebPage/efl/WebPageEfl.cpp:
        (WebKit::targetFrameForEditing): Referenced from QT port to get focused frame.
        (WebKit::WebPage::confirmComposition): Added to support composition.
        (WebKit::WebPage::setComposition): Ditto.
        (WebKit::WebPage::cancelComposition): Ditto.

2012-10-23  Jussi Kukkonen  <jussi.kukkonen@intel.com>

        [EFL] Make plugin process debugging easier (PLUGIN_PROCESS_COMMAND_PREFIX)
        https://bugs.webkit.org/show_bug.cgi?id=99297

        Reviewed by Kenneth Rohde Christiansen.

        Add support for PLUGIN_PROCESS_COMMAND_PREFIX environment variable, to allow easier
        plugin debugging with e.g.:
        $ PLUGIN_PROCESS_COMMAND_PREFIX="xterm gdb --args" MiniBrowser

        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::platformInitializeLaunchOptions):
        (WebKit):

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

        [EFL][WK2] Make Policy client a C++ class
        https://bugs.webkit.org/show_bug.cgi?id=100089

        Reviewed by Kenneth Rohde Christiansen.

        Make page policy client a C++ class and remove it from API folder.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (_ewk_view_initialize):
        * UIProcess/efl/PagePolicyClientEfl.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client.cpp.
        (WebKit):
        (WebKit::toPagePolicyClientEfl):
        (WebKit::PagePolicyClientEfl::decidePolicyForNavigationAction):
        (WebKit::PagePolicyClientEfl::decidePolicyForNewWindowAction):
        (WebKit::PagePolicyClientEfl::decidePolicyForResponseCallback):
        (WebKit::PagePolicyClientEfl::PagePolicyClientEfl):
        * UIProcess/efl/PagePolicyClientEfl.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client_private.h.
        (WebKit):
        (PagePolicyClientEfl):
        (WebKit::PagePolicyClientEfl::create):
        (WebKit::PagePolicyClientEfl::view):

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

        [EFL][WK2] Make UI client a C++ class
        https://bugs.webkit.org/show_bug.cgi?id=100099

        Reviewed by Gyuyoung Kim.

        Made page UI client a C++ class and removed it from API directory.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (_ewk_view_initialize):
        * UIProcess/API/efl/ewk_view_ui_client.cpp: Removed.
        * UIProcess/API/efl/ewk_view_ui_client_private.h: Removed.
        * UIProcess/efl/PageUIClientEfl.cpp: Added.
        (WebKit):
        (WebKit::toPageUIClientEfl):
        (WebKit::PageUIClientEfl::closePage):
        (WebKit::PageUIClientEfl::createNewPage):
        (WebKit::PageUIClientEfl::runJavaScriptAlert):
        (WebKit::PageUIClientEfl::runJavaScriptConfirm):
        (WebKit::PageUIClientEfl::runJavaScriptPrompt):
        (WebKit::PageUIClientEfl::showColorPicker):
        (WebKit::PageUIClientEfl::hideColorPicker):
        (WebKit::PageUIClientEfl::exceededDatabaseQuota):
        (WebKit::PageUIClientEfl::focus):
        (WebKit::PageUIClientEfl::unfocus):
        (WebKit::PageUIClientEfl::takeFocus):
        (WebKit::PageUIClientEfl::getWindowFrame):
        (WebKit::PageUIClientEfl::setWindowFrame):
        (WebKit::PageUIClientEfl::PageUIClientEfl):
        * UIProcess/efl/PageUIClientEfl.h: Added.
        (WebKit):
        (PageUIClientEfl):
        (WebKit::PageUIClientEfl::create):

2012-10-23  Andreas Kling  <kling@webkit.org>

        [WK2] REGRESSION(r132169): It broke all plugin related test.
        <http://webkit.org/b/100094>

        Unreviewed test fix, make the CoreIPC encode/decode functions for CString match again.

        * Platform/CoreIPC/ArgumentCoders.cpp:
        (CoreIPC::::encode):

2012-10-23  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make a download client a C++ class
        https://bugs.webkit.org/show_bug.cgi?id=100005

        Reviewed by Kenneth Rohde Christiansen.

        Make EFL's Download client a C++ class and move
        the id <-> download mapping from Ewk_Context to
        DownloadManagerEfl.

        The Download client was also moved to
        UIProcess/efl/ instead of UIProcess/API/efl/
        since it is not part of the public API.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::handleDownloadRequest):
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::Ewk_Context):
        (Ewk_Context::downloadManager):
        * UIProcess/API/efl/ewk_context_download_client_private.h: Removed.
        * UIProcess/API/efl/ewk_context_private.h:
        (Ewk_Context):
        * UIProcess/API/efl/ewk_download_job_private.h:
        * UIProcess/efl/DownloadManagerEfl.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_context_download_client.cpp.
        (WebKit):
        (WebKit::toDownloadManagerEfl):
        (WebKit::DownloadManagerEfl::decideDestinationWithSuggestedFilename):
        (WebKit::DownloadManagerEfl::didReceiveResponse):
        (WebKit::DownloadManagerEfl::didCreateDestination):
        (WebKit::DownloadManagerEfl::didReceiveData):
        (WebKit::DownloadManagerEfl::didFail):
        (WebKit::DownloadManagerEfl::didCancel):
        (WebKit::DownloadManagerEfl::didFinish):
        (WebKit::DownloadManagerEfl::DownloadManagerEfl):
        (WebKit::DownloadManagerEfl::registerDownload):
        (WebKit::DownloadManagerEfl::downloadJob):
        (WebKit::DownloadManagerEfl::unregisterDownloadJob):
        * UIProcess/efl/DownloadManagerEfl.h: Added.
        (WebKit):
        (DownloadManagerEfl):
        (WebKit::DownloadManagerEfl::create):

2012-10-23  Andras Becsi  <andras.becsi@digia.com>

        Remove devicePixelRatio from ViewportAttributes
        https://bugs.webkit.org/show_bug.cgi?id=99845

        Reviewed by Adam Barth.

        Update PageViewportController and co. to pass the device pixel ratio
        as an argument to functions that need to adjust the visible viewport size.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):
        (WebKit::PageViewportController::updateMinimumScaleToFit):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::didChangeViewportAttributes):

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

        [EFL][WK2] Refactor Ewk_Context
        https://bugs.webkit.org/show_bug.cgi?id=99594

        Reviewed by Kenneth Rohde Christiansen.

        Ewk_Context is now encapsulated to a C++ class inherited from WTF::RefCounted.
        Also the same instance of Ewk_Context is returned for the same instance of
        WKContext, so memory leak in ewk_view is also fixed.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::handleDownloadRequest):
        * UIProcess/API/efl/ewk_context.cpp:
        (contextMap):
        (Ewk_Context::Ewk_Context):
        (Ewk_Context::~Ewk_Context):
        (Ewk_Context::create):
        (Ewk_Context::defaultContext):
        (Ewk_Context::cookieManager):
        (Ewk_Context::faviconDatabase):
        (Ewk_Context::registerURLScheme):
        (Ewk_Context::vibrationProvider):
        (Ewk_Context::addVisitedLink):
        (Ewk_Context::setCacheModel):
        (Ewk_Context::cacheModel):
        (ewk_context_ref):
        (ewk_context_unref):
        (ewk_context_cookie_manager_get):
        (ewk_context_favicon_database_get):
        (Ewk_Context::wkContext):
        (Ewk_Context::addDownloadJob):
        (Ewk_Context::downloadJob):
        (Ewk_Context::removeDownloadJob):
        (Ewk_Context::requestManager):
        (Ewk_Context::urlSchemeRequestReceived):
        (ewk_context_default_get):
        (ewk_context_new):
        (ewk_context_new_with_injected_bundle_path):
        (ewk_context_url_scheme_register):
        (ewk_context_vibration_client_callbacks_set):
        (ewk_context_history_callbacks_set):
        (ewk_context_visited_link_add):
        (ewk_context_cache_model_set):
        (ewk_context_cache_model_get):
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (decideDestinationWithSuggestedFilename):
        (didReceiveResponse):
        (didCreateDestination):
        (didReceiveData):
        (didFail):
        (didCancel):
        (didFinish):
        (ewk_context_download_client_attach):
        * UIProcess/API/efl/ewk_context_history_client.cpp:
        (getEwkHistoryClient):
        (didNavigateWithNavigationData):
        (didPerformClientRedirect):
        (didPerformServerRedirect):
        (didUpdateHistoryTitle):
        (populateVisitedLinks):
        (ewk_context_history_client_attach):
        * UIProcess/API/efl/ewk_context_private.h:
        (Ewk_Context):
        (Ewk_Context::historyClient):
        * UIProcess/API/efl/ewk_context_request_manager_client.cpp:
        (didReceiveURIRequest):
        (ewk_context_request_manager_client_attach):
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (Ewk_View_Private_Data::Ewk_View_Private_Data):
        (Ewk_View_Private_Data::~Ewk_View_Private_Data):
        (_ewk_view_priv_del):
        (_ewk_view_initialize):
        (ewk_view_base_add):
        (ewk_view_add_with_context):
        (ewk_view_context_get):
        (ewk_view_update_icon):

2012-10-23  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make page load client a C++ class
        https://bugs.webkit.org/show_bug.cgi?id=100081

        Reviewed by Kenneth Rohde Christiansen.

        Make page load client a C++ class and move it
        up to UIProcess/efl since it is not really part
        of the public API.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (_ewk_view_initialize):
        * UIProcess/API/efl/ewk_view_loader_client_private.h: Removed.
        * UIProcess/efl/PageLoadClientEfl.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_view_loader_client.cpp.
        (WebKit):
        (WebKit::toPageLoadClientEfl):
        (WebKit::PageLoadClientEfl::didReceiveTitleForFrame):
        (WebKit::PageLoadClientEfl::didReceiveIntentForFrame):
        (WebKit::PageLoadClientEfl::registerIntentServiceForFrame):
        (WebKit::PageLoadClientEfl::didChangeProgress):
        (WebKit::PageLoadClientEfl::didFinishLoadForFrame):
        (WebKit::PageLoadClientEfl::didFailLoadWithErrorForFrame):
        (WebKit::PageLoadClientEfl::didStartProvisionalLoadForFrame):
        (WebKit::PageLoadClientEfl::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::PageLoadClientEfl::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::PageLoadClientEfl::didChangeBackForwardList):
        (WebKit::PageLoadClientEfl::didSameDocumentNavigationForFrame):
        (WebKit::PageLoadClientEfl::PageLoadClientEfl):
        * UIProcess/efl/PageLoadClientEfl.h: Added.
        (WebKit):
        (PageLoadClientEfl):
        (WebKit::PageLoadClientEfl::create):
        (WebKit::PageLoadClientEfl::view):

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

        Handle ArgumentCoder template specializations that take the ArgumentEncoder as a reference
        https://bugs.webkit.org/show_bug.cgi?id=100056

        Reviewed by Andreas Kling.

        Use template magic to make it possible to have ArgumentCoder specializations where the encode
        function takes the ArgumentEncoder object as a reference instead of as a pointer. Also, add an
        operator<< to ArgumentEncoder and change the string related ArgumentCoder specializations over to taking
        the encoder as a reference and using stream operators.

        * Platform/CoreIPC/ArgumentCoders.cpp:
        (CoreIPC::::encode):
        * Platform/CoreIPC/ArgumentCoders.h:
        * Platform/CoreIPC/ArgumentEncoder.h:
        (ArgumentEncoder):
        (UsesDeprecatedEncodeFunction):
        (NoType):
        (CoreIPC::ArgumentEncoder::encode):
        (CoreIPC::ArgumentEncoder::operator<<):

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

        More Argument coder cleanup
        https://bugs.webkit.org/show_bug.cgi?id=100022

        Reviewed by Andreas Kling.

        Remove the ArgumentDecoder::decode overload that takes a const reference - if the call to decode ends up creating a temporary
        we'll encode into it and then destroy it. Since this decode overload was mostly used with the CoreIPC::Out functions, remove them
        (and CoreIPC::In) as well. Clean up a couple of ArgumentCoders as well.

        * Platform/CoreIPC/ArgumentCoders.h:
        * Platform/CoreIPC/ArgumentDecoder.h:
        * Platform/CoreIPC/Arguments.h:
        * Platform/CoreIPC/Connection.h:
        (Connection):
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::Handle::decode):
        * Shared/PrintInfo.cpp:
        (WebKit::PrintInfo::encode):
        (WebKit::PrintInfo::decode):
        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::encode):
        (WebKit::WebContextMenuItemData::decode):
        * Shared/WebEvent.cpp:
        (WebKit::WebEvent::encode):
        (WebKit::WebEvent::decode):
        * Shared/WebGeolocationPosition.cpp:
        (WebKit::WebGeolocationPosition::Data::encode):
        (WebKit::WebGeolocationPosition::Data::decode):
        * Shared/WebMouseEvent.cpp:
        (WebKit::WebMouseEvent::encode):
        (WebKit::WebMouseEvent::decode):
        * Shared/WebPopupItem.cpp:
        (WebKit::WebPopupItem::encode):
        (WebKit::WebPopupItem::decode):
        * UIProcess/WebConnectionToWebProcess.cpp:
        (WebKit::WebConnectionToWebProcess::decodeMessageBody):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        (WebKit::InjectedBundle::postSynchronousMessage):
        * WebProcess/WebConnectionToUIProcess.cpp:
        (WebKit::WebConnectionToUIProcess::decodeMessageBody):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::postInjectedBundleMessage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::postInjectedBundleMessage):

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

        Remove MessageReceiverMap::deprecatedAddMessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=100012

        Reviewed by Andreas Kling.

        Get rid of MessageReceiverMap::deprecatedAddMessageReceiver and make callers use addMessageReceiver instead.
        Also, remove the message receiver map inside Connection and add a message receiver map to WebProcess instead.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::dispatchMessage):
        * Platform/CoreIPC/Connection.h:
        (Connection):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::invalidate):
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::WebNotificationManagerProxy):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::WebApplicationCacheManagerProxy):
        * UIProcess/WebContext.cpp:
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::WebCookieManagerProxy):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::WebDatabaseManagerProxy):
        * UIProcess/WebGeolocationManagerProxy.cpp:
        (WebKit::WebGeolocationManagerProxy::WebGeolocationManagerProxy):
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::WebIconDatabase):
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::WebKeyValueStorageManagerProxy):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::WebMediaCacheManagerProxy):
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::WebResourceCacheManagerProxy):
        * WebProcess/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::AuthenticationManager):
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::WebGeolocationManager):
        (WebKit::WebGeolocationManager::registerWebPage):
        * WebProcess/Geolocation/WebGeolocationManager.h:
        (WebGeolocationManager):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::addMessageReceiver):
        (WebKit):
        (WebKit::WebProcess::didReceiveSyncMessage):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        (WebProcess):

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

        [EFL][WK2] ewk_view_color_picker_color_set() is leaking
        https://bugs.webkit.org/show_bug.cgi?id=100007

        Reviewed by Kenneth Rohde Christiansen.

        Fix a leak in ewk_view_color_picker_color_set() by adopting WKStringRef
        returned by WKStringCreateWithUTF8CString().

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_color_picker_color_set):

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

        [EFL][WK2] Make the resource load client a C++ class
        https://bugs.webkit.org/show_bug.cgi?id=99982

        Reviewed by Kenneth Rohde Christiansen.

        Create a C++ class for the resource load client and
        move the id <-> resource mapping from the Ewk_View
        to ResourceLoadClientEfl for better a cleaner
        separation.

        The resource load client code was also moved out of
        UIProcess/API/efl to UIProcess/efl since this is not
        part of the WK2 EFL API.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (_ewk_view_initialize):
        (ewk_view_wkpage_get):
        (ewk_view_resource_load_initiated):
        (ewk_view_resource_load_response):
        (ewk_view_resource_load_failed):
        (ewk_view_resource_load_finished):
        (ewk_view_resource_request_sent):
        (ewk_view_load_provisional_started):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp: Removed.
        * UIProcess/API/efl/ewk_view_resource_load_client_private.h: Removed.
        * UIProcess/efl/ResourceLoadClientEfl.cpp: Added.
        (WebKit):
        (WebKit::toResourceLoadClientEfl):
        (WebKit::ResourceLoadClientEfl::didInitiateLoadForResource):
        (WebKit::ResourceLoadClientEfl::didSendRequestForResource):
        (WebKit::ResourceLoadClientEfl::didReceiveResponseForResource):
        (WebKit::ResourceLoadClientEfl::didFinishLoadForResource):
        (WebKit::ResourceLoadClientEfl::didFailLoadForResource):
        (WebKit::ResourceLoadClientEfl::onViewProvisionalLoadStarted):
        (WebKit::ResourceLoadClientEfl::ResourceLoadClientEfl):
        (WebKit::ResourceLoadClientEfl::~ResourceLoadClientEfl):
        * UIProcess/efl/ResourceLoadClientEfl.h: Added.
        (WebKit):
        (ResourceLoadClientEfl):
        (WebKit::ResourceLoadClientEfl::create):

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

        [WK2] Regression(r131990): plugins/npruntime/remove-property.html started failing
        https://bugs.webkit.org/show_bug.cgi?id=99977

        Reviewed by Alexey Proskuryakov.

        Remove int32_t casts - the ArgumentDecoder::decode overload that takes a const int would cause
        a temporary to be created which the number was then decoded into.

        * Shared/Plugins/NPIdentifierData.cpp:
        (WebKit::NPIdentifierData::encode):
        (WebKit::NPIdentifierData::decode):

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

        Don't use CStrings for message receiver names and message names
        https://bugs.webkit.org/show_bug.cgi?id=99853

        Reviewed by Andreas Kling.

        Re-land this with a fix to MessageReceiverMap::dispatchSyncMessage to look in the new global message receivers map.

        Introduce StringReference which is similar to DataReference except it holds a pointer to + length of a char *
        and can be created from a string literal. Use this in place of CString in MessageEncoder/MessageDecoder and
        make MessageReceiverMap use a HashMap from StringReferences to MessageReceivers for global message receivers.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::createSyncMessageEncoder):
        (CoreIPC::Connection::dispatchSyncMessage):
        * Platform/CoreIPC/Connection.h:
        (Connection):
        (CoreIPC::Connection::deprecatedSendSync):
        (CoreIPC::Connection::deprecatedSend):
        * Platform/CoreIPC/MessageDecoder.cpp:
        (CoreIPC::MessageDecoder::MessageDecoder):
        * Platform/CoreIPC/MessageDecoder.h:
        (CoreIPC::MessageDecoder::messageReceiverName):
        (CoreIPC::MessageDecoder::messageName):
        (MessageDecoder):
        * Platform/CoreIPC/MessageEncoder.cpp:
        (CoreIPC::MessageEncoder::create):
        (CoreIPC::MessageEncoder::MessageEncoder):
        * Platform/CoreIPC/MessageEncoder.h:
        (CoreIPC):
        (MessageEncoder):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::addMessageReceiver):
        (CoreIPC):
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * Platform/CoreIPC/StringReference.cpp: Added.
        (CoreIPC):
        (CoreIPC::StringReference::encode):
        (CoreIPC::StringReference::decode):
        (CoreIPC::StringReference::Hash::hash):
        * Platform/CoreIPC/StringReference.h: Added.
        (CoreIPC):
        (StringReference):
        (CoreIPC::StringReference::StringReference):
        (CoreIPC::StringReference::isEmpty):
        (CoreIPC::StringReference::size):
        (CoreIPC::StringReference::data):
        (CoreIPC::StringReference::operator==):
        (Hash):
        (CoreIPC::StringReference::Hash::equal):
        (WTF):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):
        * Scripts/webkit2/messages.py:
        (message_to_struct_declaration):
        (forward_declarations_and_headers):
        (generate_messages_header):
        * Scripts/webkit2/messages_unittest.py:
        * Shared/CoreIPCSupport/WebContextMessageKinds.h:
        * Target.pri:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::addMessageReceiver):
        (WebKit):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::deprecatedSend):
        (WebKit::WebProcessProxy::send):
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

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

        Unreviewed, rolling out r132072.
        http://trac.webkit.org/changeset/132072
        https://bugs.webkit.org/show_bug.cgi?id=100011

        Made most of the tests crash on the WK2 bot. (Requested by
        rakuco on #webkit).

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::handleDownloadRequest):
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context):
        (Ewk_Context::Ewk_Context):
        (ewk_context_ref):
        (ewk_context_unref):
        (ewk_context_cookie_manager_get):
        (ewk_context_favicon_database_get):
        (ewk_context_WKContext_get):
        (ewk_context_new_from_WKContext):
        (ewk_context_download_job_add):
        (ewk_context_download_job_get):
        (ewk_context_download_job_remove):
        (ewk_context_request_manager_get):
        (ewk_context_url_scheme_request_received):
        (ewk_context_default_get):
        (ewk_context_new):
        (ewk_context_new_with_injected_bundle_path):
        (ewk_context_url_scheme_register):
        (ewk_context_vibration_client_callbacks_set):
        (ewk_context_history_callbacks_set):
        (ewk_context_history_client_get):
        (ewk_context_visited_link_add):
        (ewk_context_cache_model_set):
        (ewk_context_cache_model_get):
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (decideDestinationWithSuggestedFilename):
        (didReceiveResponse):
        (didCreateDestination):
        (didReceiveData):
        (didFail):
        (didCancel):
        (didFinish):
        (ewk_context_download_client_attach):
        * UIProcess/API/efl/ewk_context_history_client.cpp:
        (getEwkHistoryDelegate):
        (didNavigateWithNavigationData):
        (didPerformClientRedirect):
        (didPerformServerRedirect):
        (didUpdateHistoryTitle):
        (populateVisitedLinks):
        (ewk_context_history_client_attach):
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/ewk_context_request_manager_client.cpp:
        (didReceiveURIRequest):
        (ewk_context_request_manager_client_attach):
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (Ewk_View_Private_Data::Ewk_View_Private_Data):
        (Ewk_View_Private_Data::~Ewk_View_Private_Data):
        (_ewk_view_priv_del):
        (_ewk_view_initialize):
        (ewk_view_base_add):
        (ewk_view_add_with_context):
        (ewk_view_context_get):
        (ewk_view_update_icon):

2012-10-22  Darin Adler  <darin@apple.com>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView view:stringForToolTip:point:userData:]): Fix build. Forgot to save file
        before committing.

2012-10-22  Darin Adler  <darin@apple.com>

        REGRESSION (r131686): Crash in NSToolTipManager mouseEnteredToolTip
        <rdar://problem/12527528> and https://bugs.webkit.org/show_bug.cgi?id=99792

        Roll out the tool tip part of r131686 since it still seems to be causing trouble.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView view:stringForToolTip:point:userData:]): Added this method back.
        (-[WKView _wk_toolTipChangedFrom:to:]): Use self as owner again, eliminating the
        separate WKToolTipDelegate object.

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

        [EFL][WK2] Memory leak in Ewk_Form_Submission_Request::fieldValue()
        https://bugs.webkit.org/show_bug.cgi?id=99993

        Reviewed by Kenneth Rohde Christiansen.

        Adopt the WKStringRef returned by toCopiedAPI() in
        Ewk_Form_Submission_Request::fieldValue() to avoid
        a memory leak.

        * UIProcess/API/efl/ewk_form_submission_request.cpp:
        (Ewk_Form_Submission_Request::fieldValue):

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

        [EFL][WK2] Refactor Ewk_Context
        https://bugs.webkit.org/show_bug.cgi?id=99594

        Reviewed by Kenneth Rohde Christiansen.

        Ewk_Context is now encapsulated to a C++ class inherited from WTF::RefCounted.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::handleDownloadRequest):
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::Ewk_Context):
        (Ewk_Context::~Ewk_Context):
        (Ewk_Context::create):
        (Ewk_Context::defaultContext):
        (Ewk_Context::cookieManager):
        (Ewk_Context::faviconDatabase):
        (Ewk_Context::registerURLScheme):
        (Ewk_Context::vibrationProvider):
        (Ewk_Context::addVisitedLink):
        (Ewk_Context::setCacheModel):
        (Ewk_Context::cacheModel):
        (ewk_context_ref):
        (ewk_context_unref):
        (ewk_context_cookie_manager_get):
        (ewk_context_favicon_database_get):
        (Ewk_Context::wkContext):
        (Ewk_Context::addDownloadJob):
        (Ewk_Context::downloadJob):
        (Ewk_Context::removeDownloadJob):
        (Ewk_Context::requestManager):
        (Ewk_Context::urlSchemeRequestReceived):
        (ewk_context_default_get):
        (ewk_context_new):
        (ewk_context_new_with_injected_bundle_path):
        (ewk_context_url_scheme_register):
        (ewk_context_vibration_client_callbacks_set):
        (ewk_context_history_callbacks_set):
        (ewk_context_visited_link_add):
        (ewk_context_cache_model_set):
        (ewk_context_cache_model_get):
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (decideDestinationWithSuggestedFilename):
        (didReceiveResponse):
        (didCreateDestination):
        (didReceiveData):
        (didFail):
        (didCancel):
        (didFinish):
        (ewk_context_download_client_attach):
        * UIProcess/API/efl/ewk_context_history_client.cpp:
        (getEwkHistoryClient):
        (didNavigateWithNavigationData):
        (didPerformClientRedirect):
        (didPerformServerRedirect):
        (didUpdateHistoryTitle):
        (populateVisitedLinks):
        (ewk_context_history_client_attach):
        * UIProcess/API/efl/ewk_context_private.h:
        (Ewk_Context):
        (Ewk_Context::create):
        (Ewk_Context::historyClient):
        * UIProcess/API/efl/ewk_context_request_manager_client.cpp:
        (didReceiveURIRequest):
        (ewk_context_request_manager_client_attach):
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (Ewk_View_Private_Data::Ewk_View_Private_Data):
        (Ewk_View_Private_Data::~Ewk_View_Private_Data):
        (_ewk_view_priv_del):
        (_ewk_view_initialize):
        (ewk_view_base_add):
        (ewk_view_add_with_context):
        (ewk_view_context_get):
        (ewk_view_update_icon):

2012-10-22  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix build without QtWidgets
        https://bugs.webkit.org/show_bug.cgi?id=99981

        Reviewed by Tor Arne Vestbø.

        Make it possible to compile WebProcess without QtWidgets by instantiating a
        QGuiApplication instead of a QApplication if we're built without widgets.

        * WebProcess.pro:
        * qt/MainQt.cpp:
        (main):

2012-10-22  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL] pc files should use DATA_INSTALL_DIR for datadir
        https://bugs.webkit.org/show_bug.cgi?id=99961

        Reviewed by Gyuyoung Kim.

        * ewebkit.pc.in: Fixed wrong datadir

2012-10-22  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix "ASSERTION FAILED: !document->inPageCache()" when loading a page
        https://bugs.webkit.org/show_bug.cgi?id=98514

        Reviewed by Kenneth Rohde Christiansen.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage): Use FrameView::fixedVisibleContentRect
        instead of WebFrame::visibleContentBounds as the source to always keep the correct state.

2012-10-22  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: merge "docked" state into the "dock side" enum.
        https://bugs.webkit.org/show_bug.cgi?id=99717

        Reviewed by Vsevolod Vlasov.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-10-21  Milian Wolff  <milian.wolff@kdab.com>

        [Qt] QNX build fails when building against Qt without clipboard support
        https://bugs.webkit.org/show_bug.cgi?id=98040

        Reviewed by Simon Hausmann.

        Gracefully handle QT_NO_CLIPBOARD and do not try to access qApp->clipboard()
        in such cases. Instead, return false to indicate global selection is unsupported.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::supportsGlobalSelection):

2012-10-21  Hyungchan Kim  <hyungchan2.kim@lge.com>

        Add a separate flag for rgb swizzling whether it can be modified or not
        https://bugs.webkit.org/show_bug.cgi?id=98728

        BitmapTexture swizzles the source image if the OpenGL driver
        doesn't support the BGRA extension.
        In case of directly composited images, the source image should not
        be modified.

        http://www.satine.org/research/webkit/snowleopard/snowstack.html

        Reviewed by Noam Rosenthal.

        No new tests as this is only testable on specific hardware and
        currently not avaiable in the bots.

        * platform/graphics/texmap/TextureMapper.h:
        (BitmapTexture):
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        (WebCore::TextureMapperTile::updateContents):
        (WebCore::TextureMapperTiledBackingStore::updateContentsFromImageIfNeeded):
        (WebCore::TextureMapperTiledBackingStore::updateContents):
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        (TextureMapperTile):
        (TextureMapperTiledBackingStore):
        (WebCore::TextureMapperTiledBackingStore::updateContents):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawRepaintCounter):
        (WebCore::BitmapTextureGL::updateContents):
        * platform/graphics/texmap/TextureMapperGL.h:
        (BitmapTextureGL):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::updateContents):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (BitmapTextureImageBuffer):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::updateBackingStore):

2012-10-21  Seokju Kwon  <seokju.kwon@samsung.com>

        [EFL] Fix failure to access the inspector resources
        https://bugs.webkit.org/show_bug.cgi?id=99816

        Reviewed by Gyuyoung Kim.

        access() returns -1, if path has a file protocol like "file://".
        And I have removed it from the first argument of access().
        If not, inspectorBaseURL() or inspectorFilesPath() always returns WEB_INSPECTOR_DIR.
        Then all layout test related to inspector can fail after installing webkit package.

        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::inspectorBaseURL):

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

        [EFL][WK2] Make Ewk_Error, Ewk_Resource and Ewk_Popup_Menu_Item members private
        https://bugs.webkit.org/show_bug.cgi?id=99931

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Error, Ewk_Resource and Ewk_Popup_Menu_Item class
        members private.

        * UIProcess/API/efl/ewk_error.cpp:
        (Ewk_Error::Ewk_Error):
        (Ewk_Error::url):
        (Ewk_Error::description):
        (Ewk_Error::domain):
        (Ewk_Error::errorCode):
        (Ewk_Error::isCancellation):
        (ewk_error_type_get):
        (ewk_error_url_get):
        (ewk_error_code_get):
        (ewk_error_description_get):
        (ewk_error_cancellation_get):
        * UIProcess/API/efl/ewk_error_private.h:
        (Ewk_Error):
        * UIProcess/API/efl/ewk_popup_menu_item.cpp:
        (Ewk_Popup_Menu_Item::Ewk_Popup_Menu_Item):
        (Ewk_Popup_Menu_Item::type):
        (Ewk_Popup_Menu_Item::textDirection):
        (Ewk_Popup_Menu_Item::text):
        (Ewk_Popup_Menu_Item::tooltipText):
        (Ewk_Popup_Menu_Item::accessibilityText):
        (Ewk_Popup_Menu_Item::hasTextDirectionOverride):
        (Ewk_Popup_Menu_Item::isEnabled):
        (Ewk_Popup_Menu_Item::isLabel):
        (Ewk_Popup_Menu_Item::isSelected):
        (ewk_popup_menu_item_type_get):
        (ewk_popup_menu_item_text_get):
        (ewk_popup_menu_item_text_direction_get):
        (ewk_popup_menu_item_text_direction_override_get):
        (ewk_popup_menu_item_tooltip_get):
        (ewk_popup_menu_item_accessibility_text_get):
        (ewk_popup_menu_item_enabled_get):
        (ewk_popup_menu_item_is_label_get):
        (ewk_popup_menu_item_selected_get):
        * UIProcess/API/efl/ewk_popup_menu_item_private.h:
        (Ewk_Popup_Menu_Item):
        * UIProcess/API/efl/ewk_resource.cpp:
        (Ewk_Resource::Ewk_Resource):
        (Ewk_Resource::url):
        (Ewk_Resource::isMainResource):
        (ewk_resource_url_get):
        (ewk_resource_main_resource_get):
        * UIProcess/API/efl/ewk_resource_private.h:
        (Ewk_Resource):

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

        [EFL][WK2] Make Ewk_Url_Request, Ewk_Url_Response and Ewk_Url_Scheme_Request members private
        https://bugs.webkit.org/show_bug.cgi?id=99936

        Reviewed by Kenneth Rohde Christiansen.

        Make wk_Url_Request, Ewk_Url_Response and Ewk_Url_Scheme_Request
        class members private.

        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_url_scheme_request_received):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (Ewk_Download_Job::estimatedProgress):
        * UIProcess/API/efl/ewk_url_request.cpp:
        (Ewk_Url_Request::Ewk_Url_Request):
        (Ewk_Url_Request::url):
        (Ewk_Url_Request::firstParty):
        (Ewk_Url_Request::httpMethod):
        (ewk_url_request_url_get):
        (ewk_request_cookies_first_party_get):
        (ewk_url_request_http_method_get):
        * UIProcess/API/efl/ewk_url_request_private.h:
        (Ewk_Url_Request):
        * UIProcess/API/efl/ewk_url_response.cpp:
        (Ewk_Url_Response::Ewk_Url_Response):
        (Ewk_Url_Response::httpStatusCode):
        (Ewk_Url_Response::url):
        (Ewk_Url_Response::mimeType):
        (Ewk_Url_Response::contentLength):
        (ewk_url_response_url_get):
        (ewk_url_response_status_code_get):
        (ewk_url_response_mime_type_get):
        (ewk_url_response_content_length_get):
        * UIProcess/API/efl/ewk_url_response_private.h:
        (Ewk_Url_Response):
        * UIProcess/API/efl/ewk_url_scheme_request.cpp:
        (Ewk_Url_Scheme_Request::Ewk_Url_Scheme_Request):
        (Ewk_Url_Scheme_Request::id):
        (Ewk_Url_Scheme_Request::url):
        (Ewk_Url_Scheme_Request::scheme):
        (Ewk_Url_Scheme_Request::path):
        (Ewk_Url_Scheme_Request::finish):
        (ewk_url_scheme_request_scheme_get):
        (ewk_url_scheme_request_url_get):
        (ewk_url_scheme_request_path_get):
        (ewk_url_scheme_request_finish):
        * UIProcess/API/efl/ewk_url_scheme_request.h: Fix ewk_url_scheme_request_finish() declaration
        so that the request argument is no longer marked as const and so that the content type is of
        type uint64_t instead of unsigned int.
        * UIProcess/API/efl/ewk_url_scheme_request_private.h:
        (Ewk_Url_Scheme_Request):

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

        [EFL][WK2] Make Ewk_Form_Submission_Request, Ewk_Navigation_Data and Ewk_Navigation_Policy_Decision members private
        https://bugs.webkit.org/show_bug.cgi?id=99934

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Form_Submission_Request, Ewk_Navigation_Data and
        Ewk_Navigation_Policy_Decision class members private.

        * UIProcess/API/efl/ewk_form_submission_request.cpp:
        (Ewk_Form_Submission_Request::Ewk_Form_Submission_Request):
        (Ewk_Form_Submission_Request::~Ewk_Form_Submission_Request):
        (Ewk_Form_Submission_Request::fieldValue):
        (Ewk_Form_Submission_Request::fieldNames):
        (Ewk_Form_Submission_Request::submit):
        (ewk_form_submission_request_field_names_get):
        (ewk_form_submission_request_field_value_get):
        (ewk_form_submission_request_submit):
        * UIProcess/API/efl/ewk_form_submission_request_private.h:
        (Ewk_Form_Submission_Request):
        * UIProcess/API/efl/ewk_navigation_data.cpp:
        (Ewk_Navigation_Data::Ewk_Navigation_Data):
        (Ewk_Navigation_Data::originalRequest):
        (Ewk_Navigation_Data::title):
        (Ewk_Navigation_Data::url):
        (ewk_navigation_data_title_get):
        (ewk_navigation_data_original_request_get):
        (ewk_navigation_data_url_get):
        * UIProcess/API/efl/ewk_navigation_data_private.h:
        (Ewk_Navigation_Data):
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        (Ewk_Navigation_Policy_Decision::Ewk_Navigation_Policy_Decision):
        (Ewk_Navigation_Policy_Decision::~Ewk_Navigation_Policy_Decision):
        (Ewk_Navigation_Policy_Decision::navigationType):
        (Ewk_Navigation_Policy_Decision::mouseButton):
        (Ewk_Navigation_Policy_Decision::modifiers):
        (Ewk_Navigation_Policy_Decision::frameName):
        (Ewk_Navigation_Policy_Decision::request):
        (Ewk_Navigation_Policy_Decision::accept):
        (Ewk_Navigation_Policy_Decision::reject):
        (Ewk_Navigation_Policy_Decision::download):
        (ewk_navigation_policy_navigation_type_get):
        (ewk_navigation_policy_mouse_button_get):
        (ewk_navigation_policy_modifiers_get):
        (ewk_navigation_policy_frame_name_get):
        (ewk_navigation_policy_request_get):
        (ewk_navigation_policy_decision_accept):
        (ewk_navigation_policy_decision_reject):
        (ewk_navigation_policy_decision_download):
        * UIProcess/API/efl/ewk_navigation_policy_decision_private.h:
        (Ewk_Navigation_Policy_Decision):

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

        [EFL][WK2] Make Ewk_Favicon_Database members private
        https://bugs.webkit.org/show_bug.cgi?id=99932

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Favicon_Database class members private.

        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (Ewk_Favicon_Database::Ewk_Favicon_Database):
        (Ewk_Favicon_Database::iconURLForPageURL):
        (Ewk_Favicon_Database::watchChanges):
        (Ewk_Favicon_Database::unwatchChanges):
        (AsyncIconRequestResponse):
        (AsyncIconRequestResponse::AsyncIconRequestResponse):
        (respond_icon_request_idle):
        (Ewk_Favicon_Database::iconForPageURL):
        (Ewk_Favicon_Database::didChangeIconForPageURL):
        (Ewk_Favicon_Database::getIconSurfaceSynchronously):
        (Ewk_Favicon_Database::iconDataReadyForPageURL):
        (ewk_favicon_database_icon_url_get):
        (ewk_favicon_database_async_icon_get):
        (ewk_favicon_database_icon_change_callback_add):
        (ewk_favicon_database_icon_change_callback_del):
        * UIProcess/API/efl/ewk_favicon_database.h:
        * UIProcess/API/efl/ewk_favicon_database_private.h:
        (Ewk_Favicon_Database):
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data::~Ewk_View_Private_Data):
        (_ewk_view_initialize):

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

        [EFL][WK2] Make Ewk back / forward list classes members private and remove private C functions
        https://bugs.webkit.org/show_bug.cgi?id=99929

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Back_Forward_List and Ewk_Back_Forward_List_Item members
        private and remove private C functions.

        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (Ewk_Back_Forward_List::Ewk_Back_Forward_List):
        (Ewk_Back_Forward_List::nextItem):
        (Ewk_Back_Forward_List::previousItem):
        (Ewk_Back_Forward_List::currentItem):
        (Ewk_Back_Forward_List::itemAt):
        (Ewk_Back_Forward_List::size):
        (Ewk_Back_Forward_List::backList):
        (Ewk_Back_Forward_List::forwardList):
        (Ewk_Back_Forward_List::getFromCacheOrCreate):
        (Ewk_Back_Forward_List::createEinaList):
        (Ewk_Back_Forward_List::update):
        (ewk_back_forward_list_current_item_get):
        (ewk_back_forward_list_previous_item_get):
        (ewk_back_forward_list_next_item_get):
        (ewk_back_forward_list_item_at_index_get):
        (ewk_back_forward_list_count):
        (ewk_back_forward_list_n_back_items_copy):
        (ewk_back_forward_list_n_forward_items_copy):
        * UIProcess/API/efl/ewk_back_forward_list_item.cpp:
        (Ewk_Back_Forward_List_Item::Ewk_Back_Forward_List_Item):
        (Ewk_Back_Forward_List_Item::url):
        (Ewk_Back_Forward_List_Item::title):
        (Ewk_Back_Forward_List_Item::originalURL):
        (ewk_back_forward_list_item_url_get):
        (ewk_back_forward_list_item_title_get):
        (ewk_back_forward_list_item_original_url_get):
        * UIProcess/API/efl/ewk_back_forward_list_item_private.h:
        (Ewk_Back_Forward_List_Item):
        * UIProcess/API/efl/ewk_back_forward_list_private.h:
        (Ewk_Back_Forward_List):
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didChangeBackForwardList):

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

        [EFL][WK2] Make Ewk_Cookie_Manager members private
        https://bugs.webkit.org/show_bug.cgi?id=99930

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Cookie_Manager class members private.

        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (Ewk_Cookie_Manager::Ewk_Cookie_Manager):
        (Ewk_Cookie_Manager::~Ewk_Cookie_Manager):
        (Ewk_Cookie_Manager::setPersistentStorage):
        (Ewk_Cookie_Manager::setHTTPAcceptPolicy):
        (Ewk_Cookie_Manager::clearHostnameCookies):
        (Ewk_Cookie_Manager::clearAllCookies):
        (Ewk_Cookie_Manager::watchChanges):
        (Ewk_Cookie_Manager::isWatchingForChanges):
        (Ewk_Cookie_Manager::getHostNamesWithCookies):
        (Ewk_Cookie_Manager::getHTTPAcceptPolicy):
        (Ewk_Cookie_Manager::cookiesDidChange):
        (ewk_cookie_manager_persistent_storage_set):
        (ewk_cookie_manager_accept_policy_set):
        (Get_Policy_Async_Data):
        (Get_Policy_Async_Data::Get_Policy_Async_Data):
        (ewk_cookie_manager_async_accept_policy_get):
        (Get_Hostnames_Async_Data):
        (Get_Hostnames_Async_Data::Get_Hostnames_Async_Data):
        (ewk_cookie_manager_async_hostnames_with_cookies_get):
        (ewk_cookie_manager_hostname_cookies_clear):
        (ewk_cookie_manager_cookies_clear):
        (ewk_cookie_manager_changes_watch):
        * UIProcess/API/efl/ewk_cookie_manager_private.h:
        (Ewk_Cookie_Manager):

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

        [EFL][WK2] Make Ewk intent classes members private
        https://bugs.webkit.org/show_bug.cgi?id=99832

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Intent and Ewk_Intent_Service members
        private and add class methods to get them.

        * UIProcess/API/efl/ewk_intent.cpp:
        (Ewk_Intent::Ewk_Intent):
        (Ewk_Intent::webIntentData):
        (Ewk_Intent::action):
        (Ewk_Intent::type):
        (Ewk_Intent::service):
        (Ewk_Intent::suggestions):
        (Ewk_Intent::extra):
        (Ewk_Intent::extraKeys):
        (ewk_intent_action_get):
        (ewk_intent_type_get):
        (ewk_intent_service_get):
        (ewk_intent_suggestions_get):
        (ewk_intent_extra_get):
        (ewk_intent_extra_names_get):
        * UIProcess/API/efl/ewk_intent_private.h:
        (WebKit):
        (Ewk_Intent):
        * UIProcess/API/efl/ewk_intent_service.cpp:
        (Ewk_Intent_Service::Ewk_Intent_Service):
        (Ewk_Intent_Service::action):
        (Ewk_Intent_Service::type):
        (Ewk_Intent_Service::href):
        (Ewk_Intent_Service::title):
        (Ewk_Intent_Service::disposition):
        (ewk_intent_service_action_get):
        (ewk_intent_service_type_get):
        (ewk_intent_service_href_get):
        (ewk_intent_service_title_get):
        (ewk_intent_service_disposition_get):
        * UIProcess/API/efl/ewk_intent_service_private.h:
        (Ewk_Intent_Service):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_intent_deliver):

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

        [EFL][WK2] Make Ewk_Download_Job members private and remove private C functions
        https://bugs.webkit.org/show_bug.cgi?id=99697

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Download_Job private and replace private C functions
        by class methods. New methods were also added to match the
        public C API.

        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_download_job_add):
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (decideDestinationWithSuggestedFilename):
        (didReceiveResponse):
        (didCreateDestination):
        (didReceiveData):
        (didFail):
        (didCancel):
        (didFinish):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (Ewk_Download_Job::Ewk_Download_Job):
        (Ewk_Download_Job::id):
        (Ewk_Download_Job::view):
        (ewk_download_job_state_get):
        (Ewk_Download_Job::state):
        (ewk_download_job_request_get):
        (Ewk_Download_Job::request):
        (ewk_download_job_response_get):
        (Ewk_Download_Job::response):
        (ewk_download_job_destination_get):
        (Ewk_Download_Job::destination):
        (ewk_download_job_destination_set):
        (Ewk_Download_Job::setDestination):
        (ewk_download_job_suggested_filename_get):
        (Ewk_Download_Job::suggestedFileName):
        (ewk_download_job_cancel):
        (Ewk_Download_Job::cancel):
        (ewk_download_job_estimated_progress_get):
        (Ewk_Download_Job::estimatedProgress):
        (ewk_download_job_elapsed_time_get):
        (Ewk_Download_Job::elapsedTime):
        (Ewk_Download_Job::setResponse):
        (Ewk_Download_Job::setSuggestedFileName):
        (Ewk_Download_Job::incrementReceivedData):
        (Ewk_Download_Job::setState):
        * UIProcess/API/efl/ewk_download_job.h:
        * UIProcess/API/efl/ewk_download_job_private.h:
        (Ewk_Download_Job):

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

        Remove ::encode template specializations and just use overloads
        https://bugs.webkit.org/show_bug.cgi?id=99865

        Reviewed by Andreas Kling.

        Get rid of the various encode functions and just use overloading instead.

        * Platform/CoreIPC/ArgumentCoders.cpp:
        (CoreIPC::::encode):
        * Platform/CoreIPC/ArgumentCoders.h:
        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::encodeVariableLengthByteArray):
        (CoreIPC::ArgumentEncoder::encode):
        * Platform/CoreIPC/ArgumentEncoder.h:
        (ArgumentEncoder):
        (CoreIPC::ArgumentEncoder::encodeEnum):
        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::sendOutgoingMessage):
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::Handle::encode):
        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::SharedMemory::Handle::encode):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode):
        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode):
        * Shared/Plugins/NPIdentifierData.cpp:
        (WebKit::NPIdentifierData::encode):
        (WebKit::NPIdentifierData::decode):
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::encode):
        * Shared/mac/ArgumentCodersMac.mm:
        (CoreIPC::encode):
        * Shared/mac/KeychainAttribute.cpp:
        (CoreIPC::encode):
        * Shared/mac/PlatformCertificateInfo.mm:
        (WebKit::PlatformCertificateInfo::encode):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::HandleArray::encode):
        * Shared/mac/SecItemRequestData.cpp:
        (WebKit::SecItemRequestData::encode):
        * Shared/mac/SecItemResponseData.cpp:
        (WebKit::SecItemResponseData::encode):
        * Shared/mac/SecKeychainItemRequestData.cpp:
        (WebKit::SecKeychainItemRequestData::encode):
        * Shared/mac/SecKeychainItemResponseData.cpp:
        (WebKit::SecKeychainItemResponseData::encode):
        * Shared/qt/ArgumentCodersQt.cpp:
        (CoreIPC::::encode):
        * Shared/qt/QtNetworkReplyData.cpp:
        (WebKit::QtNetworkReplyData::encode):
        * Shared/soup/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::encode):
        * Shared/win/LayerTreeContextWin.cpp:
        (WebKit::LayerTreeContext::encode):
        * Shared/win/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::encode):
        * Shared/win/WindowGeometry.cpp:
        (WebKit::WindowGeometry::encode):
        * WebProcess/WebPage/EncoderAdapter.cpp:
        (WebKit::EncoderAdapter::encodeBool):
        (WebKit::EncoderAdapter::encodeUInt16):
        (WebKit::EncoderAdapter::encodeUInt32):
        (WebKit::EncoderAdapter::encodeUInt64):
        (WebKit::EncoderAdapter::encodeInt32):
        (WebKit::EncoderAdapter::encodeInt64):
        (WebKit::EncoderAdapter::encodeFloat):
        (WebKit::EncoderAdapter::encodeDouble):
        (WebKit::EncoderAdapter::encodeString):

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

        Unreviewed. Fix compile warning.

        * UIProcess/API/gtk/tests/GNUmakefile.am: Pass sourcedir to
        glib-compile-resource when generating dependencies too.

2012-10-19  Seokju Kwon  <seokju.kwon@samsung.com>

        [EFL][WK2] Change the title of inspector window when inspected page is changed
        https://bugs.webkit.org/show_bug.cgi?id=99684

        Reviewed by Gyuyoung Kim.

        Implement platformInspectedURLChanged() to change the title of inspector window
        when inspected page is changed.

        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformInspectedURLChanged):

2012-10-19  Dan Bernstein  <mitz@apple.com>

        Add bundle API for hit-testing
        https://bugs.webkit.org/show_bug.cgi?id=99907

        Reviewed by Sam Weinig.

        Test: TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest.cpp

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCreateHitTestResult): Added this wrapper.
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::hitTest): Added. Hit tests at the given point, ignoring clipping.
        * WebProcess/WebPage/WebFrame.h:
        (WebFrame): Declared hitTest.

2012-10-19  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Add API unit tests for scaling
        https://bugs.webkit.org/show_bug.cgi?id=99451

        Reviewed by Gyuyoung Kim.

        Add API unit test for ewk_view_scale_set()/get() APIs.

        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2012-10-19  KyungTae Kim  <ktf.kim@samsung.com>

        [WK2][EFL] Modify ewk_view_scale_set to public API
        https://bugs.webkit.org/show_bug.cgi?id=99902

        Reviewed by Gyuyoung Kim.

        Modify ewk_view_scale_set to public API.

        * UIProcess/API/efl/ewk_view.h:

2012-10-19  Andreas Kling  <kling@webkit.org>

        Race condition in WebProcessProxy::handleGetPlugins().
        <http://webkit.org/b/99903>
        <rdar://problem/12541471>

        Reviewed by Anders Carlsson.

        Scope the Vector<PluginModuleInfo> so that all the destructors are guaranteed
        to have run when sendDidGetPlugins() executes on the main thread.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::handleGetPlugins):

2012-10-19  Brady Eidson  <beidson@apple.com>

        WebProcess should only connect to the NetworkProcess if NetworkProcess is enabled
        https://bugs.webkit.org/show_bug.cgi?id=99885

        Reviewed by Alexey Proskuryakov.

        WebContext should tell each WebProcess it creates whether NetworkProcess use is enabled.

        Add a WebProcess initialization flag for whether or not NetworkProcess use is enabled:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters):

        Include that info in the initialization parameters:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):

        Store whether or not NetworkProcess use is enabled, and only connect to the NetworkProcess if appropriate:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::ensureNetworkProcessConnection):
        * WebProcess/WebProcess.h:

2012-10-19  Brady Eidson  <beidson@apple.com>

        Add infrastructure for NetworkProcess management
        https://bugs.webkit.org/show_bug.cgi?id=99817

        Reviewed by Alexey Proskuryakov.

        Add support for the WebProcess itself requesting a connection to the default NetworkProcess.

        Add proper handling of crashes so any of the Web/Network/UI processes crash the others take appropriate action.

        Project file stuff and general messaging changes:
        * DerivedSources.make:
        * Platform/CoreIPC/MessageID.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC):
        (CoreIPC::callMemberFunction): Add some new required templates.

        WebContext now does much less of this stuff:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        * UIProcess/WebContext.h:
        (WebContext):

        UIProcess now has a process manager to handle most of this:
        * UIProcess/Network/NetworkProcessManager.cpp:
        (WebKit):
        (WebKit::NetworkProcessManager::shared):
        (WebKit::NetworkProcessManager::NetworkProcessManager):
        (WebKit::NetworkProcessManager::getNetworkProcessConnection):
        (WebKit::NetworkProcessManager::ensureNetworkProcess):
        (WebKit::NetworkProcessManager::removeNetworkProcessProxy):
        * UIProcess/Network/NetworkProcessManager.h:
        (WebKit):
        (NetworkProcessManager):

        Flesh out the NetworkProcessProxy to handle creating these connections between Network and Web Processes:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::create):
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        (WebKit):
        (WebKit::NetworkProcessProxy::networkProcessCrashedOrFailedToLaunch):
        (WebKit::NetworkProcessProxy::didReceiveMessage):
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::didCreateNetworkConnectionToWebProcess):
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/Network/NetworkProcessProxy.h:
        (WebKit):
        (NetworkProcessProxy):
        * UIProcess/Network/NetworkProcessProxy.messages.in:

        Add a class representing a connection from a NetworkProcess to a particular WebProcess:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp: Added.
        (WebKit):
        (WebKit::NetworkConnectionToWebProcess::create):
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::didReceiveInvalidMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveNetworkConnectionToWebProcessMessage):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit):
        (NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::connection):
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:

        Add the ability for a NetworkProcess to create a connection for a different process, which is used on behalf of WebProcesses for now:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::removeNetworkConnectionToWebProcess):
        (WebKit):
        (WebKit::NetworkProcess::didClose):
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        * NetworkProcess/NetworkProcess.h:
        (WebKit):
        (NetworkProcess):
        * NetworkProcess/NetworkProcess.messages.in:

        Forward on the message that a WebProcess wants a connection to a NetworkProcess:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit):
        (WebKit::WebProcessProxy::getNetworkProcessConnection):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/WebProcessProxy.messages.in:

        Add a class representing the WebProcesses connection to the NetworkProcess:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit):
        (WebKit::NetworkProcessConnection::NetworkProcessConnection):
        (WebKit::NetworkProcessConnection::~NetworkProcessConnection):
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didReceiveSyncMessage):
        (WebKit::NetworkProcessConnection::didClose):
        (WebKit::NetworkProcessConnection::didReceiveInvalidMessage):
        * WebProcess/Network/NetworkProcessConnection.h:
        (WebKit):
        (NetworkProcessConnection):
        (WebKit::NetworkProcessConnection::create):
        (WebKit::NetworkProcessConnection::connection):

        Have the WebProcess make sure it has a connection to the NetworkProcess, even though it currently does nothing with it:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit):
        (WebKit::WebProcess::ensureNetworkProcessConnection):
        (WebKit::WebProcess::networkProcessConnectionClosed):
        (WebKit::WebProcess::networkProcessCrashed):
        * WebProcess/WebProcess.h:
        (WebKit):
        (WebProcess):
        * WebProcess/WebProcess.messages.in:

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

        Unreviewed, rolling out r131931.
        http://trac.webkit.org/changeset/131931
        https://bugs.webkit.org/show_bug.cgi?id=99871

        Broke Safari exensions (Requested by smfr on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::createSyncMessageEncoder):
        (CoreIPC::Connection::dispatchSyncMessage):
        * Platform/CoreIPC/Connection.h:
        (Connection):
        (CoreIPC::Connection::deprecatedSendSync):
        (CoreIPC::Connection::deprecatedSend):
        * Platform/CoreIPC/MessageDecoder.cpp:
        (CoreIPC::MessageDecoder::MessageDecoder):
        * Platform/CoreIPC/MessageDecoder.h:
        (MessageDecoder):
        * Platform/CoreIPC/MessageEncoder.cpp:
        (CoreIPC::MessageEncoder::create):
        (CoreIPC::MessageEncoder::MessageEncoder):
        * Platform/CoreIPC/MessageEncoder.h:
        (MessageEncoder):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * Platform/CoreIPC/StringReference.cpp: Removed.
        * Platform/CoreIPC/StringReference.h: Removed.
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):
        * Scripts/webkit2/messages.py:
        (message_to_struct_declaration):
        (forward_declarations_and_headers):
        (generate_messages_header):
        * Scripts/webkit2/messages_unittest.py:
        * Shared/CoreIPCSupport/WebContextMessageKinds.h:
        * Target.pri:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::deprecatedSend):
        (WebKit::WebProcessProxy::send):
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

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

        Don't use CStrings for message receiver names and message names
        https://bugs.webkit.org/show_bug.cgi?id=99853

        Reviewed by Andreas Kling.

        Introduce StringReference which is similar to DataReference except it holds a pointer to + length of a char *
        and can be created from a string literal. Use this in place of CString in MessageEncoder/MessageDecoder and
        make MessageReceiverMap use a HashMap from StringReferences to MessageReceivers for global message receivers.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::createSyncMessageEncoder):
        (CoreIPC::Connection::dispatchSyncMessage):
        * Platform/CoreIPC/Connection.h:
        (Connection):
        (CoreIPC::Connection::deprecatedSendSync):
        (CoreIPC::Connection::deprecatedSend):
        * Platform/CoreIPC/MessageDecoder.cpp:
        (CoreIPC::MessageDecoder::MessageDecoder):
        * Platform/CoreIPC/MessageDecoder.h:
        (CoreIPC::MessageDecoder::messageReceiverName):
        (CoreIPC::MessageDecoder::messageName):
        (MessageDecoder):
        * Platform/CoreIPC/MessageEncoder.cpp:
        (CoreIPC::MessageEncoder::create):
        (CoreIPC::MessageEncoder::MessageEncoder):
        * Platform/CoreIPC/MessageEncoder.h:
        (CoreIPC):
        (MessageEncoder):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::addMessageReceiver):
        (CoreIPC):
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * Platform/CoreIPC/StringReference.cpp: Added.
        (CoreIPC):
        (CoreIPC::StringReference::encode):
        (CoreIPC::StringReference::decode):
        (CoreIPC::StringReference::Hash::hash):
        * Platform/CoreIPC/StringReference.h: Added.
        (CoreIPC):
        (StringReference):
        (CoreIPC::StringReference::StringReference):
        (CoreIPC::StringReference::isEmpty):
        (CoreIPC::StringReference::size):
        (CoreIPC::StringReference::data):
        (CoreIPC::StringReference::operator==):
        (Hash):
        (CoreIPC::StringReference::Hash::equal):
        (WTF):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):
        * Scripts/webkit2/messages.py:
        (message_to_struct_declaration):
        (forward_declarations_and_headers):
        (generate_messages_header):
        * Scripts/webkit2/messages_unittest.py:
        * Shared/CoreIPCSupport/WebContextMessageKinds.h:
        * Target.pri:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::addMessageReceiver):
        (WebKit):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::deprecatedSend):
        (WebKit::WebProcessProxy::send):
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2012-10-19  Dongwoo Joshua Im  <dw.im@samsung.com>

        Rename ENABLE_CSS3_TEXT_DECORATION to ENABLE_CSS3_TEXT
        https://bugs.webkit.org/show_bug.cgi?id=99804

        Reviewed by Julien Chaffraix.

        CSS3 text related properties will be implemented under this flag,
        including text decoration, text-align-last, and text-justify.

        * Configurations/FeatureDefines.xcconfig:

2012-10-19  Brady Eidson  <beidson@apple.com>

        REGRESSION (r131686): Crash in NSToolTipManager mouseEnteredToolTip
        <rdar://problem/12527528> and https://bugs.webkit.org/show_bug.cgi?id=99792

        Patch by Darin Adler, reviewed by Brady Eidson.

        We should explicitly remove tooltips when the view moves to a new window.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]):

2012-10-19  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WTR] renderToOffscreenBuffer should not be set if the real render loop is active
        https://bugs.webkit.org/show_bug.cgi?id=99831

        Reviewed by Jocelyn Turcotte.

        Update the comment about renderToOffscreenBuffer to better describe its role.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::setNeedsDisplay):

2012-10-19  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2] Rename EflViewportHandler to PageViewportControllerClientEfl
        https://bugs.webkit.org/show_bug.cgi?id=99101

        Reviewed by Gyuyoung Kim.

        Rename EFlViewportHandler to PageViewportControllerClientEfl.
        Also, make it inherit from PageViewportControllerClient. The actual implementation
        of PageViewportControllerClient for Efl port will come in a separate patch.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * UIProcess/API/efl/EflViewportHandler.cpp: Removed.
        * UIProcess/API/efl/EflViewportHandler.h: Removed.
        * UIProcess/API/efl/PageViewportControllerClientEfl.cpp: Copied from Source/WebKit2/UIProcess/API/efl/EflViewportHandler.cpp.
        (WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::~PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::drawingArea):
        (WebKit::PageViewportControllerClientEfl::setRendererActive):
        (WebKit::PageViewportControllerClientEfl::display):
        (WebKit::PageViewportControllerClientEfl::updateViewportSize):
        (WebKit::PageViewportControllerClientEfl::setVisibleContentsRect):
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):
        (WebKit):
        (WebKit::PageViewportControllerClientEfl::setViewportPosition):
        (WebKit::PageViewportControllerClientEfl::setContentsScale):
        (WebKit::PageViewportControllerClientEfl::didResumeContent):
        (WebKit::PageViewportControllerClientEfl::didChangeVisibleContents):
        (WebKit::PageViewportControllerClientEfl::didChangeViewportAttributes):
        (WebKit::PageViewportControllerClientEfl::setController):
        * UIProcess/API/efl/PageViewportControllerClientEfl.h: Copied from Source/WebKit2/UIProcess/API/efl/EflViewportHandler.h.
        (WebKit::PageViewportControllerClientEfl::create):
        (PageViewportControllerClientEfl):
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (_ewk_view_initialize):
        (ewk_view_scale_set):
        * UIProcess/PageViewportController.cpp:
        * UIProcess/PageViewportController.h:

2012-10-19  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r131844): It broke the build on !ENABLE(NETSCAPE_PLUGIN_API) platforms
        https://bugs.webkit.org/show_bug.cgi?id=99820

        Reviewed by Jocelyn Turcotte.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncher::launchProcess): Add missing ENABLE(PLUGIN_PROCESS) guard.
        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp: The whole file should be ENABLE(NETSCAPE_PLUGIN_API) guarded as the PluginInfoStore class.
        (WebKit::PluginInfoStore::getPluginInfo):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin): Eliminate the unused webPage variable (build fail with -Werror) if !(PLATFORM(MAC)||ENABLE(NETSCAPE_PLUGIN_API)).

2012-10-19  Huang Dongsung  <luxtella@company100.net>

        Build fix after r131741 for !ENABLE(CSS_SHADERS) platforms.
        https://bugs.webkit.org/show_bug.cgi?id=99775

        Reviewed by Csaba Osztrogonác.

        A class in WebKit namespace is only used when ENABLE(CSS_SHADERS), so we
        must guard "using namespace WebKit" by ENABLE(CSS_SHADERS). Otherwise,
        it brokes the Qt --minimal build.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::decode):

2012-10-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION (r130640 - r130644): TestCookieManager API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=98738

        Reviewed by Philippe Normand.

        For some reason the order of the domains in the array has changed,
        but it doesn't really matter, what we want to check is that both
        cookies have been accepted and the array contains both domains.

        * UIProcess/API/gtk/tests/TestCookieManager.cpp:
        (testCookieManagerAcceptPolicy): Check that first and third party
        domains are present in the domains array.

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebPageProxy::canShowMIMEType() should return false for plugins when they are disabled
        https://bugs.webkit.org/show_bug.cgi?id=99449

        Reviewed by Anders Carlsson.

        * UIProcess/API/gtk/tests/GNUmakefile.am:
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewCanShowMIMEType): Test that
        webkit_web_view_can_show_mime_type() returns FALSE if plugins are
        disabled.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canShowMIMEType): Return false for
        MIME-Type of plugins if they are disabled.

2012-10-18  Brady Eidson  <beidson@apple.com>

        Move ConnectionStack out of WebProcessConnection into its own files.
        https://bugs.webkit.org/show_bug.cgi?id=99813

        Reviewed by Andreas Kling.

        ConnectionStack will need to be used in a few upcoming areas, so it needs to be in its own header and implementation files.

        Project file stuff:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebKit2.xcodeproj/project.pbxproj:

        Move it from here:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::setGlobalException):
        (WebKit::WebProcessConnection::didReceiveMessage):
        (WebKit::WebProcessConnection::didReceiveSyncMessage):

        Into here:
        * Shared/ConnectionStack.cpp: Added.
        (WebKit):
        (WebKit::ConnectionStack::shared):
        * Shared/ConnectionStack.h: Added.
        (CoreIPC):
        (WebKit):
        (ConnectionStack):
        (WebKit::ConnectionStack::current):
        (CurrentConnectionPusher):
        (WebKit::ConnectionStack::CurrentConnectionPusher::CurrentConnectionPusher):
        (WebKit::ConnectionStack::CurrentConnectionPusher::~CurrentConnectionPusher):

2012-10-18  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Move ewk_{init,shutdown}() to the main() function of EFL API test.
        https://bugs.webkit.org/show_bug.cgi?id=99681

        Reviewed by Gyuyoung Kim.

        The ewk_{init,shutdown}() is called whenever processing the each test,
        so tests can be failed if EFL libraries APIs are called between
        ewk_shutdown() and next ewk_init().
        The ewk_{init,shutdown}() should be called once per application.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::SetUp):
        (EWK2UnitTest::EWK2UnitTestBase::TearDown):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestMain.cpp:
        (main):

2012-10-18  Byungwoo Lee  <bw80.lee@samsung.com>

        Fix build warning.
        https://bugs.webkit.org/show_bug.cgi?id=99788

        Reviewed by Kentaro Hara.

        Remove parameter name or use ASSERT_UNUSED macro for removing
        -Wunused-parameter.

        * PluginProcess/unix/PluginProcessMainUnix.cpp:
        (WebKit::PluginProcessMainUnix):
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::platformInitializeLaunchOptions):

2012-10-18  Ryuan Choi  <ryuan.choi@gmail.com>

        Attempt to fix the WebKit2/Efl build after r131841.

        Unreviewed build fix.

        Rename addMessageReceiver to deprecatedAddMessageReceiver.

        * UIProcess/WebBatteryManagerProxy.cpp:
        (WebKit::WebBatteryManagerProxy::WebBatteryManagerProxy):
        * UIProcess/WebNetworkInfoManagerProxy.cpp:
        (WebKit::WebNetworkInfoManagerProxy::WebNetworkInfoManagerProxy):
        * UIProcess/WebVibrationProxy.cpp:
        (WebKit::WebVibrationProxy::WebVibrationProxy):
        * UIProcess/soup/WebSoupRequestManagerProxy.cpp:
        (WebKit::WebSoupRequestManagerProxy::WebSoupRequestManagerProxy):

2012-10-18  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] WebKit2 does not build without PLUGIN_PROCESS on Mac
        https://bugs.webkit.org/show_bug.cgi?id=99771

        Reviewed by Anders Carlsson.

        Add ENABLE(PLUGIN_PROCESS), ENABLE(SHARED_WORKER_PROCESS) and ENABLE(NETSCAPE_PLUGIN_API)
        as needed to exclude the code with dependencies on PLUGIN_PROCESS.

        * Platform/CoreIPC/MessageID.h:
        * Shared/SharedWorkerProcessCreationParameters.cpp:
        * Shared/SharedWorkerProcessCreationParameters.h:
        * SharedWorkerProcess/SharedWorkerProcess.cpp:
        * SharedWorkerProcess/SharedWorkerProcess.h:
        * SharedWorkerProcess/SharedWorkerProcess.messages.in:
        * SharedWorkerProcess/mac/SharedWorkerProcessMac.mm:
        * SharedWorkerProcess/mac/SharedWorkerProcessMainMac.mm:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetAdditionalPluginsDirectory):
        (WKContextGetPluginSiteDataManager):
        * UIProcess/API/C/WKPluginSiteDataManager.cpp:
        (WKPluginSiteDataManagerGetTypeID):
        (WKPluginSiteDataManagerGetSitesWithData):
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::processTypeAsString):
        (WebKit::ProcessLauncher::getProcessTypeFromString):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::createProcess):
        * UIProcess/Plugins/PluginInfoStore.cpp:
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        * UIProcess/Plugins/WebPluginSiteDataManager.h:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::getPluginInfo):
        * UIProcess/SharedWorkers/SharedWorkerProcessManager.cpp:
        * UIProcess/SharedWorkers/SharedWorkerProcessManager.h:
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.cpp:
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.h:
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.messages.in:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::shouldTerminate):
        (WebKit::WebContext::disconnectProcess):
        (WebKit):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canShowMIMEType):
        (WebKit):
        (WebKit::WebPageProxy::didBlockInsecurePluginVersion):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/WebProcessProxy.messages.in:
        * WebKit2Prefix.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):
        (WebKit::WebFrameLoaderClient::recreatePlugin):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::WebPlatformStrategies):
        (WebKit::WebPlatformStrategies::refreshPlugins):
        (WebKit::WebPlatformStrategies::getPluginInfo):
        (WebKit):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):
        (WebKit):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit):
        (WebKit::WebPage::createPlugin):
        (WebKit::canPluginHandleResponse):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebProcess.cpp:
        (WebKit):
        * WebProcess/WebProcess.h:
        (WebProcess):
        * WebProcess/WebProcess.messages.in:

2012-10-18  Laszlo Gombos  <l.gombos@samsung.com>

        [EFL] Buildfix if Netscape plugin support is disabled
        https://bugs.webkit.org/show_bug.cgi?id=99757

        Reviewed by Gyuyoung Kim.

        Guard PluginProcessMainUnix.cpp with ENABLE(PLUGIN_PROCESS).

        * PluginProcess/unix/PluginProcessMainUnix.cpp:

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

        Deprecate the current version of MessageReceiverMap::addMessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=99797

        Reviewed by Andreas Kling.

        Rename addMessageReceiver to deprecatedAddMessageReceiver in preparation for adding a new
        version that takes a string instead.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::deprecatedAddMessageReceiver):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::deprecatedAddMessageReceiver):
        (CoreIPC::MessageReceiverMap::invalidate):
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::WebNotificationManagerProxy):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::WebApplicationCacheManagerProxy):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::deprecatedAddMessageReceiver):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::WebCookieManagerProxy):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::WebDatabaseManagerProxy):
        * UIProcess/WebGeolocationManagerProxy.cpp:
        (WebKit::WebGeolocationManagerProxy::WebGeolocationManagerProxy):
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::WebIconDatabase):
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::WebKeyValueStorageManagerProxy):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::WebMediaCacheManagerProxy):
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::WebResourceCacheManagerProxy):
        * WebProcess/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::AuthenticationManager):
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::registerWebPage):

2012-10-18  Chris Fleizach  <cfleizach@apple.com>

        AX: Crashes in WebProcess at com.apple.WebCore: -[AccessibilityObjectWrapper remoteAccessibilityParentObject] + 78
        https://bugs.webkit.org/show_bug.cgi?id=96443

        Reviewed by Beth Dakin.

        It appears that the crash is due to not checking whether the page object is null. 

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::accessibilityRemoteObject):

2012-10-18  Jaehun Lim  <ljaehun.lim@samsung.com>

        Add support for float-valued prefernces
        https://bugs.webkit.org/show_bug.cgi?id=99419

        Reviewed by Anders Carlsson.

        Support float values for preferences in WK2.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::encode):
        (WebKit::WebPreferencesStore::decode):
        (WebKit):
        (WebKit::defaultValueForKey):
        * Shared/WebPreferencesStore.h:
        (WebKit):
        (WebPreferencesStore):
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::updateFloatValueForKey):
        (WebKit):
        * UIProcess/WebPreferences.h:
        (WebPreferences):
        * UIProcess/cf/WebPreferencesCF.cpp:
        (WebKit::WebPreferences::platformUpdateFloatValueForKey):
        (WebKit):
        * UIProcess/efl/WebPreferencesEfl.cpp:
        (WebKit::WebPreferences::platformUpdateFloatValueForKey):
        (WebKit):
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformUpdateFloatValueForKey):
        (WebKit):
        * UIProcess/mac/WebPreferencesMac.mm:
        (WebKit::WebPreferences::platformUpdateFloatValueForKey):
        (WebKit):
        * UIProcess/qt/WebPreferencesQt.cpp:
        (WebKit::WebPreferences::platformUpdateFloatValueForKey):
        (WebKit):

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

        Replace uses of ArgumentEncoder/ArgumentDecoder with MessageEncoder/MessageDecoder
        https://bugs.webkit.org/show_bug.cgi?id=99746

        Reviewed by Andreas Kling.

        Change all occurrences of ArgumentDecoder* to MessageDecoder& and all occurrences of ArgumentEncoder*
        to ArgumentEncoder& in all the message receivers. This is the second step towards getting rid of MessageID.

2012-10-18  Yael Aharon  <yael.aharon@intel.com>

        PageViewportController::m_rawAttributes.devicePixelRatio is not initialized
        https://bugs.webkit.org/show_bug.cgi?id=99751

        Reviewed by Antonio Gomes.

        PageViewportController::m_rawAttributes.devicePixelRatio needs to be initialized.
        Due to race condition, we could set the viewport attributes before the first layout.
        If that happens, PageViewportController::m_rawAttributes.devicePixelRatio
        is used without being initialized.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):

2012-10-18  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Build fix after r131701 and r131777.

        * win/WebKit2.def:

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

        Build fix.

        * Scripts/webkit2/messages.py:
        (message_to_struct_declaration):
        (generate_messages_header):
        * Scripts/webkit2/messages_unittest.py:

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

        Generated messages should have a receiver name and a name
        https://bugs.webkit.org/show_bug.cgi?id=99740

        Reviewed by Andreas Kling.

        As a first step towards getting rid of MessageID, give each generated message a name and receiver name
        and pass them along when sending the messages.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::send):
        (CoreIPC::Connection::sendSync):
        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC::MessageSender::send):
        * Scripts/webkit2/messages.py:
        (message_to_struct_declaration):
        (generate_messages_header):
        * Scripts/webkit2/messages_unittest.py:

2012-10-18  Pablo Flouret  <pablof@motorola.com>

        Implement css3-conditional's @supports rule
        https://bugs.webkit.org/show_bug.cgi?id=86146

        Reviewed by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:
            Add an ENABLE_CSS3_CONDITIONAL_RULES flag.

2012-10-18  Michael Saboff  <msaboff@apple.com>

        Make conversion between JSStringRef and WKStringRef work without character size conversions
        https://bugs.webkit.org/show_bug.cgi?id=99727

        Reviewed by Anders Carlsson.

        Use the wrapped WTFString object to convert between JSStringRef and WKStringRef.

        * Shared/WebString.h:
        (WebKit::JSStringCreateWithString):
        (WebKit::WebString::create):
        (WebKit::WebString::createJSString):

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use using namespace WebKit in private headers in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=99724

        Reviewed by Xan Lopez.

        Move using namespace WebKit from private headers to the cpp file.

        * UIProcess/API/gtk/WebKitBackForwardList.cpp:
        * UIProcess/API/gtk/WebKitBackForwardListPrivate.h:
        * UIProcess/API/gtk/WebKitContextMenu.cpp:
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp:
        * UIProcess/API/gtk/WebKitContextMenuItemPrivate.h:
        * UIProcess/API/gtk/WebKitContextMenuPrivate.h:
        * UIProcess/API/gtk/WebKitCookieManager.cpp:
        * UIProcess/API/gtk/WebKitCookieManagerPrivate.h:
        * UIProcess/API/gtk/WebKitDownload.cpp:
        * UIProcess/API/gtk/WebKitDownloadPrivate.h:
        * UIProcess/API/gtk/WebKitFaviconDatabasePrivate.h:
        * UIProcess/API/gtk/WebKitFileChooserRequest.cpp:
        * UIProcess/API/gtk/WebKitFileChooserRequestPrivate.h:
        * UIProcess/API/gtk/WebKitFindController.cpp:
        * UIProcess/API/gtk/WebKitFormSubmissionRequest.cpp:
        * UIProcess/API/gtk/WebKitFormSubmissionRequestPrivate.h:
        * UIProcess/API/gtk/WebKitGeolocationPermissionRequest.cpp:
        * UIProcess/API/gtk/WebKitGeolocationPermissionRequestPrivate.h:
        * UIProcess/API/gtk/WebKitGeolocationProvider.cpp:
        * UIProcess/API/gtk/WebKitGeolocationProvider.h:
        * UIProcess/API/gtk/WebKitHitTestResult.cpp:
        * UIProcess/API/gtk/WebKitHitTestResultPrivate.h:
        * UIProcess/API/gtk/WebKitJavascriptResult.cpp:
        * UIProcess/API/gtk/WebKitJavascriptResultPrivate.h:
        * UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:
        * UIProcess/API/gtk/WebKitNavigationPolicyDecisionPrivate.h:
        * UIProcess/API/gtk/WebKitPolicyDecision.cpp:
        * UIProcess/API/gtk/WebKitPolicyDecisionPrivate.h:
        * UIProcess/API/gtk/WebKitResponsePolicyDecision.cpp:
        * UIProcess/API/gtk/WebKitResponsePolicyDecisionPrivate.h:
        * UIProcess/API/gtk/WebKitSettings.cpp:
        * UIProcess/API/gtk/WebKitSettingsPrivate.h:
        * UIProcess/API/gtk/WebKitURIResponse.cpp:
        * UIProcess/API/gtk/WebKitURIResponsePrivate.h:
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp:
        * UIProcess/API/gtk/WebKitURISchemeRequestPrivate.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
        * UIProcess/API/gtk/WebKitWebInspector.cpp:
        * UIProcess/API/gtk/WebKitWebInspectorPrivate.h:
        * UIProcess/API/gtk/WebKitWebResource.cpp:
        * UIProcess/API/gtk/WebKitWebResourcePrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/WebKitWindowProperties.cpp:
        * UIProcess/API/gtk/WebKitWindowPropertiesPrivate.h:

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitFileChooserRequest
        https://bugs.webkit.org/show_bug.cgi?id=96774

        Reviewed by Xan Lopez.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitFileChooserRequest.cpp:
        (_WebKitFileChooserRequestPrivate):
        (webkitFileChooserRequestCreate):
        (webkit_file_chooser_request_get_mime_types):
        (webkit_file_chooser_request_get_mime_types_filter):
        (webkit_file_chooser_request_get_select_multiple):
        (webkit_file_chooser_request_select_files):
        (webkit_file_chooser_request_get_selected_files):
        (webkit_file_chooser_request_cancel):
        * UIProcess/API/gtk/WebKitFileChooserRequestPrivate.h:
        * UIProcess/API/gtk/WebKitUIClient.cpp:
        (runOpenPanel):

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitFormSubmissionRequest
        https://bugs.webkit.org/show_bug.cgi?id=96777

        Reviewed by Xan Lopez.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitFormClient.cpp:
        (willSubmitForm):
        * UIProcess/API/gtk/WebKitFormSubmissionRequest.cpp:
        (_WebKitFormSubmissionRequestPrivate):
        (webkitFormSubmissionRequestCreate):
        (webkit_form_submission_request_get_text_fields):
        (webkit_form_submission_request_submit):
        * UIProcess/API/gtk/WebKitFormSubmissionRequestPrivate.h:

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitSettings
        https://bugs.webkit.org/show_bug.cgi?id=96784

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (_WebKitSettingsPrivate):
        (webkit_settings_class_init):
        (webkit_settings_init):
        (webkitSettingsAttachSettingsToPage):
        (webkit_settings_get_enable_javascript):
        (webkit_settings_set_enable_javascript):
        (webkit_settings_get_auto_load_images):
        (webkit_settings_set_auto_load_images):
        (webkit_settings_get_load_icons_ignoring_image_load_setting):
        (webkit_settings_set_load_icons_ignoring_image_load_setting):
        (webkit_settings_get_enable_offline_web_application_cache):
        (webkit_settings_set_enable_offline_web_application_cache):
        (webkit_settings_get_enable_html5_local_storage):
        (webkit_settings_set_enable_html5_local_storage):
        (webkit_settings_get_enable_html5_database):
        (webkit_settings_set_enable_html5_database):
        (webkit_settings_get_enable_xss_auditor):
        (webkit_settings_set_enable_xss_auditor):
        (webkit_settings_get_enable_frame_flattening):
        (webkit_settings_set_enable_frame_flattening):
        (webkit_settings_get_enable_plugins):
        (webkit_settings_set_enable_plugins):
        (webkit_settings_get_enable_java):
        (webkit_settings_set_enable_java):
        (webkit_settings_get_javascript_can_open_windows_automatically):
        (webkit_settings_set_javascript_can_open_windows_automatically):
        (webkit_settings_get_enable_hyperlink_auditing):
        (webkit_settings_set_enable_hyperlink_auditing):
        (webkit_settings_set_default_font_family):
        (webkit_settings_set_monospace_font_family):
        (webkit_settings_set_serif_font_family):
        (webkit_settings_set_sans_serif_font_family):
        (webkit_settings_set_cursive_font_family):
        (webkit_settings_set_fantasy_font_family):
        (webkit_settings_set_pictograph_font_family):
        (webkit_settings_get_default_font_size):
        (webkit_settings_set_default_font_size):
        (webkit_settings_get_default_monospace_font_size):
        (webkit_settings_set_default_monospace_font_size):
        (webkit_settings_get_minimum_font_size):
        (webkit_settings_set_minimum_font_size):
        (webkit_settings_set_default_charset):
        (webkit_settings_get_enable_private_browsing):
        (webkit_settings_set_enable_private_browsing):
        (webkit_settings_get_enable_developer_extras):
        (webkit_settings_set_enable_developer_extras):
        (webkit_settings_get_enable_resizable_text_areas):
        (webkit_settings_set_enable_resizable_text_areas):
        (webkit_settings_get_enable_tabs_to_links):
        (webkit_settings_set_enable_tabs_to_links):
        (webkit_settings_get_enable_dns_prefetching):
        (webkit_settings_set_enable_dns_prefetching):
        (webkit_settings_get_enable_caret_browsing):
        (webkit_settings_set_enable_caret_browsing):
        (webkit_settings_get_enable_fullscreen):
        (webkit_settings_set_enable_fullscreen):
        (webkit_settings_get_print_backgrounds):
        (webkit_settings_set_print_backgrounds):
        (webkit_settings_get_enable_webaudio):
        (webkit_settings_set_enable_webaudio):
        (webkit_settings_get_enable_webgl):
        (webkit_settings_set_enable_webgl):
        (webkit_settings_get_allow_modal_dialogs):
        (webkit_settings_get_zoom_text_only):
        (webkit_settings_get_javascript_can_access_clipboard):
        (webkit_settings_set_javascript_can_access_clipboard):
        (webkit_settings_get_media_playback_requires_user_gesture):
        (webkit_settings_set_media_playback_requires_user_gesture):
        (webkit_settings_get_media_playback_allows_inline):
        (webkit_settings_set_media_playback_allows_inline):
        (webkit_settings_get_draw_compositing_indicators):
        (webkit_settings_set_draw_compositing_indicators):
        (webkit_settings_get_enable_site_specific_quirks):
        (webkit_settings_set_enable_site_specific_quirks):
        (webkit_settings_get_enable_page_cache):
        (webkit_settings_set_enable_page_cache):
        (webkit_settings_get_enable_smooth_scrolling):
        (webkit_settings_set_enable_smooth_scrolling):
        * UIProcess/API/gtk/WebKitSettingsPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewSetSettings):

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ debug build.

        * UIProcess/API/gtk/WebKitWebResource.cpp:
        (webkitWebResourceCreate):

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitWindowProperties
        https://bugs.webkit.org/show_bug.cgi?id=96785

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewCreateNewPage):
        * UIProcess/API/gtk/WebKitWindowProperties.cpp:
        (webkitWindowPropertiesUpdateFromWebWindowFeatures):
        * UIProcess/API/gtk/WebKitWindowPropertiesPrivate.h:

2012-10-18  Huang Dongsung  <luxtella@company100.net>

        [WK2] Add CustomFilterOperation serialization in ArgumentCoder.
        https://bugs.webkit.org/show_bug.cgi?id=98733

        Reviewed by Noam Rosenthal.

        Add ArgumentCoders for CustomFilterOperation and all dependent classes.
        Coordinated Graphics will use this css shaders serialization when it enables CSS
        Shaders.

        No new tests, code path is not activated yet.

        * CMakeLists.txt:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp: Added.
        (CoreIPC):
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h: Added.
        (WebCore):
        (CoreIPC):
        * Shared/CoordinatedGraphics/WebCustomFilterProgram.h: Added.
        (WebKit):
        (WebCustomFilterProgram):
            WebCustomFilterProgram is made to serialize the data of a
            StyleCustomFilterProgram to the UI process.
        (WebKit::WebCustomFilterProgram::create):
        (WebKit::WebCustomFilterProgram::WebCustomFilterProgram):
        * Shared/ShareableSurface.cpp:
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        * Target.pri:
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        * WebKit2.pri:
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitWebResource
        https://bugs.webkit.org/show_bug.cgi?id=96783

        Reviewed by Xan Lopez.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitWebResource.cpp:
        (_WebKitWebResourcePrivate):
        (webkitWebResourceCreate):
        (webkitWebResourceGetFrame):
        (ResourceGetDataAsyncData):
        (resourceDataCallback):
        (webkit_web_resource_get_data):
        (webkit_web_resource_get_data_finish):
        * UIProcess/API/gtk/WebKitWebResourcePrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (setCertificateToMainResource):
        (webkitWebViewResourceLoadStarted):

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitURIResponse
        https://bugs.webkit.org/show_bug.cgi?id=96782

        Reviewed by Xan Lopez.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitURIResponse.cpp:
        (webkitURIResponseSetCertificateInfo):
        * UIProcess/API/gtk/WebKitURIResponsePrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (setCertificateToMainResource):

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in PolicyClient classes
        https://bugs.webkit.org/show_bug.cgi?id=96781

        Reviewed by Xan Lopez.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:
        (webkitNavigationPolicyDecisionCreate):
        * UIProcess/API/gtk/WebKitNavigationPolicyDecisionPrivate.h:
        * UIProcess/API/gtk/WebKitPolicyClient.cpp:
        (decidePolicyForNavigationActionCallback):
        (decidePolicyForNewWindowActionCallback):
        (decidePolicyForResponseCallback):
        (attachPolicyClientToView):
        * UIProcess/API/gtk/WebKitPolicyClient.h:
        * UIProcess/API/gtk/WebKitPolicyDecision.cpp:
        (_WebKitPolicyDecisionPrivate):
        (webkitPolicyDecisionFinalize):
        (webkitPolicyDecisionSetListener):
        (webkit_policy_decision_use):
        (webkit_policy_decision_ignore):
        (webkit_policy_decision_download):
        * UIProcess/API/gtk/WebKitPolicyDecisionPrivate.h:
        * UIProcess/API/gtk/WebKitPrivate.cpp:
        (wkEventMouseButtonToWebKitMouseButton):
        * UIProcess/API/gtk/WebKitPrivate.h:
        * UIProcess/API/gtk/WebKitResponsePolicyDecision.cpp:
        (webkitResponsePolicyDecisionCreate):
        * UIProcess/API/gtk/WebKitResponsePolicyDecisionPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed):

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitHitTestResult
        https://bugs.webkit.org/show_bug.cgi?id=96779

        Reviewed by Xan Lopez.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitHitTestResult.cpp:
        (webkitHitTestResultCreate):
        (webkitHitTestResultCompare):
        * UIProcess/API/gtk/WebKitHitTestResultPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewMouseTargetChanged):
        (webkitWebViewPopulateContextMenu):

2012-10-15  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WTR] Do a forced repaint before generating pixel results
        https://bugs.webkit.org/show_bug.cgi?id=98654

        Reviewed by Jocelyn Turcotte.

        Added API to convert a QImage to a WKImage so we can
        pass it to cross-platform code.

        * Shared/API/c/qt/WKImageQt.cpp:
        (WKImageCreateFromQImage):
        * Shared/API/c/qt/WKImageQt.h:

2012-10-18  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [CMake] Depend on the Python scripts in WebKit2/Scripts/webkit2 when regenerating messages.
        https://bugs.webkit.org/show_bug.cgi?id=99702

        Reviewed by Gyuyoung Kim.

        Be in line with most (or all) the other build systems and
        explicitly depend on all the scripts in
        ${WEBKIT2_DIR}/Scripts/webkit2 for the custom command that
        generates messages.

        This helps fix the build after the recent change to messages.py,
        which did not trigger a regeneration of the required files --
        people were just removing their DerivedSources directory
        altogether.

        * CMakeLists.txt:

2012-10-18  Byungwoo Lee  <bw80.lee@samsung.com>

        [WK2] Fix incorrect test expectations of messages_unittest.py.
        https://bugs.webkit.org/show_bug.cgi?id=99699

        Reviewed by Gyuyoung Kim.

        Fix the expected results of messages_unittest.py.

        The expected result of messages_unittest.py has bugs, and it makes failure on python test.

        * Scripts/webkit2/messages_unittest.py:

2012-10-18  Jussi Kukkonen  <jussi.kukkonen@intel.com>

        Add PluginProcessProxy::platformInitializeLaunchOptions
        https://bugs.webkit.org/show_bug.cgi?id=99583

        Reviewed by Sam Weinig.

        Add a platform specific launch options initializer. This enables
        fixing bug 99297 "[EFL] Make plugin process debugging easier
        (PLUGIN_PROCESS_COMMAND_PREFIX)".

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::PluginProcessProxy):
        * UIProcess/Plugins/PluginProcessProxy.h:
        (PluginProcessProxy):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformInitializeLaunchOptions):
        (WebKit):
        * UIProcess/Plugins/qt/PluginProcessProxyQt.cpp:
        (WebKit::PluginProcessProxy::platformInitializeLaunchOptions):
        (WebKit):
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::platformInitializeLaunchOptions):
        (WebKit):

2012-10-18  Byungwoo Lee  <bw80.lee@samsung.com>

        [WK2] Update test expectation for the python message test after r131700
        https://bugs.webkit.org/show_bug.cgi?id=99689

        Reviewed by Gyuyoung Kim.

        Need to update test expectations about including headers and forwarding
        declarations on derived sources for ipc message. (after r131700 : build fix)

        * Scripts/webkit2/messages_unittest.py:

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

        [EFL][WK2] Remove '_' prefix from private API structure names
        https://bugs.webkit.org/show_bug.cgi?id=99575

        Reviewed by Gyuyoung Kim.

        Removed underscore prefix from WK2 EFL internal structure names.

        * UIProcess/API/efl/VibrationProvider.cpp:
        (Ewk_Vibration_Client::Ewk_Vibration_Client):
        * UIProcess/API/efl/VibrationProvider.h:
        * UIProcess/API/efl/ewk_back_forward_list.h:
        * UIProcess/API/efl/ewk_back_forward_list_item.h:
        * UIProcess/API/efl/ewk_back_forward_list_item_private.h:
        (Ewk_Back_Forward_List_Item::create):
        (Ewk_Back_Forward_List_Item::Ewk_Back_Forward_List_Item):
        * UIProcess/API/efl/ewk_back_forward_list_private.h:
        (Ewk_Back_Forward_List::create):
        (Ewk_Back_Forward_List::Ewk_Back_Forward_List):
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Url_Scheme_Handler::Ewk_Url_Scheme_Handler):
        (Ewk_Context::Ewk_Context):
        (ewk_context_url_scheme_request_received):
        (ewk_context_url_scheme_register):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_download_client_private.h:
        * UIProcess/API/efl/ewk_context_history_client_private.h:
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/ewk_context_request_manager_client_private.h:
        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (Ewk_Cookie_Manager::Ewk_Cookie_Manager):
        (Ewk_Cookie_Manager::~Ewk_Cookie_Manager):
        * UIProcess/API/efl/ewk_cookie_manager.h:
        * UIProcess/API/efl/ewk_cookie_manager_private.h:
        (Ewk_Cookie_Manager::create):
        (Ewk_Cookie_Manager):
        * UIProcess/API/efl/ewk_download_job.h:
        * UIProcess/API/efl/ewk_download_job_private.h:
        (Ewk_Download_Job::create):
        (Ewk_Download_Job::Ewk_Download_Job):
        * UIProcess/API/efl/ewk_error.cpp:
        (Ewk_Error::Ewk_Error):
        * UIProcess/API/efl/ewk_error.h:
        * UIProcess/API/efl/ewk_error_private.h:
        (Ewk_Error::create):
        (Ewk_Error):
        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (Ewk_Favicon_Database::Ewk_Favicon_Database):
        * UIProcess/API/efl/ewk_favicon_database.h:
        * UIProcess/API/efl/ewk_favicon_database_private.h:
        (Ewk_Favicon_Database::create):
        (Ewk_Favicon_Database):
        * UIProcess/API/efl/ewk_form_submission_request.h:
        * UIProcess/API/efl/ewk_form_submission_request_private.h:
        (Ewk_Form_Submission_Request::~Ewk_Form_Submission_Request):
        (Ewk_Form_Submission_Request::create):
        (Ewk_Form_Submission_Request::Ewk_Form_Submission_Request):
        * UIProcess/API/efl/ewk_intent.h:
        * UIProcess/API/efl/ewk_intent_private.h:
        (Ewk_Intent::create):
        (Ewk_Intent::Ewk_Intent):
        * UIProcess/API/efl/ewk_intent_service.h:
        * UIProcess/API/efl/ewk_intent_service_private.h:
        (Ewk_Intent_Service::create):
        (Ewk_Intent_Service::Ewk_Intent_Service):
        * UIProcess/API/efl/ewk_navigation_data.h:
        * UIProcess/API/efl/ewk_navigation_data_private.h:
        (Ewk_Navigation_Data::create):
        (Ewk_Navigation_Data::Ewk_Navigation_Data):
        * UIProcess/API/efl/ewk_navigation_policy_decision.h:
        * UIProcess/API/efl/ewk_navigation_policy_decision_private.h:
        (Ewk_Navigation_Policy_Decision::~Ewk_Navigation_Policy_Decision):
        (Ewk_Navigation_Policy_Decision::create):
        (Ewk_Navigation_Policy_Decision::Ewk_Navigation_Policy_Decision):
        * UIProcess/API/efl/ewk_popup_menu_item.cpp:
        (Ewk_Popup_Menu_Item::Ewk_Popup_Menu_Item):
        * UIProcess/API/efl/ewk_popup_menu_item.h:
        * UIProcess/API/efl/ewk_popup_menu_item_private.h:
        (Ewk_Popup_Menu_Item::create):
        (Ewk_Popup_Menu_Item):
        * UIProcess/API/efl/ewk_resource.h:
        * UIProcess/API/efl/ewk_resource_private.h:
        (Ewk_Resource::create):
        (Ewk_Resource::Ewk_Resource):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/ewk_settings_private.h:
        (Ewk_Settings::Ewk_Settings):
        * UIProcess/API/efl/ewk_text_checker_private.h:
        * UIProcess/API/efl/ewk_touch.h:
        * UIProcess/API/efl/ewk_url_request.h:
        * UIProcess/API/efl/ewk_url_request_private.h:
        (Ewk_Url_Request::create):
        (Ewk_Url_Request::Ewk_Url_Request):
        * UIProcess/API/efl/ewk_url_response.h:
        * UIProcess/API/efl/ewk_url_response_private.h:
        (Ewk_Url_Response::create):
        (Ewk_Url_Response::Ewk_Url_Response):
        * UIProcess/API/efl/ewk_url_scheme_request.h:
        * UIProcess/API/efl/ewk_url_scheme_request_private.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data::Ewk_View_Private_Data):
        (Ewk_View_Private_Data::~Ewk_View_Private_Data):
        (_ewk_view_smart_add):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:

2012-10-18  Ryosuke Niwa  <rniwa@webkit.org>

        Lion build fix after r131686. Add back if-def around #imports.

        * UIProcess/API/mac/WKView.mm:

2012-10-17  Byungwoo Lee  <bw80.lee@samsung.com>

        [WK2] Fix build break
        https://bugs.webkit.org/show_bug.cgi?id=99670

        Reviewed by Anders Carlsson.

        Unreviewed build fix.

        Include MessageEncoder.h instead of forwarding declaration for
        MessageEncoder class.

        * Scripts/webkit2/messages.py:
        (forward_declarations_and_headers):

2012-10-17  Darin Adler  <darin@apple.com>

        Make subclassing of WKView safer by namespacing methods and eliminating its use as an observer and delegate
        https://bugs.webkit.org/show_bug.cgi?id=99251

        Reviewed by Anders Carlsson.

        Apps that subclass WKView should be able to freely choose method names without conflicting with a name
        we chose to use internally in WKView's own implementation. Thus, it's a good idea to add a "_wk_" prefix
        to any method names that are solely for internal WebKit2 use. Exceptions to this are method names that
        are predetermined by AppKit, or names that are part of API or SPI.

        Apps that subclass WKView should be able to add observers or use the WKView as a delegate without
        conflicting with similar use in the WKView implementations. Thus, changed to use separate block-style
        observers for the window notifications and a separate delegate for the tool tip implementation.

        The challenging aspect of this patch was to research which method names were determined by AppKit.
        There's nothing in the WebKit2 source code that necessarily states this explicitly.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createDrawingAreaProxy): Updated for new method name.
        (WebKit::PageClientImpl::scrollView): Ditto.
        (WebKit::PageClientImpl::isViewFocused): Ditto.
        (WebKit::PageClientImpl::colorSpace): Ditto.
        (WebKit::PageClientImpl::processDidCrash): Ditto.
        (WebKit::PageClientImpl::pageClosed): Ditto.
        (WebKit::PageClientImpl::didRelaunchProcess): Ditto.
        (WebKit::PageClientImpl::toolTipChanged): Ditto.
        (WebKit::PageClientImpl::setCursor): Ditto.
        (WebKit::PageClientImpl::interpretKeyEvent): Ditto.
        (WebKit::PageClientImpl::setDragImage): Ditto.
        (WebKit::PageClientImpl::setPromisedData): Ditto.
        (WebKit::PageClientImpl::updateTextInputState): Ditto.
        (WebKit::PageClientImpl::resetTextInputState): Ditto.
        (WebKit::PageClientImpl::convertToDeviceSpace): Ditto.
        (WebKit::PageClientImpl::convertToUserSpace): Ditto.
        (WebKit::PageClientImpl::doneWithKeyEvent): Ditto.
        (WebKit::PageClientImpl::setFindIndicator): Ditto.
        (WebKit::PageClientImpl::accessibilityWebProcessTokenReceived): Ditto.
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode): Ditto.
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode): Ditto.
        (WebKit::PageClientImpl::updateAcceleratedCompositingMode): Ditto.
        (WebKit::PageClientImpl::pluginFocusOrWindowFocusChanged): Ditto.
        (WebKit::PageClientImpl::setPluginComplexTextInputState): Ditto.
        (WebKit::PageClientImpl::didChangeScrollbarsForMainFrame): Ditto.
        (WebKit::PageClientImpl::didCommitLoadForMainFrame): Ditto.
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomRepresentation): Ditto.
        (WebKit::PageClientImpl::customRepresentationZoomFactor): Ditto.
        (WebKit::PageClientImpl::setCustomRepresentationZoomFactor): Ditto.
        (WebKit::PageClientImpl::findStringInCustomRepresentation): Ditto.
        (WebKit::PageClientImpl::countStringMatchesInCustomRepresentation): Ditto.
        (WebKit::PageClientImpl::executeSavedCommandBySelector): Ditto.
        (WebKit::PageClientImpl::showDictationAlternativeUI): Ditto.

        * UIProcess/API/mac/WKView.mm: Simplified imports a bit. No need for conditional imports of basic classes
        like NSTextAlternatives.h and NSAttributedString.h. No need to put internal headers in a separate paragraph.
        Added WKToolTipDelegate class and added _toolTipDelegate and _observers fields to WKViewData.
        (-[WKView becomeFirstResponder]): Updated for new method name.
        (-[WKView resignFirstResponder]): Ditto.
        (-[WKView setFrameSize:]): Ditto.
        (-[WKView _wk_updateWindowAndViewFrames]): Ditto.
        (-[WKView renewGState]): Ditto.
        (-[WKView _wk_setPluginComplexTextInputState:]): Ditto.
        (validateCommandCallback): Ditto.
        (-[WKView displayIfNeeded]): Fixed a comment typo.
        (-[WKView _wk_setMouseDownEvent:]): Updated for new method name.
        (-[WKView mouseDown:]): Ditto.
        (-[WKView mouseUp:]): Ditto.
        (-[WKView acceptsFirstMouse:]): Ditto.
        (-[WKView shouldDelayWindowOrderingForEvent:]): Ditto.
        (-[WKView _wk_handleStyleKeyEquivalent:]): Ditto.
        (-[WKView performKeyEquivalent:]): Ditto.
        (-[WKView _wk_disableComplexTextInputIfNecessary]): Ditto.
        (-[WKView _wk_handlePluginComplexTextInputKeyDown:]): Ditto.
        (-[WKView _wk_tryHandlePluginComplexTextInputKeyDown:]): Ditto.
        (-[WKView keyDown:]): Ditto.
        (-[WKView _wk_executeSavedKeypressCommands]): Ditto.
        (-[WKView _wk_notifyInputContextAboutDiscardedComposition]): Ditto.
        (-[WKView selectedRange]): Ditto.
        (-[WKView hasMarkedText]): Ditto.
        (-[WKView unmarkText]): Ditto.
        (-[WKView setMarkedText:selectedRange:replacementRange:]): Ditto.
        (-[WKView markedRange]): Ditto.
        (-[WKView attributedSubstringForProposedRange:actualRange:]): Ditto.
        (-[WKView characterIndexForPoint:]): Ditto.
        (-[WKView firstRectForCharacterRange:actualRange:]): Ditto.
        (-[WKView _wk_updateWindowVisibility]): Ditto.
        (-[WKView _wk_updateWindowObserversForWindow:]): Replaced the two separate methods
        addWindowObserversForWindow and removeWindowObservers with this single method, since
        the two are only used in tandem. Changed code to use blocks for the observers and to
        keep the observers in an array.
        (-[WKView viewWillMoveToWindow:]): Updated to use _wk_updateWindowObserversForWindow.
        (-[WKView viewDidMoveToWindow]): Updated for new method names.
        (-[WKView _wk_windowScreenDidChange]): Ditto.
        (-[WKView _wk_windowDidBecomeKey:]): Ditto.
        (-[WKView _wk_windowDidChangeScreen:]): Ditto.
        (-[WKView _wk_windowDidResignKey:]): Ditto.
        (-[WKView _wk_windowDidMiniaturize:]): Ditto.
        (-[WKView _wk_windowDidDeminiaturize:]): Ditto.
        (-[WKView _wk_windowDidMove:]): Ditto.
        (-[WKView _wk_windowDidResize:]): Ditto.
        (-[WKView _wk_windowDidOrderOffScreen:]): Ditto.
        (-[WKView _wk_windowDidOrderOnScreen:]): Ditto.
        (-[WKView _wk_windowDidChangeBackingProperties:]): Ditto.
        (-[WKView drawRect:]): Ditto.
        (-[WKView _wk_accessibilityRegisterUIProcessTokens]): Ditto.
        (-[WKView _wk_updateRemoteAccessibilityRegistration:]): Ditto.
        (-[WKView _wk_postFakeMouseMovedEventForFlagsChangedEvent:]): Ditto.
        (-[WKView _wk_intrinsicDeviceScaleFactor]): Ditto.
        (-[WKView _wk_setDrawingAreaSize:]): Ditto.
        (-[WKView _wk_shouldUseTiledDrawingArea]): Ditto.
        (-[WKView _wk_createDrawingAreaProxy]): Ditto.
        (-[WKView _wk_isFocused]): Ditto.
        (-[WKView _wk_processDidCrash]): Ditto.
        (-[WKView _wk_pageClosed]): Ditto.
        (-[WKView _wk_didRelaunchProcess]): Ditto.
        (-[WKView _wk_setCursor:]): Ditto.
        (-[WKView _wk_setUserInterfaceItemState:enabled:state:]): Ditto.
        (-[WKView _wk_tryPostProcessPluginComplexTextInputKeyDown:]): Ditto.
        (-[WKView _wk_doneWithKeyEvent:eventWasHandled:]): Ditto.
        (-[WKView _wk_interpretKeyEvent:savingCommandsTo:]): Ditto.
        (-[WKView _wk_convertToDeviceSpace:]): Ditto.
        (-[WKView _wk_convertToUserSpace:]): Ditto.
        (-[WKView _wk_addTrackingRect:owner:userData:assumeInside:useTrackingNum:]): Ditto.
        (-[WKView _wk_addTrackingRects:owner:userDataList:assumeInsideList:trackingNums:count:]): Ditto.
        (-[WKView _wk_removeTrackingRects:count:]): Ditto.
        (-[WKView _wk_sendToolTipMouseExited]): Ditto.
        (-[WKView _wk_sendToolTipMouseEntered]): Ditto.
        (-[WKView _wk_toolTipChangedFrom:to:]): Changed to use the data object as the tool tip owner so
        the delegate method can be there rather than on WKView.
        (-[WKView _wk_setFindIndicator:fadeOut:animate:]): Updated for new method names.
        (-[WKView _wk_enterAcceleratedCompositingMode:]): Ditto.
        (-[WKView _wk_exitAcceleratedCompositingMode]): Ditto.
        (-[WKView _wk_updateAcceleratedCompositingMode:]): Ditto.
        (-[WKView _wk_setAccessibilityWebProcessToken:]): Ditto.
        (-[WKView _wk_pluginFocusOrWindowFocusChanged:pluginComplexTextInputIdentifier:]): Ditto.
        (-[WKView _wk_setPluginComplexTextInputState:pluginComplexTextInputIdentifier:]): Ditto.
        (-[WKView _wk_setPageHasCustomRepresentation:]): Ditto.
        (-[WKView _wk_didFinishLoadingDataForCustomRepresentationWithSuggestedFilename:dataReference:]): Ditto.
        (-[WKView _wk_customRepresentationZoomFactor]): Ditto.
        (-[WKView _wk_setCustomRepresentationZoomFactor:]): Ditto.
        (-[WKView _wk_findStringInCustomRepresentation:withFindOptions:maxMatchCount:]): Ditto.
        (-[WKView _wk_countStringMatchesInCustomRepresentation:withFindOptions:maxMatchCount:]): Ditto.
        (-[WKView _wk_setDragImage:at:linkDrag:]): Ditto.
        (-[WKView _wk_setPromisedData:withFileName:withExtension:withTitle:withURL:withVisibleURL:withArchive:forPasteboard:]): Ditto.
        (-[WKView _wk_updateSecureInputState]): Ditto.
        (-[WKView _wk_updateTextInputStateIncludingSecureInputState:]): Ditto.
        (-[WKView _wk_resetTextInputState]): Ditto.
        (-[WKView _wk_didChangeScrollbarsForMainFrame]): Ditto.
        (-[WKView _wk_hasFullScreenWindowController]): Ditto.
        (-[WKView _wk_fullScreenWindowController]): Ditto.
        (-[WKView _wk_closeFullScreenWindowController]): Ditto.
        (-[WKView _wk_executeSavedCommandBySelector:]): Ditto.
        (-[WKView _wk_cacheWindowBottomCornerRect]): Ditto.
        (-[WKView _wk_spellCheckerDocumentTag]): Ditto.
        (-[WKView _wk_handleAcceptedAlternativeText:]): Ditto.
        (-[WKView _wk_setSuppressVisibilityUpdates:]): Ditto.
        (-[WKView _wk_suppressVisibilityUpdates]): Ditto.
        (-[WKView _wk_registerDraggedTypes]): Ditto.
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]): Ditto.
        (-[WKView wantsUpdateLayer]): Ditto.
        (-[WKView enableFrameSizeUpdates]): Ditto.
        (-[WKToolTipDelegate initWithPage:]): Added.
        (-[WKToolTipDelegate view:stringForToolTip:point:userData:]): Added.


        * UIProcess/API/mac/WKViewInternal.h: Changed all internal method names to have a _wk_ prefix.
        * UIProcess/API/mac/WKViewPrivate.h: Expose the _shouldUseTiledDrawingArea method formally as SPI
        since Safari is currently overriding this method.

        * UIProcess/mac/CorrectionPanel.mm:
        (WebKit::CorrectionPanel::recordAutocorrectionResponse): Updated for new method names.
        (WebKit::CorrectionPanel::handleAcceptedReplacement): Ditto.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]): Updated for new method names.
        (-[WKFullScreenWindowController exitFullScreen]): Ditto.
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]): Ditto.
        (-[WKFullScreenWindowController _startExitFullScreenAnimationWithDuration:]): Ditto.

        * UIProcess/mac/WebFullScreenManagerProxyMac.mm:
        (WebKit::WebFullScreenManagerProxy::invalidate): Updated for new method names.
        (WebKit::WebFullScreenManagerProxy::close): Ditto.
        (WebKit::WebFullScreenManagerProxy::isFullScreen): Ditto.
        (WebKit::WebFullScreenManagerProxy::enterFullScreen): Ditto.
        (WebKit::WebFullScreenManagerProxy::exitFullScreen): Ditto.
        (WebKit::WebFullScreenManagerProxy::beganEnterFullScreen): Ditto.
        (WebKit::WebFullScreenManagerProxy::beganExitFullScreen): Ditto.

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

        Add MessageEncoder and MessageDecoder subclasses
        https://bugs.webkit.org/show_bug.cgi?id=99365

        Reviewed by Andreas Kling.

        This is the first step towards cleaning up IPC handling in WebKit2. The idea is that MessageEncoder and MessageDecoder
        will handle all the IPC specific parts of encoding and decoding (such as attachments), whereas the ArgumentEncoder and ArgumentDecoder
        classes are only used for serializing simpler data types.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::create):
        (CoreIPC::ArgumentDecoder::initialize):
        * Platform/CoreIPC/ArgumentDecoder.h:
        (ArgumentDecoder):
        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::create):
        (CoreIPC::ArgumentEncoder::ArgumentEncoder):
        * Platform/CoreIPC/ArgumentEncoder.h:
        (ArgumentEncoder):
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::createSyncMessageEncoder):
        (CoreIPC::Connection::sendMessage):
        (CoreIPC::Connection::sendSyncReply):
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::sendSyncMessage):
        (CoreIPC::Connection::waitForSyncReply):
        (CoreIPC::Connection::processIncomingSyncReply):
        (CoreIPC::Connection::processIncomingMessage):
        (CoreIPC::Connection::dispatchSyncMessage):
        (CoreIPC::Connection::dispatchMessage):
        * Platform/CoreIPC/Connection.h:
        (Connection):
        (PendingSyncReply):
        (CoreIPC::Connection::PendingSyncReply::releaseReplyDecoder):
        (CoreIPC::Connection::send):
        (CoreIPC::Connection::sendSync):
        (CoreIPC::Connection::waitForAndDispatchImmediately):
        (CoreIPC::Connection::deprecatedSendSync):
        (CoreIPC::Connection::deprecatedSend):
        * Platform/CoreIPC/MessageDecoder.cpp:
        (CoreIPC::MessageDecoder::create):
        (CoreIPC::MessageDecoder::~MessageDecoder):
        (CoreIPC::MessageDecoder::MessageDecoder):
        * Platform/CoreIPC/MessageDecoder.h:
        (CoreIPC):
        (MessageDecoder):
        * Platform/CoreIPC/MessageEncoder.cpp:
        (CoreIPC):
        (CoreIPC::MessageEncoder::create):
        (CoreIPC::MessageEncoder::MessageEncoder):
        (CoreIPC::MessageEncoder::~MessageEncoder):
        * Platform/CoreIPC/MessageEncoder.h:
        (CoreIPC):
        (MessageEncoder):
        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC::MessageSender::send):
        (CoreIPC::MessageSender::sendMessage):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):
        (CoreIPC::Connection::sendOutgoingMessage):
        (CoreIPC::createMessageDecoder):
        (CoreIPC::Connection::receiveSourceEventHandler):
        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::Connection::processMessage):
        (CoreIPC::Connection::sendOutgoingMessage):
        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::readEventHandler):
        (CoreIPC::Connection::writeEventHandler):
        (CoreIPC::Connection::platformCanSendOutgoingMessages):
        (CoreIPC::Connection::sendOutgoingMessage):
        * Scripts/webkit2/messages.py:
        (generate_message_handler):
        * Scripts/webkit2/messages_unittest.py:
        (MessageEncoder):
        * Shared/WebConnection.cpp:
        (WebKit::WebConnection::postMessage):
        (WebKit::WebConnection::handleMessage):
        * Shared/WebConnection.h:
        (CoreIPC):
        * Target.pri:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::postMessageToInjectedBundle):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::sendMessage):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        (WebKit::WebProcessProxy::deprecatedSend):
        (WebKit::WebProcessProxy::send):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/DecoderAdapter.cpp:
        (WebKit::DecoderAdapter::DecoderAdapter):
        (WebKit::DecoderAdapter::decodeBytes):
        (WebKit::DecoderAdapter::decodeBool):
        (WebKit::DecoderAdapter::decodeUInt16):
        (WebKit::DecoderAdapter::decodeUInt32):
        (WebKit::DecoderAdapter::decodeUInt64):
        (WebKit::DecoderAdapter::decodeInt32):
        (WebKit::DecoderAdapter::decodeInt64):
        (WebKit::DecoderAdapter::decodeFloat):
        (WebKit::DecoderAdapter::decodeDouble):
        (WebKit::DecoderAdapter::decodeString):
        * WebProcess/WebPage/DecoderAdapter.h:
        (DecoderAdapter):
        * WebProcess/WebPage/EncoderAdapter.cpp:
        (WebKit::EncoderAdapter::EncoderAdapter):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::postInjectedBundleMessage):
        * win/WebKit2.vcproj:

2012-10-17  Andy Estes  <aestes@apple.com>

        [WebKit2] Add removeChild: to WKDOMNode and make WKDOMText.data read/write
        https://bugs.webkit.org/show_bug.cgi?id=99662

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:
        (-[WKDOMNode removeChild:]):
        * WebProcess/InjectedBundle/API/mac/WKDOMText.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMText.mm:
        (-[WKDOMText setData:]):

2012-10-17  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Memory leak in ewk_download_job_response_set()
        https://bugs.webkit.org/show_bug.cgi?id=99621

        Reviewed by Kenneth Rohde Christiansen.

        No longer call ewk_url_response_ref() on the response
        object in ewk_download_job_response_set() since it will
        be ref'd when assigning to the RefPtr member already.

        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (didReceiveResponse):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (ewk_download_job_response_set):
        * UIProcess/API/efl/ewk_download_job_private.h: Remove several unimplemented functions.

2012-10-17  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Compilation warning in Ewk_View when accelerated compositing is disabled
        https://bugs.webkit.org/show_bug.cgi?id=99613

        Reviewed by Kenneth Rohde Christiansen.

        Fix compilation warning in _ewk_view_smart_calculate() when
        the ACCELERATED_COMPOSITING flag is not set.

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_calculate):

2012-10-17  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Use smart pointers inside Ewk_View
        https://bugs.webkit.org/show_bug.cgi?id=99611

        Reviewed by Kenneth Rohde Christiansen.

        Use smart pointers instead of raw ones for several
        Ewk_View members to avoid handling memory manually.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::~_Ewk_View_Private_Data):
        (ewk_view_cursor_set):
        (ewk_view_color_picker_dismiss):
        (ewk_view_color_picker_color_set):

2012-10-17  Byungwoo Lee  <bw80.lee@samsung.com>

        Fix build warnings : -Wunused-parameter, -Wunused-variable
        https://bugs.webkit.org/show_bug.cgi?id=99539

        Reviewed by Kentaro Hara.

        Fix build warnings about unused parameter or unused variable when
        WTF_USE_TILED_BACKING_STORE option is enabled.

        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::paintToTextureMapper):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::createLayer):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::didReceiveLayerTreeCoordinatorProxyMessage):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::setVisibleContentsRect):
        (WebKit::DrawingAreaProxy::createTileForLayer):
        (WebKit::DrawingAreaProxy::updateTileForLayer):
        (WebKit::DrawingAreaProxy::removeTileForLayer):
        (WebKit::DrawingAreaProxy::update):
        (WebKit::DrawingAreaProxy::didUpdateBackingStoreState):
        (WebKit::DrawingAreaProxy::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxy::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxy::updateAcceleratedCompositingMode):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStorePaintEnd):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.cpp:
        (WebKit::CoordinatedTile::paint):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::scrollNonCompositedContents):
        (WebKit::LayerTreeCoordinator::notifyAnimationStarted):
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::setVisibleContentsRect):
        (WebKit::LayerTreeHost::setVisibleContentsRectForLayer):

2012-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitDownload
        https://bugs.webkit.org/show_bug.cgi?id=96773

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitDownload.cpp:
        (_WebKitDownloadPrivate):
        (webkitDownloadCreate):
        (webkit_download_get_request):
        (webkit_download_cancel):
        * UIProcess/API/gtk/WebKitDownloadPrivate.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_download_uri):
        (webkitWebContextGetOrCreateDownload):

2012-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitCookieManager
        https://bugs.webkit.org/show_bug.cgi?id=96772

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitCookieManager.cpp:
        (_WebKitCookieManagerPrivate):
        (webkitCookieManagerFinalize):
        (webkitCookieManagerCreate):
        (webkit_cookie_manager_set_persistent_storage):
        (webkit_cookie_manager_set_accept_policy):
        (webkit_cookie_manager_get_accept_policy):
        (webkitCookieManagerGetDomainsWithCookiesCallback):
        (webkit_cookie_manager_get_domains_with_cookies):
        (webkit_cookie_manager_delete_cookies_for_domain):
        (webkit_cookie_manager_delete_all_cookies):
        * UIProcess/API/gtk/WebKitCookieManagerPrivate.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_get_cookie_manager):

2012-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitContextMenu
        https://bugs.webkit.org/show_bug.cgi?id=96770

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitContextMenu.cpp:
        (webkitContextMenuCreate):
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp:
        (webkitContextMenuItemCreate):
        * UIProcess/API/gtk/WebKitContextMenuItemPrivate.h:
        * UIProcess/API/gtk/WebKitContextMenuPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewPopulateContextMenu):

2012-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=96769

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitBackForwardList.cpp:
        (_WebKitBackForwardListPrivate):
        (webkitBackForwardListGetOrCreateItem):
        (webkitBackForwardListCreateList):
        (webkitBackForwardListCreate):
        (webkitBackForwardListChanged):
        (webkit_back_forward_list_get_current_item):
        (webkit_back_forward_list_get_back_item):
        (webkit_back_forward_list_get_forward_item):
        (webkit_back_forward_list_get_nth_item):
        (webkit_back_forward_list_get_length):
        (webkit_back_forward_list_get_back_list):
        (webkit_back_forward_list_get_back_list_with_limit):
        (webkit_back_forward_list_get_forward_list):
        (webkit_back_forward_list_get_forward_list_with_limit):
        * UIProcess/API/gtk/WebKitBackForwardListItem.cpp:
        (_WebKitBackForwardListItemPrivate):
        (webkitBackForwardListItemFinalized):
        (webkitBackForwardListItemGetOrCreate):
        (webkitBackForwardListItemGetItem):
        (webkit_back_forward_list_item_get_uri):
        (webkit_back_forward_list_item_get_title):
        (webkit_back_forward_list_item_get_original_uri):
        * UIProcess/API/gtk/WebKitBackForwardListPrivate.h:
        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (didChangeBackForwardList):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed):
        (webkit_web_view_go_to_back_forward_list_item):

2012-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitURISchemeRequest
        https://bugs.webkit.org/show_bug.cgi?id=96787

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitRequestManagerClient.cpp:
        (didReceiveURIRequest):
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp:
        (_WebKitURISchemeRequestPrivate):
        (webkitURISchemeRequestCreate):
        (webkit_uri_scheme_request_get_web_view):
        (webkitURISchemeRequestReadCallback):
        * UIProcess/API/gtk/WebKitURISchemeRequestPrivate.h:

2012-10-17  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make sure the favicon database path is set only once
        https://bugs.webkit.org/show_bug.cgi?id=99597

        Reviewed by Kenneth Rohde Christiansen.

        Make sure the icon database path is set only once by checking
        that the database is not already open before settign the path.
        This avoids printing error message on stderr.

        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_favicon_database_get):

2012-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitWebInspector
        https://bugs.webkit.org/show_bug.cgi?id=96786

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitWebInspector.cpp:
        (_WebKitWebInspectorPrivate):
        (webkitWebInspectorFinalize):
        (webkitWebInspectorCreate):
        (webkit_web_inspector_get_web_view):
        (webkit_web_inspector_is_attached):
        (webkit_web_inspector_attach):
        (webkit_web_inspector_detach):
        (webkit_web_inspector_show):
        (webkit_web_inspector_close):
        (webkit_web_inspector_get_attached_height):
        * UIProcess/API/gtk/WebKitWebInspectorPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_inspector):

2012-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitGeolocation classes
        https://bugs.webkit.org/show_bug.cgi?id=96778

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitGeolocationPermissionRequest.cpp:
        (_WebKitGeolocationPermissionRequestPrivate):
        (webkitGeolocationPermissionRequestAllow):
        (webkitGeolocationPermissionRequestDeny):
        (webkitGeolocationPermissionRequestFinalize):
        (webkitGeolocationPermissionRequestCreate):
        * UIProcess/API/gtk/WebKitGeolocationPermissionRequestPrivate.h:
        * UIProcess/API/gtk/WebKitGeolocationProvider.cpp:
        (WebKitGeolocationProvider::create):
        (WebKitGeolocationProvider::WebKitGeolocationProvider):
        (WebKitGeolocationProvider::notifyPositionChanged):
        (WebKitGeolocationProvider::notifyErrorOccurred):
        * UIProcess/API/gtk/WebKitGeolocationProvider.h:
        (WebKitGeolocationProvider):
        * UIProcess/API/gtk/WebKitUIClient.cpp:
        (decidePolicyForGeolocationPermissionRequest):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (createDefaultWebContext):

2012-10-17  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [WK2][EFL] Add unit tests for Spelling
        https://bugs.webkit.org/show_bug.cgi?id=95956

        Reviewed by Gyuyoung Kim.

        Add the unit tests which covers API from ewk_text_checker.h
        and text checker settings from ewk_settings.h

        * PlatformEfl.cmake:
        * UIProcess/API/efl/tests/resources/spelling_test.html: Added.
        * UIProcess/API/efl/tests/test_ewk2_text_checker.cpp: Added.
        (resetCallbacksExecutionStats):
        (onTimeout):
        (onSettingChange):
        (onSpellDocumentTag):
        (onSpellDocumentTagClose):
        (onSpellingCheck):
        (onWordGuesses):
        (onWordLearn):
        (onWordIgnore):
        (TEST_F):

2012-10-17  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2][GTK] Favicons are incorrectly released before receiving the actual data
        https://bugs.webkit.org/show_bug.cgi?id=99492

        Reviewed by Carlos Garcia Campos.

        Don't release the icon for a page URL in the first stage of the
        asynchronous call webkit_favicon_database_get_favicon() but do it
        later instead, to avoid a race condition with the initial
        synchronization process the first time we request an icon which is
        actually in the icon database, but has not made available yet.

        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        (GetFaviconSurfaceAsyncData::~GetFaviconSurfaceAsyncData): Release
        here the icon for the page URL if not a valid icon has been found.
        (GetFaviconSurfaceAsyncData): Add a new boolean parameter to flag
        when a given icon for a page URL should be released.
        (getIconSurfaceSynchronously): Don't release the icon, just return 0.
        (processPendingIconsForPageURL): If a valid icon is got at this
        point, disable the flag shouldReleaseIconForPageURL not to release
        the icon later on.
        (webkit_favicon_database_get_favicon): Make sure we retain the
        icon for a given page URL before trying to retrieve it from the
        IconDatabase, and that we flag it to be released in case not a
        valid icon has been found yet.

2012-10-17  Grzegorz Czajkowski  <g.czajkowski@samsung.com>, Michal Roj <m.roj@samsung.com>

        Implementation of spellchecking feature.
        https://bugs.webkit.org/show_bug.cgi?id=91854

        Reviewed by Gyuyoung Kim.

        Add spelling implementation for WebKit2-EFL that is based on Enchant library.

        Additionally the patch provides API to overwrite the default WebKit
        spellchecker implementation as Enchant library doesn't ensure grammar checking.
        Application is able to overwrite it by defining its own implementation and
        setting appropriate callback functions.

        * PlatformEfl.cmake:
        Add enchant-related compiler flags: header paths and the library flag.

        * UIProcess/API/efl/EWebKit2.h:
        Add ewk_text_checker.h to the main WebKit2-EFL's header to be available for applications.

        * UIProcess/API/efl/WebKitTextChecker.cpp: Added.
        Implement the callbacks functions of WKTextChecker.

        (WebKit):
        (WebKit::isContinuousSpellCheckingEnabled):
        (WebKit::setContinuousSpellCheckingEnabled):
        (WebKit::uniqueSpellDocumentTag):
        (WebKit::closeSpellDocumentWithTag):
        (WebKit::checkSpellingOfString):
        (WebKit::guessesForWord):
        (WebKit::learnWord):
        (WebKit::ignoreWord):
        Those functions are directly given as callback functions for WKTextChecker's client.
        They choose between WebKit's spelling implementation and client's ones.

        (WebKit::availableSpellCheckingLanguages):
        (WebKit::updateSpellCheckingLanguages):
        (WebKit::loadedSpellCheckingLanguages):
        They are used by ewk_settings.cpp file and allow to do not
        expose 'textCheckerEnchant'.

        * UIProcess/API/efl/WebKitTextChecker.h: Added.
        Define the functions which choose between WebKit's spelling implementation and
        the client's ones.

        (WebKit):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context::_Ewk_Context):
        Attach the spellchecker feature for the context.

        * UIProcess/API/efl/ewk_text_checker.cpp: Added.
        (ewk_text_checker_callbacks_get):
        An internal function to get the client's callback functions.

        * UIProcess/API/efl/ewk_text_checker.h: Added.
        Define API to set the client's own spelling implementation.

        * UIProcess/API/efl/ewk_text_checker_private.h: Added.
        (_Ewk_Text_Checker):
        Define the struct with the client's callbacks responisble for spelling.

        * UIProcess/API/efl/ewk_settings.cpp:
        (onContinuousSpellCheckingIdler):
        The application is notified about the spelling setting change on idler
        to do not block WebKit.
        The the continuous spell checking may be changed through the context menu option.

        (spellCheckingLanguagesSetUpdate):
        The dictionaries are requested on 'idler' to do not block WebKit.

        (spellCheckingLanguagesSet):
        Set the languages.

        (ewk_settings_continuous_spell_checking_change_cb_set):
        Set the callback function used to notify the client when the spelling
        setting was changed by WebKit.

        (ewk_settings_continuous_spell_checking_enabled_get):
        (ewk_settings_continuous_spell_checking_enabled_set):
        API to set/get the continuous spell checking.

        (ewk_settings_spell_checking_available_languages_get):
        (ewk_settings_spell_checking_languages_set):
        (ewk_settings_spell_checking_languages_get):
        API to get/set languages to use by WebKit implementation based on Enchant library.

        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit::TextChecker::state):
        (WebKit::TextChecker::isContinuousSpellCheckingAllowed):
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        (WebKit::TextChecker::setGrammarCheckingEnabled):
        (WebKit::TextChecker::continuousSpellCheckingEnabledStateChanged):
        (WebKit::TextChecker::grammarCheckingEnabledStateChanged):
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        (WebKit::TextChecker::closeSpellDocumentWithTag):
        (WebKit::TextChecker::checkSpellingOfString):
        (WebKit::TextChecker::checkGrammarOfString): Remove WebCore namaspace as it's already defined for the whole file.
        (WebKit::TextChecker::spellingUIIsShowing):
        (WebKit::TextChecker::toggleSpellingUIIsShowing):
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::learnWord):
        (WebKit::TextChecker::ignoreWord):
        Those call WKTextChecker client's methods.

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

        [EFL][WK2] Ewk_Url_Scheme_Request has to be refactored
        https://bugs.webkit.org/show_bug.cgi?id=99549

        Reviewed by Kenneth Rohde Christiansen.

        Ewk_Url_Scheme_Requestis inherited from RefCounted, WKEinaSharedString is used,
        removed weird _Ewk_Url_Scheme_Request.

        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/ewk_context_request_manager_client.cpp:
        (didReceiveURIRequest):
        * UIProcess/API/efl/ewk_url_scheme_request.cpp:
        (ewk_url_scheme_request_ref):
        (ewk_url_scheme_request_unref):
        * UIProcess/API/efl/ewk_url_scheme_request.h:
        * UIProcess/API/efl/ewk_url_scheme_request_private.h:
        (Ewk_Url_Scheme_Request):
        (Ewk_Url_Scheme_Request::create):
        (Ewk_Url_Scheme_Request::Ewk_Url_Scheme_Request):

2012-10-17  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2][GTK] Unneeded GError field in internal structure in WebKitFaviconDatabase.cpp
        https://bugs.webkit.org/show_bug.cgi?id=99564

        Reviewed by Carlos Garcia Campos.

        Removed field 'error' from GetFaviconSurfaceAsyncData and updated
        the code accordingly, by using g_simple_async_result_take_error().

        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        (GetFaviconSurfaceAsyncData): Removed unneeded field.
        (processPendingIconsForPageURL): Avoid using g_propagate_error and
        use g_simple_async_result_take_error directly instead.
        (webkit_favicon_database_get_favicon_finish): Remove unneeded code.

2012-10-17  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Start using OwnPtr for non-ref counted ewk types
        https://bugs.webkit.org/show_bug.cgi?id=99472

        Reviewed by Kenneth Rohde Christiansen.

        Use OwnPtr internally for non-ref counted Ewk types to avoid
        manual memory handling.

        Private _new() and _free() functions are removed since they
        are not needed now that the classes are defined in the
        private headers instead of the cpp files. The constructor
        for those classes was made private and factory methods were
        added to encourage developers to use smart pointers instead
        of raw ones.

        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (ewk_back_forward_list_changed):
        * UIProcess/API/efl/ewk_back_forward_list_item_private.h:
        * UIProcess/API/efl/ewk_back_forward_list_private.h:
        (_Ewk_Back_Forward_List):
        (_Ewk_Back_Forward_List::create):
        (_Ewk_Back_Forward_List::_Ewk_Back_Forward_List):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context):
        (_Ewk_Context::_Ewk_Context):
        (ewk_context_cookie_manager_get):
        (ewk_context_favicon_database_get):
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (didFail):
        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (_Ewk_Cookie_Manager::_Ewk_Cookie_Manager):
        (_Ewk_Cookie_Manager::~_Ewk_Cookie_Manager):
        (getAcceptPolicyCallback):
        (getHostnamesWithCookiesCallback):
        (ewk_cookie_manager_changes_watch):
        * UIProcess/API/efl/ewk_cookie_manager_private.h:
        (Cookie_Change_Handler):
        (Cookie_Change_Handler::Cookie_Change_Handler):
        (_Ewk_Cookie_Manager):
        (_Ewk_Cookie_Manager::create):
        * UIProcess/API/efl/ewk_error.cpp:
        (_Ewk_Error::_Ewk_Error):
        (ewk_error_cancellation_get):
        * UIProcess/API/efl/ewk_error_private.h:
        (_Ewk_Error):
        (_Ewk_Error::create):
        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (_Ewk_Favicon_Database::_Ewk_Favicon_Database):
        * UIProcess/API/efl/ewk_favicon_database_private.h:
        (IconChangeCallbackData):
        (IconChangeCallbackData::IconChangeCallbackData):
        (IconRequestCallbackData):
        (IconRequestCallbackData::IconRequestCallbackData):
        (_Ewk_Favicon_Database):
        (_Ewk_Favicon_Database::create):
        * UIProcess/API/efl/ewk_popup_menu_item.cpp:
        (_Ewk_Popup_Menu_Item::_Ewk_Popup_Menu_Item):
        * UIProcess/API/efl/ewk_popup_menu_item_private.h:
        (_Ewk_Popup_Menu_Item):
        (_Ewk_Popup_Menu_Item::create):
        * UIProcess/API/efl/ewk_url_scheme_request.cpp:
        (_Ewk_Url_Scheme_Request::_Ewk_Url_Scheme_Request):
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::~_Ewk_View_Private_Data):
        (_ewk_view_initialize):
        (ewk_view_back_forward_list_get):
        (ewk_view_popup_menu_request):
        (ewk_view_popup_menu_close):
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didFailLoadWithErrorForFrame):
        (didFailProvisionalLoadWithErrorForFrame):
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        (didFailLoadForResource):

2012-10-17  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Use WTF RefCounted and RefPtr for Ewk_Resource and Ewk_Form_Submission_Request
        https://bugs.webkit.org/show_bug.cgi?id=99542

        Reviewed by Kenneth Rohde Christiansen.

        Use WTF RefCounted and RefPtr for Ewk_Resource and Ewk_Form_Submission_Request
        to avoid handling raw pointers internally.

        * UIProcess/API/efl/ewk_form_submission_request.cpp:
        (ewk_form_submission_request_ref):
        (ewk_form_submission_request_unref):
        (ewk_form_submission_request_submit):
        * UIProcess/API/efl/ewk_form_submission_request_private.h:
        (_Ewk_Form_Submission_Request):
        (_Ewk_Form_Submission_Request::~_Ewk_Form_Submission_Request):
        (_Ewk_Form_Submission_Request::create):
        (_Ewk_Form_Submission_Request::_Ewk_Form_Submission_Request):
        * UIProcess/API/efl/ewk_resource.cpp:
        (ewk_resource_ref):
        (ewk_resource_unref):
        * UIProcess/API/efl/ewk_resource_private.h:
        (_Ewk_Resource):
        (_Ewk_Resource::create):
        (_Ewk_Resource::_Ewk_Resource):
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data::~_Ewk_View_Private_Data):
        (ewk_view_resource_load_initiated):
        (ewk_view_resource_load_response):
        (ewk_view_resource_load_failed):
        (ewk_view_resource_load_finished):
        (ewk_view_resource_request_sent):
        (ewk_view_load_provisional_started):
        * UIProcess/API/efl/ewk_view_form_client.cpp:
        (willSubmitForm):
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        (didInitiateLoadForResource):

2012-10-16  Dongwoo Joshua Im  <dw.im@samsung.com>

        [mac] Fix build break - processPath should be initialized.
        https://bugs.webkit.org/show_bug.cgi?id=99541

        Unreviewed build fix.

        Initialize processPath as nil.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::createProcess):

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

        [EFL][WK2] Add factory methods for refcounted Ewk types
        https://bugs.webkit.org/show_bug.cgi?id=99479

        Reviewed by Gyuyoung Kim.

        Add factory methods to refcounted Ewk types that return
        a PassRefPtr for refcounted Ewk types. Their constructors
        were made privates as well, in order to promote the use
        of smart pointers internally.

        Remove _new() functions for refcounted Ewk types as they
        are no longer needed now that the classes are defined
        in the private headers instead of the cpp files.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::handleDownloadRequest):
        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (addItemToWrapperCache):
        * UIProcess/API/efl/ewk_back_forward_list_item.cpp:
        (ewk_back_forward_list_item_original_url_get):
        * UIProcess/API/efl/ewk_back_forward_list_item_private.h:
        (_Ewk_Back_Forward_List_Item):
        (_Ewk_Back_Forward_List_Item::create):
        (_Ewk_Back_Forward_List_Item::_Ewk_Back_Forward_List_Item):
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (didReceiveResponse):
        * UIProcess/API/efl/ewk_context_history_client.cpp:
        (didNavigateWithNavigationData):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (ewk_download_job_request_get):
        (ewk_download_job_state_set):
        * UIProcess/API/efl/ewk_download_job_private.h:
        (_Ewk_Download_Job):
        (_Ewk_Download_Job::create):
        (_Ewk_Download_Job::_Ewk_Download_Job):
        * UIProcess/API/efl/ewk_intent.cpp:
        (ewk_intent_extra_names_get):
        * UIProcess/API/efl/ewk_intent_private.h:
        (_Ewk_Intent):
        (_Ewk_Intent::create):
        (_Ewk_Intent::_Ewk_Intent):
        * UIProcess/API/efl/ewk_intent_service.cpp:
        (ewk_intent_service_disposition_get):
        * UIProcess/API/efl/ewk_intent_service_private.h:
        (_Ewk_Intent_Service):
        (_Ewk_Intent_Service::create):
        (_Ewk_Intent_Service::_Ewk_Intent_Service):
        * UIProcess/API/efl/ewk_navigation_data.cpp:
        (ewk_navigation_data_url_get):
        * UIProcess/API/efl/ewk_navigation_data_private.h:
        (_Ewk_Navigation_Data):
        (_Ewk_Navigation_Data::create):
        (_Ewk_Navigation_Data::_Ewk_Navigation_Data):
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        * UIProcess/API/efl/ewk_navigation_policy_decision_private.h:
        (_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::~_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::create):
        (_Ewk_Navigation_Policy_Decision::_Ewk_Navigation_Policy_Decision):
        * UIProcess/API/efl/ewk_url_request.cpp:
        (ewk_url_request_http_method_get):
        * UIProcess/API/efl/ewk_url_request_private.h:
        (_Ewk_Url_Request):
        (_Ewk_Url_Request::create):
        (_Ewk_Url_Request::_Ewk_Url_Request):
        * UIProcess/API/efl/ewk_url_response.cpp:
        (ewk_url_response_content_length_get):
        * UIProcess/API/efl/ewk_url_response_private.h:
        (_Ewk_Url_Response):
        (_Ewk_Url_Response::create):
        (_Ewk_Url_Response::_Ewk_Url_Response):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_intent_deliver):
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didReceiveIntentForFrame):
        (registerIntentServiceForFrame):
        * UIProcess/API/efl/ewk_view_policy_client.cpp:
        (decidePolicyForNavigationAction):
        (decidePolicyForNewWindowAction):
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        (didInitiateLoadForResource):
        (didSendRequestForResource):
        (didReceiveResponseForResource):

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

        <rdar://problem/12462993> Use a sensible fallback for cache directory

        Reviewed by Sam Weinig.

        * UIProcess/WebContext.cpp: (WebKit::WebContext::createNewWebProcess): Cache directory
        should be created if it doesn't exist yet, so use createHandleForReadWriteDirectory.

        * UIProcess/mac/WebContextMac.mm: (WebKit::WebContext::platformDefaultDiskCacheDirectory):
        We don't want caches in home directory, they should go to ~/Library/Caches.

2012-10-16  Andy Estes  <aestes@apple.com>

        [WebKit2] Create Objective-C API for adding and removing user scripts
        https://bugs.webkit.org/show_bug.cgi?id=99528

        Reviewed by Anders Carlsson.

        This patch adds the following API to WKBrowsingContextGroup:

        - (void)addUserScript:(NSString *)source baseURL:(NSURL *)baseURL whitelistedURLPatterns:(NSArray *)whitelist blacklistedURLPatterns:(NSArray *)blacklist injectionTime:(WKUserScriptInjectionTime)injectionTime mainFrameOnly:(BOOL)mainFrameOnly;
        - (void)removeAllUserScripts;

        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupAddUserScript): Define a C SPI equivalent of addUserScript: that calls existing methods in WebPageGroup.
        (WKPageGroupRemoveAllUserScripts): Ditto for removeAllUserScripts.
        * UIProcess/API/C/WKPageGroup.h: Declare the above-mentioned functions.
        * UIProcess/API/mac/WKBrowsingContextGroup.h: Declare the Objective-C API
        * UIProcess/API/mac/WKBrowsingContextGroup.mm:
        (-[WKBrowsingContextGroup addUserScript:baseURL:whitelist:blacklist:injectionTime:mainFrameOnly:]): Call WKPageGroupAddUserScript.
        (-[WKBrowsingContextGroup removeAllUserScripts]): Call WKPageGroupRemoveAllUserScripts.
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::removeAllUserScripts): This was calling PageGroup::removeUserStyleSheetsFromWorld() by mistake.

2012-10-16  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2][AC] Url bar should not be covered by the web view
        https://bugs.webkit.org/show_bug.cgi?id=99485

        Reviewed by Laszlo Gombos.

        When accelerated compositing is enabled, the url bar is covered by the web view.
        This was caused by 2 issues:
        - _ewk_view_smart_calculate was called before the first gl surface was created,
          so an early return caused it to not save the new view position.
        - When painting the view, we need to take into account the position of
          the view within the window, i.e. the url bar.

        * UIProcess/API/efl/EflViewportHandler.cpp:
        (WebKit::EflViewportHandler::display):
        * UIProcess/API/efl/EflViewportHandler.h:
        (EflViewportHandler):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_calculate):
        (ewk_view_display):

2012-10-16  Jian Li  <jianli@chromium.org>

        Rename feature define ENABLE_WIDGET_REGION to ENABLE_DRAGGBALE_REGION
        https://bugs.webkit.org/show_bug.cgi?id=98975

        Reviewed by Adam Barth.

        Renaming is needed to better match with the draggable region code.

        * Configurations/FeatureDefines.xcconfig:

2012-10-16  Tony Chang  <tony@chromium.org>

        Unreviewed, revert previous WebKit2.def change. Exports shouldn't matter.

        * win/WebKit2.def:

2012-10-16  Tony Chang  <tony@chromium.org>

        Unreviewed, try to fix the Apple Win build.

        * win/WebKit2.def:

2012-10-16  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Implement testRunner.dumpSelectionRect() in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=69545

        Reviewed by Simon Fraser.

        * Shared/API/c/WKImage.h: Add another option that controls whether
        the selection rectangle should be painted onto the snapshot.
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toSnapshotOptions): Add a case for the new option
        mentioned above.
        * Shared/ImageOptions.h: More plumbing for the option above.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaledSnapshotWithOptions): Draw a red rectangle
        around the selection area when
        SnapshotOptionsPaintSelectionRectangle is set.

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

        [EFL][WK2] Have intent classes subclass RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=99467

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Intent and Ewk_Intent_Service subclass
        RefCounted so that we can use smart pointers
        internally.

        * UIProcess/API/efl/ewk_intent.cpp:
        (ewk_intent_ref):
        (ewk_intent_unref):
        * UIProcess/API/efl/ewk_intent_private.h:
        (_Ewk_Intent):
        (_Ewk_Intent::_Ewk_Intent):
        * UIProcess/API/efl/ewk_intent_service.cpp:
        (ewk_intent_service_ref):
        (ewk_intent_service_unref):
        * UIProcess/API/efl/ewk_intent_service_private.h:
        (_Ewk_Intent_Service):
        (_Ewk_Intent_Service::_Ewk_Intent_Service):
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didReceiveIntentForFrame):
        (registerIntentServiceForFrame):

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

        [EFL][WK2] Inherit Ewk_Download_Job, Ewk_Back_Forward_List_Item, Ewk_Url_Response, Ewk_Navigation_Policy_Decision from RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=99455

        Reviewed by Kenneth Rohde Christiansen.

        The API objects mentioned in bug title are inherited from WTF::RefCounted which made it possible
        to use smart pointers with them.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::handleDownloadRequest):
        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (_Ewk_Back_Forward_List::_Ewk_Back_Forward_List):
        (addItemToWrapperCache):
        (ewk_back_forward_list_changed):
        * UIProcess/API/efl/ewk_back_forward_list_item.cpp:
        (ewk_back_forward_list_item_ref):
        (ewk_back_forward_list_item_unref):
        * UIProcess/API/efl/ewk_back_forward_list_item_private.h:
        (_Ewk_Back_Forward_List_Item):
        (_Ewk_Back_Forward_List_Item::_Ewk_Back_Forward_List_Item):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context):
        (_Ewk_Context::~_Ewk_Context):
        (ewk_context_download_job_add):
        (ewk_context_download_job_get):
        (ewk_context_download_job_remove):
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (didReceiveResponse):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (ewk_download_job_ref):
        (ewk_download_job_unref):
        (ewk_download_job_response_get):
        (ewk_download_job_estimated_progress_get):
        * UIProcess/API/efl/ewk_download_job_private.h:
        (_Ewk_Download_Job):
        (_Ewk_Download_Job::_Ewk_Download_Job):
        * UIProcess/API/efl/ewk_navigation_data_private.h:
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        (ewk_navigation_policy_decision_ref):
        (ewk_navigation_policy_decision_unref):
        * UIProcess/API/efl/ewk_navigation_policy_decision_private.h:
        (_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::~_Ewk_Navigation_Policy_Decision):
        * UIProcess/API/efl/ewk_url_response.cpp:
        (ewk_url_response_ref):
        (ewk_url_response_unref):
        * UIProcess/API/efl/ewk_url_response_private.h:
        (_Ewk_Url_Response):
        (_Ewk_Url_Response::_Ewk_Url_Response):
        * UIProcess/API/efl/ewk_view_policy_client.cpp:
        (decidePolicyForNavigationAction):
        (decidePolicyForNewWindowAction):
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        (didSendRequestForResource):
        (didReceiveResponseForResource):

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

        [WK2][EFL] Crash in _ewk_view_on_favicon_changed()
        https://bugs.webkit.org/show_bug.cgi?id=99454

        Reviewed by Kenneth Rohde Christiansen.

        Added missing null check to avoid a crash if the current URL of
        view is NULL.

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_on_favicon_changed):

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

        [WK2] Provide WKURL API for resolving the relative URL with the given base URL
        https://bugs.webkit.org/show_bug.cgi?id=99317

        Reviewed by Kenneth Rohde Christiansen.

        Added new constructor function WKURLCreateWithBaseURL for WKURL which
        resolves the relative URL with the given base URL.

        * Shared/API/c/WKURL.cpp:
        (WKURLCreateWithBaseURL):
        * Shared/API/c/WKURL.h:
        * Shared/WebURL.h:
        (WebKit::WebURL::create):
        (WebURL):
        (WebKit::WebURL::WebURL):

2012-10-16  Szilard Ledan  <szledan@inf.u-szeged.hu>

        Separate WebKit2 instances use the same local storage
        https://bugs.webkit.org/show_bug.cgi?id=89666

        Reviewed by Simon Hausmann.

        For multi-threaded (parallel) testing, WTRs must not write into the same directory.
        To avoid that, results need to be stored in the location defined by DUMPRENDERTREE_TEMP
        environment variable that is created by NRWT. To do that, WebContext needed to be
        extended with diskCacheDirectory and cookieStorageDirectory APIs.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDiskCacheDirectory):
        (WKContextSetCookieStorageDirectory):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::diskCacheDirectory):
        (WebKit):
        (WebKit::WebContext::cookieStorageDirectory):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::setDiskCacheDirectory):
        (WebKit::WebContext::setCookieStorageDirectory):
        (WebContext):
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformDefaultDiskCacheDirectory):
        (WebKit):
        (WebKit::WebContext::platformDefaultCookieStorageDirectory):
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultDiskCacheDirectory):
        (WebKit):
        (WebKit::WebContext::platformDefaultCookieStorageDirectory):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        (WebKit):
        (WebKit::WebContext::platformDefaultDiskCacheDirectory):
        (WebKit::WebContext::platformDefaultCookieStorageDirectory):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit):
        (WebKit::WebContext::platformDefaultDiskCacheDirectory):
        (WebKit::WebContext::applicationCacheDirectory):
        (WebKit::WebContext::platformInitializeWebProcess):
        (WebKit::WebContext::platformDefaultCookieStorageDirectory):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        (WebKit::WebContext::platformDefaultDiskCacheDirectory):
        (WebKit):
        (WebKit::WebContext::platformDefaultCookieStorageDirectory):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

2012-10-16  Jongseok Yang  <js45.yang@samsung.com>

        [EFL][WK2] Fix Cache Model API tests
        https://bugs.webkit.org/show_bug.cgi?id=99427

        Reviewed by Gyuyoung Kim.

        Cache Model API tests caused "Segmentation fault" because the default value 
        for cache model was incorrect.

        Fix the default value for cache model.
        Fix Cache Model API tests.

        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):

2012-10-15  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Regression(r131337): Made 3 Cookie Manager API tests fail
        https://bugs.webkit.org/show_bug.cgi?id=99416

        Reviewed by Gyuyoung Kim.

        After r131337, the favicon database is enabled and it causes new
        requests to "/favicon.ico" on the http server. The http server used
        in the cookie manager test was too strict and was calling FAIL() for
        any unrecognized HTTP request (such as the one to /favicon.ico).
        This patch makes the http server in cookie manager API tests less
        strict.

        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (serverCallback):

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

        Unreviewed, rolling out r131349.
        http://trac.webkit.org/changeset/131349
        https://bugs.webkit.org/show_bug.cgi?id=97173

        Revert r131349 because API test is broken by this commit.

        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init):
        (ewk_shutdown):
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):

2012-10-15  Jongseok Yang  <js45.yang@samsung.com>

        [EFL][WK2] Add APIs for cache model
        https://bugs.webkit.org/show_bug.cgi?id=98889

        Reviewed by Gyuyoung Kim.

        Add ewk_context_cache_model_set(), ewk_context_cache_model_get().

        The cache model means the level for the cache capacity.
        If EWK_CACHE_MODEL_DOCUMENT_BROWSER, the biggest cache capacity will be set.

        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_cache_model_set):
        (ewk_context_cache_model_get):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):

2012-10-15  Byungwoo Lee  <bw80.lee@samsung.com>

        Fix unused parameter build warning.
        https://bugs.webkit.org/show_bug.cgi?id=99400

        Reviewed by Gyuyoung Kim.

        Remove the name of unused parameters to fix the build warning (-Wunused-parameter).

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::encodePlatformData):
        (CoreIPC::::decodePlatformData):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getSharedWorkerProcessConnection):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::handleEditingCommand):
        (WebKit::NetscapePlugin::isEditingCommandEnabled):

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

        WebKit2 part of <rdar://problem/12470680> Font’s fast code path doesn’t support kerning and ligatures
        https://bugs.webkit.org/show_bug.cgi?id=99113

        Reviewed by Tim Horton.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Added wkCTFontTransformGlyphs.

2012-10-15  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][CAIRO] Use cairo_format_stride_for_width() in ShareableBitmap
        https://bugs.webkit.org/show_bug.cgi?id=99332

        Reviewed by Martin Robinson.

        Cairo implementation of ShareableBitmap is calling
        cairo_image_surface_create_for_data() to create an image surface for
        the provided pixel data. However, it was passing "m_size.width() * 4"
        for the stride argument instead of calling
        cairo_format_stride_for_width().

        The Cairo documentation states:
        "Note that the stride may be larger than width*bytes_per_pixel to
        provide proper alignment for each pixel and row. This alignment is
        required to allow high-performance rendering within cairo. The correct
        way to obtain a legal stride value is to call
        cairo_format_stride_for_width() with the desired format and maximum
        image width value, and then use the resulting stride value to allocate
        the data and to create the image surface."

        This patch calls cairo_format_stride_for_width() is ShareableBitmap
        in order to obtain a legal stride value to make sure we provide proper
        alignment for each pixel and row, and allow high-performance rendering
        within cairo.

        * Shared/ShareableBitmap.h:
        (ShareableBitmap):
        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit):
        (WebKit::ShareableBitmap::numBytesForSize):
        (WebKit::createSurfaceFromData):
        (WebKit::ShareableBitmap::paint):
        (WebKit::ShareableBitmap::createCairoSurface):

2012-10-15  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Refactoring initialization and shutdown codes of EFL libraries.
        https://bugs.webkit.org/show_bug.cgi?id=97173

        Reviewed by Gyuyoung Kim.

        Initialize and shutdown the EFL libraries in the ewk_main.cpp for ui
        process and WebProcessMainEfl.cpp for web process.

        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init):
        (ewk_shutdown):
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):

2012-10-15  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Provide implementation for PageClientImpl::toolTipChanged()
        https://bugs.webkit.org/show_bug.cgi?id=98589

        Reviewed by Kenneth Rohde Christiansen.

        Implement PageClientImpl::toolTipChanged() to emit signal 'tooltip,text,set' with a tooltip text,
        or 'tooltip,text,unset' if tooltip was unset.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::toolTipChanged):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_tooltip_text_set):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:

2012-10-15  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Partial build fix for Windows after r131308.

        * WebKit2Prefix.h:
        * WebProcess/WebKitMain.cpp:
        (WebKitMain):

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

        Unreviewed, rolling out r131306 and r131307.
        http://trac.webkit.org/changeset/131306
        http://trac.webkit.org/changeset/131307
        https://bugs.webkit.org/show_bug.cgi?id=99354

        It made layout testing extremely slow again (Requested by
        Ossy_night on #webkit).

        * Shared/API/c/qt/WKImageQt.cpp:
        (WKImageCreateQImage):
        * Shared/API/c/qt/WKImageQt.h:

2012-10-15  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Implement Favicons API
        https://bugs.webkit.org/show_bug.cgi?id=99087

        Reviewed by Kenneth Rohde Christiansen.

        Add support for favicon API to EFL WK2 port via
        Ewk_Favicon_Database. The API can be used to
        retrieve the favicon URL and data for a given
        page URL.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context):
        (_Ewk_Context::_Ewk_Context):
        (_Ewk_Context::~_Ewk_Context):
        (ewk_context_favicon_database_get): Add getter to retrieve the favicon
        database instance from the context.
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_favicon_database.cpp: Added.
        (IconChangeCallbackData):
        (IconChangeCallbackData::IconChangeCallbackData):
        (IconRequestCallbackData):
        (IconRequestCallbackData::IconRequestCallbackData):
        (_Ewk_Favicon_Database):
        (_Ewk_Favicon_Database::_Ewk_Favicon_Database):
        (didChangeIconForPageURL):
        (getIconSurfaceSynchronously):
        (iconDataReadyForPageURL):
        (ewk_favicon_database_new):
        (ewk_favicon_database_free):
        (ewk_favicon_database_icon_url_get):
        (AsyncIconRequestResponse):
        (AsyncIconRequestResponse::AsyncIconRequestResponse):
        (respond_icon_request_idle):
        (ewk_favicon_database_async_icon_get):
        (ewk_favicon_database_icon_change_callback_add):
        (ewk_favicon_database_icon_change_callback_del):
        * UIProcess/API/efl/ewk_favicon_database.h: Added.
        * UIProcess/API/efl/ewk_favicon_database_private.h: Copied from Source/WebKit2/UIProcess/efl/WebContextEfl.cpp.
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::~_Ewk_View_Private_Data):
        (_ewk_view_on_favicon_changed):
        (_ewk_view_initialize):
        (ewk_view_url_update):
        (ewk_view_icon_url_get): Add a getter to the view to retrieve the icon URL for
        the page that is currently shown.
        (ewk_view_update_icon):
        * UIProcess/API/efl/ewk_view.h: Emit a new "icon,changed" signal on the view whenever
        the view's icon has changed.
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/tests/resources/blank.ico: Added.
        * UIProcess/API/efl/tests/test_ewk2_context.cpp: Add unit test for new favicon database getter.
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp: Added unit tests for the new Ewk_Favicon_Database API.
        (serverCallback):
        (onIconChanged):
        (TEST_F):
        (onIconDataReady):
        (IconRequestData):
        (requestFaviconData):
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformDefaultIconDatabasePath): Return a valid default path for the icon database.

2012-10-15  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Share resources installed for inspector
        https://bugs.webkit.org/show_bug.cgi?id=98991

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake: Removed build script which install resources to share.
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL): Modified not to use makeString.
        (WebKit::WebInspectorProxy::inspectorBaseURL): Changed resource path.

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

        [WK2] Add SharedWorkerProcess
        https://bugs.webkit.org/show_bug.cgi?id=99218

        Reviewed by Sam Weinig.

        Not yet functional, just some boilerplate code.

        * Configurations/SharedWorkerProcess.xcconfig: Added.

        * DerivedSources.make: Generate message dispatch for SharedWorkerProcess and
        SharedWorkerProcessProxy.

        * Platform/CoreIPC/MessageID.h: Added shared worker messages classes.

        * Scripts/webkit2/messages.py: (struct_or_class):
        SharedWorkerProcessCreationParameters is a struct.

        * Shared/SharedWorkerProcessCreationParameters.cpp: Added.
        * SharedWorkerProcess/Info.plist: Added.
        * SharedWorkerProcess/SharedWorkerProcess.cpp: Added.
        * SharedWorkerProcess/SharedWorkerProcess.h: Added.
        * SharedWorkerProcess/SharedWorkerProcess.messages.in: Added.
        * SharedWorkerProcess/SharedWorkerProcessMain.h: Added.
        * SharedWorkerProcess/mac/SharedWorkerProcessMac.mm: Added.
        * SharedWorkerProcess/mac/SharedWorkerProcessMainMac.mm: Added.
        * SharedWorkerProcess/mac/com.apple.WebKit.SharedWorkerProcess.sb: Added.
        * UIProcess/SharedWorkers/SharedWorkerProcessManager.cpp: Added.
        * UIProcess/SharedWorkers/SharedWorkerProcessManager.h: Added.
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.cpp: Added.
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.h: Added.
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.messages.in: Added.
        * WebKit2.xcodeproj/project.pbxproj:
        Added SharedWorkerProcess boilerplate, modeled after PluginProcess.

        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        Added getSharedWorkerProcessConnection() message.

        * WebProcess/WebKitMain.cpp: (WebKitMain):
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::processTypeAsString):
        (WebKit::ProcessLauncher::getProcessTypeFromString):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm: (WebKit::createProcess):
        Added branches for SharedWorkerProcess.

        * Platform/CoreIPC/HandleMessage.h: (CoreIPC::callMemberFunction): Added a version
        for delayed reply messages with two arguments.

2012-10-15  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WTR] Do a forced repaint before generating pixel results
        https://bugs.webkit.org/show_bug.cgi?id=98654

        Reviewed by Jocelyn Turcotte.

        Added API to convert a QImage to a WKImage so we can
        pass it to cross-platform code.

        * Shared/API/c/qt/WKImageQt.cpp:
        (WKImageCreateFromQImage):
        * Shared/API/c/qt/WKImageQt.h:

2012-10-15  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Separate Qt WebKit into Qt WebKit and Qt WebKit Widgets
        https://bugs.webkit.org/show_bug.cgi?id=88162

        Reviewed by Kenneth Rohde Christiansen.

        Rename the QtWebKit module to QtWebKitWidgets.

        * PluginProcess.pro:
        * UIProcess/API/qt/tests/inspectorserver/inspectorserver.pro:
        * UIProcess/API/qt/tests/publicapi/publicapi.pro:
        * UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro:
        * UIProcess/API/qt/tests/qmltests/WebView.pro:
        * UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro:
        * UIProcess/API/qt/tests/qrawwebview/qrawwebview.pro:
        * UIProcess/API/qt/tests/tests.pri:
        * WebProcess.pro:

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

        [EFL][WK2] Encapsulate ref counting for Ewk objects in a parent class
        https://bugs.webkit.org/show_bug.cgi?id=99174

        Reviewed by Kenneth Rohde Christiansen.

        Ewk objects can be inherited from RefCounted class, so that ref counting is encapsulated and RefPtr can be used.
        Applied the new approach for Ewk_Navigation_Data and Ewk_Url_Request objects as an example.
        The requirement of adoption can be satisfied as long as we keep dealing with smart pointers only. 
        In case external client provides an already referenced object as a raw pointer, relaxAdoptionRequirement() can be set
        explicitly in this specific place.

        * UIProcess/API/efl/ewk_context_history_client.cpp:
        (didNavigateWithNavigationData):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (_Ewk_Download_Job):
        (_Ewk_Download_Job::_Ewk_Download_Job):
        (_Ewk_Download_Job::~_Ewk_Download_Job):
        (ewk_download_job_request_get):
        * UIProcess/API/efl/ewk_navigation_data.cpp:
        (ewk_navigation_data_ref):
        (ewk_navigation_data_unref):
        (ewk_navigation_data_original_request_get):
        * UIProcess/API/efl/ewk_navigation_data_private.h:
        (_Ewk_Navigation_Data):
        (_Ewk_Navigation_Data::_Ewk_Navigation_Data):
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        (_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::~_Ewk_Navigation_Policy_Decision):
        (ewk_navigation_policy_request_get):
        (ewk_navigation_policy_decision_new):
        * UIProcess/API/efl/ewk_url_request.cpp:
        (ewk_url_request_ref):
        (ewk_url_request_unref):
        * UIProcess/API/efl/ewk_url_request_private.h:
        (_Ewk_Url_Request):
        (_Ewk_Url_Request::_Ewk_Url_Request):
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        (didInitiateLoadForResource):
        (didSendRequestForResource):

2012-10-15  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Regression(r130031) coverRect is used in wrong coordinates.
        https://bugs.webkit.org/show_bug.cgi?id=97777

        Reviewed by Jocelyn Turcotte.

        Convert coverRect from screen coordinates to content coordinates before using it
        outside tiled-backing store.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (WebCore::CoordinatedGraphicsLayer::coverRect):

2012-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add .in files in WebKit2/Shared to EXTRA_DIST.
        * GNUmakefile.list.am: Remove deleted file.

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

        Fix the world.

        Add back a forgotten !.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::postInjectedBundleMessage):

2012-10-14  Sam Weinig  <sam@webkit.org>

        Stop all the crashing!

        The WebProcessProxy is not the Connection::Client, the WebConnectionToWebProcess is.

        * UIProcess/WebConnectionToWebProcess.h:
        (WebKit::WebConnectionToWebProcess::webProcessProxy):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fromConnection):

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

        Re-land of "WebContext should be a MessageReceiver"
        https://bugs.webkit.org/show_bug.cgi?id=98958

        Reviewed by Sam Weinig.

        Make WebContext be a MessageReceiver that lives in its own map. This allows us to get rid of the
        knowsHowToHandleMessage functions on MessageReceiverMap and WebContext.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::client):
        (Connection):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::addMessageReceiver):
        (CoreIPC::MessageReceiverMap::invalidate):
        (CoreIPC::MessageReceiverMap::knowsHowToHandleMessage):
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::dispatchMessage):
        (WebKit::WebContext::dispatchSyncMessage):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fromConnection):
        (WebKit):
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):

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

        WebPage::PostInjectedBundleMessage should be a variadic message
        https://bugs.webkit.org/show_bug.cgi?id=99277

        Reviewed by Sam Weinig.

        Don't use a data reference for messages posted to the injected bundle; they could contain data that requires attachments
        (such as shared memory).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::postMessageToInjectedBundle):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::postInjectedBundleMessage):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:

2012-10-14  Sam Weinig  <sam@webkit.org>

        Simplify user content in WebKit2 by using WebCore::UserStyleSheet and WebCore::UserScript directly
        https://bugs.webkit.org/show_bug.cgi?id=99276

        Reviewed by Anders Carlsson.

        - Removes UserContentContainer in favor of Vector<UserStyleSheet> and Vector<UserScript> right on WebPageGroupData.
        - Adds support for UserScripts, but does not expose API for it just yet.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * Shared/UserContentContainer.cpp: Removed.
        * Shared/UserContentContainer.h: Removed.
        Remove UserContentContainer.h/cpp.

        * Shared/API/c/WKBase.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toUserScriptInjectionTime):
        (WebKit::toUserContentInjectedFrames):
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        Move UserContent enums to WKBase.h so they can be used from both processes, and move the
        casts to WKSharedAPICast.

        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        Add coders for UserStyleSheet and UserScript.

        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::encode):
        (WebKit::WebPageGroupData::decode):
        * Shared/WebPageGroupData.h:
        (WebPageGroupData):
        Replace UserContentContainer with Vector<UserStyleSheet> and Vector<UserScript>. Stop using
        CoreIPC::In() and CoreIPC::Out(), and instead just call encode/decode multiple times.

        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupAddUserStyleSheet):
        Pass the parameters with as little conversion as possible to the C++ to avoid doing too much
        work in the API layer.

        * UIProcess/WebPageGroup.cpp:
        (WebKit::toStringVector):
        (WebKit::WebPageGroup::addUserStyleSheet):
        (WebKit::WebPageGroup::addUserScript):
        (WebKit::WebPageGroup::removeAllUserStyleSheets):
        (WebKit::WebPageGroup::removeAllUserScripts):
        (WebKit::WebPageGroup::removeAllUserContent):
        * UIProcess/WebPageGroup.h:
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::WebPageGroupProxy):
        (WebKit::WebPageGroupProxy::addUserStyleSheet):
        (WebKit::WebPageGroupProxy::addUserScript):
        (WebKit::WebPageGroupProxy::removeAllUserScripts):
        (WebKit::WebPageGroupProxy::removeAllUserContent):
        * WebProcess/WebPage/WebPageGroupProxy.h:
        (WebPageGroupProxy):
        * WebProcess/WebPage/WebPageGroupProxy.messages.in:
        Add support for user scripts and update to use UserScript and UserStyleSheet directly.

2012-10-14  Jon Lee  <jonlee@apple.com>

        Allow notification origin permission request when no js callback is provided
        https://bugs.webkit.org/show_bug.cgi?id=63615
        <rdar://problem/11059590>

        Reviewed by Sam Weinig.

        Null checks already exist for both standard and legacy API callbacks, so no changes are needed here
        like there are in WebKit 1. The checks existed because the callbacks are held in a hash map used to keep
        track of pending requests.

        Also, add a check for a null callback when short circuiting.

        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::startRequest):

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

        Move QDataStream functions into HistoryItemQt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=99203

        Reviewed by Andreas Kling.

        Forward declare QTransform.

        * Shared/qt/WebEventFactoryQt.h:

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

        Explicitly mark messages variadic
        https://bugs.webkit.org/show_bug.cgi?id=99229

        Reviewed by Dan Bernstein.

        Instead of deciding whether messages are variadic based on their type, decide it based on the existence of a 'Variadic' message attribute.

        * Scripts/webkit2/messages.py:
        (messages_to_kind_enum):
        (decode_type):
        (async_case_statement):
        (sync_case_statement):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebProcess.messages.in:

2012-10-14  Sam Weinig  <sam@webkit.org>

        Make UserScript and UserStyleSheet value objects that are copyable
        https://bugs.webkit.org/show_bug.cgi?id=99275

        Reviewed by Tim Horton.

        * Shared/UserContentContainer.cpp:
        (WebKit::toStringVector):
        (WebKit::UserContentContainer::Item::Item):
        (WebKit::UserContentContainer::Item::encode):
        (WebKit::UserContentContainer::Item::decode):
        * Shared/UserContentContainer.h:
        (WebKit::UserContentContainer::Item::whitelist):
        (WebKit::UserContentContainer::Item::blacklist):
        Switch UserContentContainer::Item to store Vector<String> instead of ImmutableArray, easing
        transition to new PageGroup function signatures.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::toStringVector):
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::setUserScripts):
        Update for new PageGroup function signatures.

2012-10-14  Tim Horton  <timothy_horton@apple.com>

        [wk2] Implement PDFPlugin
        https://bugs.webkit.org/show_bug.cgi?id=99206

        Unreviewed build fix, hand ivar name to @synthesize since it doesn't match the property name.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:

2012-10-14  Tim Horton  <timothy_horton@apple.com>

        [wk2] Implement PDFPlugin
        https://bugs.webkit.org/show_bug.cgi?id=99206

        Unreviewed, attempt to manipuate SVN to retain the history of SimplePDFPlugin.

        * WebProcess/Plugins/PDF/SimplePDFPlugin.h: Replaced with Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFView.h.
        * WebProcess/Plugins/PDF/SimplePDFPlugin.mm: Replaced with Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFView.mm.

2012-10-14  Tim Horton  <timothy_horton@apple.com>

        [wk2] Implement PDFPlugin
        https://bugs.webkit.org/show_bug.cgi?id=99206

        Reviewed by Dan Bernstein.

        Add PDFPlugin, which uses PDFKit to display PDFs, instead of using PDFKit in the
        UIProcess for full-page PDFs. This new plugin will also be used for inline PDFs
        in place of SimplePDFPlugin (née BuiltInPDFView).

        * Configurations/FeatureDefines.xcconfig: Add ENABLE_PDF_PLUGIN.

        Support three new Plugin methods:
            - handleEditingCommand, which hands editing commands to the Plugin
            - isEditingCommandEnabled, which validates editing commands via the Plugin
            - handlesPageScaleFactor, which asks the plugin whether it wants to
            opt into a mode where the WebPage doesn't scale in the ordinary fashion,
            but instead proxies the Plugin's scale factor, so full-page plugins
            can handle scale factor changes however they need to.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::handleEditingCommand): Proxy handleEditingCommand to the Plugin.
        (WebKit::PluginControllerProxy::isEditingCommandEnabled): Proxy isEditingCommandEnabled to the Plugin.
        (WebKit::PluginControllerProxy::handlesPageScaleFactor): Proxy handlesPageScaleFactor to the Plugin.
        * PluginProcess/PluginControllerProxy.h:
        (PluginControllerProxy): Add handleEditingCommand, isEditingCommandEnabled, and handlesPageScaleFactor.
        * PluginProcess/PluginControllerProxy.messages.in: Add HandleEditingCommand, IsEditingCommandEnabled, and HandlesPageScaleFactor.
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::handleEditingCommand): NPAPI plugins support no editing commands by default.
        (WebKit::NetscapePlugin::isEditingCommandEnabled): NPAPI plugins enable no editing commands by default.
        (WebKit::NetscapePlugin::handlesPageScaleFactor): NPAPI plugins do not handle page scale factor changes themselves by default.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Add handleEditingCommand, isEditingCommandEnabled, and handlesPageScaleFactor.

        Add PDFPluginEnabled preference. If it is not enabled, or the plugin is
        not built, behavior will be the same as before (the UIProcess PDFView will
        handle full-page PDFs, and SimplePDFPlugin will handle inline ones).

        * Shared/WebPreferencesStore.h: Add PDFPluginEnabled preference.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPDFPluginEnabled): Setter for PDFPluginEnabled preference.
        (WKPreferencesGetPDFPluginEnabled): Getter for PDFPluginEnabled preference.
        * UIProcess/API/C/WKPreferencesPrivate.h: Expose WKPreferences(Set|Get)PDFPluginEnabled as a private preference.

        Move support for MIME types with custom representations onto WebPage instead of WebProcess.
        This allows us to use preferences to control the use of custom representations (for example,
        it allows us to have a preference to toggle between UIProcess's PDFView and PDFPlugin).

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Don't pass mimeTypesWithCustomRepresentation
        into the WebProcess, as we can compute it later.
        (WebKit::WebProcessCreationParameters::decode): Same, on the decode side.
        * Shared/WebProcessCreationParameters.h: Remove mimeTypesWithCustomRepresentation.
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess): Don't add pdfAndPostScriptMIMETypes to mimeTypesWithCustomRepresentation here, as we're now computing it on WebPage instead.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::canPluginHandleResponse): Move to WebPage from WebProcess so we can use WebPage's new notion of mimeTypesWithCustomRepresentation.
        (WebKit::WebPage::shouldUseCustomRepresentationForResponse): Move to WebPage from WebProcess so we can use WebPage's new notion of mimeTypesWithCustomRepresentation.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::pdfAndPostScriptMIMETypes): Return the set of MIME types used for PDF and PostScript, which are handled with PDFView if PDFPlugin is not available or enabled.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Don't keep m_mimeTypesWithCustomRepresentations on WebProcess, it's owned by WebPage now.
        * WebProcess/WebProcess.h: Move canPluginHandleResponse and shouldUseCustomRepresentationForResponse to WebPage.

        Add PDFLayerController to the set of classes returned by PDFKitImports.

        * Shared/mac/PDFKitImports.h: Add pdfLayerControllerClass.
        * Shared/mac/PDFKitImports.mm:
        (WebKit::pdfLayerControllerClass): Find and return the PDFLayerController class.

        Add PDFPlugin, which inherits from SimplePDFPlugin, but uses PDFKit instead
        of CoreGraphics, to provide additional interactive functionality.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::sendDidGetPlugins): Add PDFPlugin to the set of supported plugins.
        * WebKit2.xcodeproj/project.pbxproj: Add PDFPlugin, rename BuiltInPDFView to SimplePDFPlugin.
        * WebProcess/Plugins/PDF/PDFPlugin.h: Added.
        * WebProcess/Plugins/PDF/PDFPlugin.mm: Added.

        PDFPlugin uses layers for scrollbars.

        (-[WKPDFPluginScrollbarLayer initWithPDFPlugin:WebKit::]): Initialize our CALayer subclass,
        storing its parent PDFPlugin so it can delegate drawing there.
        (-[WKPDFPluginScrollbarLayer actionForKey:]): Disable CoreAnimation implicit actions.
        (-[WKPDFPluginScrollbarLayer drawInContext:]): Delegate scrollbar drawing to PDFPlugin.

        Implement the PDFLayerController delegate, eventually forwarding calls back to PDFPlugin.

        (-[WKPDFLayerControllerDelegate initWithPDFPlugin:WebKit::]): Initialize our delegate,
        storing its parent PDFPlugin so it can forward delegate calls there.
        (-[WKPDFLayerControllerDelegate updateScrollPosition:]): Update PDFPlugin's notion of the
        current scroll position, when PDFKit changes the scroll position itself.
        (-[WKPDFLayerControllerDelegate writeItemsToPasteboard:withTypes:]): Write the given
        array of NSData objects to the pasteboard with the given types.

        The following PDFLayerController delegate methods will be implemented in the future.

        (-[WKPDFLayerControllerDelegate showDefinitionForAttributedString:atPoint:]):
        (-[WKPDFLayerControllerDelegate performWebSearch:]):
        (-[WKPDFLayerControllerDelegate openWithPreview]):
        (-[WKPDFLayerControllerDelegate saveToPDF]):

        (WebKit::PDFPlugin::PDFPlugin): Set up the requisite layer hierarchy, and create a PDFLayerController (and its delegate proxy).
        (WebKit::PDFPlugin::updateScrollbars): Update the frame of the layers hosting our scrollbars.
        (WebKit::PDFPlugin::createScrollbar): Create a scrollbar and hosting layer, attaching its layer
        to PDFPlugin's container layer.
        (WebKit::PDFPlugin::destroyScrollbar): Destroy a scrollbar, detaching and destroying its hosting layer in the process.
        (WebKit::PDFPlugin::pdfDocumentDidLoad): Called when the document finishes loading; hand
        the loaded document to PDFKit, update all of our state (cached document size, scrollbars, etc.), and then execute any scripts in the document (to allow for automatic printing).
        (WebKit::PDFPlugin::calculateSizes): Determine the size of the PDF and its pages.
        (WebKit::PDFPlugin::destroy): Tear down the layer hierarchy.
        (WebKit::PDFPlugin::paint): PDFPlugin is layer-based, so we paint nothing into the tiles.
        (WebKit::PDFPlugin::paintControlForLayerInContext): Scrollbar controls are drawn into layers, but their painting is delegated here from WKPDFPluginScrollbarLayer.
        (WebKit::PDFPlugin::snapshot): Perform a paint into a bitmap context.
        (WebKit::PDFPlugin::pluginLayer): Return PDFPlugin's root layer.
        (WebKit::PDFPlugin::geometryDidChange): The size or scale of the plugin changed; update
        PDFLayerController's notion of the size and page scale, and invalidate the scrollbars.

        Mouse and keyboard events are converted back into NSEvents, but with
        locationInWindow actually in terms of the PDFPlugin's layer, not
        the window (since there is no window).

        (WebKit::modifierFlagsFromWebEvent): Construct an AppKit-style modifier bitmask from WebEvent's modifier key getters.
        (WebKit::eventTypeFromWebEvent): Return the NSEventType equivalent to the given WebEvent. Only supports keyboard and mouse events, and only the left and right mouse button.
        (WebKit::PDFPlugin::handleMouseEvent): Construct an NSEvent from the given WebMouseEvent and hand it to PDFLayerController. Mouse coordinates are in terms of m_contentLayer's origin.
        (WebKit::PDFPlugin::handleKeyboardEvent): Construct an NSEvent from the given WebKeyboardEvent and hand it to PDFLayerController. PDFLayerController currently only handles keyDown events.

        (WebKit::PDFPlugin::handleEditingCommand): Handle copy and select-all commands, and forward them to PDFLayerController.
        (WebKit::PDFPlugin::isEditingCommandEnabled): The 'copy' command should be enabled if
        the user has selected a part of the PDF. The 'select all' command should always be enabled.

        (WebKit::PDFPlugin::setScrollOffset): Update both PDFPlugin and PDFLayerController's notion
        of the current scroll position.
        (WebKit::PDFPlugin::invalidateScrollbarRect): Invalidate the whole scrollbar layer.
        (WebKit::PDFPlugin::invalidateScrollCornerRect): Invalidate the whole scroll corner layer.

        Rename BuiltInPDFView to SimplePDFPlugin, to differentiate it from PDFPlugin
        and to better denote its inheritance from Plugin.

        * WebProcess/Plugins/PDF/SimplePDFPlugin.h: Renamed from WebProcess/Plugins/PDF/BuiltInPDFView.h.
        (WebKit::SimplePDFPlugin): Make methods protected so PDFPlugin can override them. Rename m_pluginSize -> m_size, and m_dataBuffer->m_data.
        (WebKit::SimplePDFPlugin::size): Retrieve the size of the plugin.
        (WebKit::SimplePDFPlugin::setSize): Set the size of the plugin.
        (WebKit::SimplePDFPlugin::pdfDocument): Retrieve the currently represented PDF document.
        (WebKit::SimplePDFPlugin::setPDFDocument): Set the currently represented PDF document.
        (WebKit::SimplePDFPlugin::pdfDocumentSize): Retrieve the current size of the PDF.
        (WebKit::SimplePDFPlugin::setPDFDocumentSize): Set the current size of the PDF.
        (WebKit::SimplePDFPlugin::data): Retrieve the accumulated document data.
        * WebProcess/Plugins/PDF/SimplePDFPlugin.mm: Renamed from WebProcess/Plugins/PDF/BuiltInPDFView.mm.
        (WebKit::SimplePDFPlugin::computePageBoxes): Copied out of calculateSizes() so PDFPlugin can use it too.
        (WebKit::SimplePDFPlugin::runScriptsInPDFDocument): Factored out of pdfDocumentDidLoad() so PDFPlugin can use it too.
        (WebKit::SimplePDFPlugin::convertFromScrollbarToContainingView): Implement the remaining scrollbar point conversion functions.
        (WebKit::SimplePDFPlugin::convertFromContainingViewToScrollbar): Implement the remaining scrollbar point conversion functions.

        * WebProcess/Plugins/Plugin.h:
        (Plugin): Add handleEditingCommand, isEditingCommandEnabled, and handlesPageScaleFactor.
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::handleEditingCommand): Proxy handleEditingCommand to the PluginProcess.
        (WebKit::PluginProxy::isEditingCommandEnabled): Proxy isEditingCommandEnabled
        to the PluginProcess.
        (WebKit::PluginProxy::handlesPageScaleFactor): Proxy handlesPageScaleFactor
        to the PluginProcess.
        * WebProcess/Plugins/PluginProxy.h: Add handleEditingCommand, isEditingCommandEnabled,
        and handlesPageScaleFactor.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::setPageScaleFactor): Set the plugin's current page scale factor. Also,
        update WebPageProxy's notion of the current pageScaleFactor when this is called.
        (WebKit::PluginView::pageScaleFactor): Return the plugin's current page scale factor.
        (WebKit::PluginView::handleEditingCommand): Proxy handleEditingCommand to the plugin.
        (WebKit::PluginView::isEditingCommandEnabled): Proxy isEditingCommandEnabled to the plugin.
        * WebProcess/Plugins/PluginView.h:
        (PluginView): Add handleEditingCommand, isEditingCommandEnabled,
        setPageScaleFactor/pageScaleFactor, and handlesPageScaleFactor. Add m_pageScaleFactor.
        (WebKit::PluginView::handlesPageScaleFactor): Proxy handlesPageScaleFactor to the plugin.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::restoreViewState): Don't update WebPageProxy's notion of the scale factor if it should be the default.
        (WebKit::WebFrameLoaderClient::transitionToCommittedFromCachedFrame): Make use of shouldUseCustomRepresentationForResponse on WebPage instead of WebProcess.
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage): Make use of shouldUseCustomRepresentationForResponse on WebPage instead of WebProcess.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin): Create a PDFPlugin if appropriate (if it is built and the setting is enabled).
        (WebKit::pluginViewForFrame): Return the PluginView for the given frame if its document is a PluginDocument.
        (WebKit::WebPage::executeEditingCommand): Attempt to execute editing commands on the
        currently focused (or main-frame) plugin.
        (WebKit::WebPage::isEditingCommandEnabled): Validate editing commands against the
        currently focused (or main-frame) plugin.
        (WebKit::WebPage::scalePage): If the plugin reports that it handles page scale factor
        itself, hand it the new scale instead of WebCore.
        (WebKit::WebPage::pageScaleFactor): If the plugin reports that it handles page scale
        factor itself, return its notion of the current scale instead of WebCore's.
        (WebKit::WebPage::validateCommand): Validate editing commands against the
        currently focused (or main-frame) plugin.
        (WebKit::WebPage::updatePreferences): Update m_pdfPluginEnabled given the relevant WebPreference.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::pdfPluginEnabled): Return whether or not PDFPlugin should be used.
        (WebKit::WebPage::setPDFPluginEnabled): Set whether or not PDFPlugin should be used.

2012-10-13  Sam Weinig  <sam@webkit.org>

        Use class extension rather than a void* member for new Objective-C WebProcessPlugIn SPI
        https://bugs.webkit.org/show_bug.cgi?id=99256

        Reviewed by Dan Bernstein.

        A bit of good old fashion cleanup.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
        Remove the void* member.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
        Move members from the WKWebProcessPlugInControllerData struct to a class extension.

        (didCreatePage):
        (willDestroyPage):
        (-[WKWebProcessPlugInController _initWithPrincipalClassInstance:bundleRef:]):
        Directly access the members instead of using properties, now that it is not inconvenient.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h:
        Remove the void* member.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        Move members from the WKWebProcessPlugInBrowserContextControllerData struct to a class extension.
        
        (-[WKWebProcessPlugInBrowserContextController _initWithBundlePageRef:]):
        (-[WKWebProcessPlugInBrowserContextController _bundlePageRef]):
        Remove unnecessary casts..

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerInternal.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h:
        Add space before the parenthesis of a category to be consistent.
 
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h:
        Remove unnecessary forward declare.

2012-10-13  Andy Estes  <aestes@apple.com>

        Add a private header for WKWebProcessPlugInBrowserContextController that defines a property for getting the WKBundlePageRef
        https://bugs.webkit.org/show_bug.cgi?id=99252

        Reviewed by Sam Weinig.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _bundlePageRef]):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h: Added.

2012-10-12  Brady Eidson  <beidson@apple.com>

        Setup basic NetworkProcess messaging and initialization.
        https://bugs.webkit.org/show_bug.cgi?id=99198

        Reviewed by Sam Weinig.

        Project file/build system stuff:
        * DerivedSources.make:
        * WebKit2.xcodeproj/project.pbxproj:
        * Scripts/webkit2/messages.py:
        (struct_or_class):

        Add basic initialization parameters for the NetworkProcess:
        * Shared/Network/NetworkProcessCreationParameters.cpp: 
        (WebKit):
        (WebKit::NetworkProcessCreationParameters::NetworkProcessCreationParameters):
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        (CoreIPC):
        (WebKit):
        (NetworkProcessCreationParameters):

        Use them to message the NetworkProcess what it's application name should be:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/Network/NetworkProcessProxy.h:
        (WebKit):
        (NetworkProcessProxy):
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        (WebKit):
        (WebKit::NetworkProcessProxy::platformInitializeNetworkProcess):        

        Add basic message handling and initialization to the NetworkProcess itself:
        * NetworkProcess/NetworkProcess.messages.in: Added.
        * Platform/CoreIPC/MessageID.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveMessage):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit):
        * NetworkProcess/NetworkProcess.h:
        (WebKit):
        (NetworkProcess):

        Set a reasonable application name to be revealed in UI:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit):
        (WebKit::NetworkProcess::platformInitialize):


2012-10-12  Ada Chan  <adachan@apple.com>

        Add WKPage API to get whether the main frame is pinned to the top or bottom edge
        https://bugs.webkit.org/show_bug.cgi?id=99110

        Reviewed by Beth Dakin.

        This is very similar to r79025 where we add support to do this for the left and right sides.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageIsPinnedToTopSide):
        (WKPageIsPinnedToBottomSide):
        * UIProcess/API/C/WKPage.h:
        Add new API calls.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::processDidCrash):
        (WebKit::WebPageProxy::didChangeScrollOffsetPinningForMainFrame):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isPinnedToTopSide):
        (WebKit::WebPageProxy::isPinnedToBottomSide):
        Declare new data members for keeping track of the pinned states for
        top and bottom sides. Initialize, reset, and update these states
        at appropriate times. Implement getters for these states.

        * UIProcess/WebPageProxy.messages.in:
        Change the DidChangeScrollOffsetPinningForMainFrame message to take
        the pinned states for top and bottom sides.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::didChangeScrollOffsetForMainFrame):
        * WebProcess/WebPage/WebPage.h:
        Cache the pinned states for top and bottom sides. Only notify the
        UI process if the states have changed.

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

        Stop using deprecatedSend inside ConnectionMac.cpp
        https://bugs.webkit.org/show_bug.cgi?id=99192

        Reviewed by Andreas Kling.

        The messages that we send are so simple that we can just use sendMessage.

        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):

2012-10-12  Brady Eidson  <beidson@apple.com>

        Add a basic NetworkProcess.app to the WebKit2 build
        https://bugs.webkit.org/show_bug.cgi?id=98543

        Reviewed by Sam Weinig.

        This change sets up the Mac build to include a NetworkProcess.app.
        It also launches this app when the first WebProcess is created.
        It then quits this app when the UIProcess terminates.

        The app, it does nothing.
                             -McBain

        Pure project file/build system stuff:
        * Configurations/NetworkProcess.xcconfig: Added.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebKit2Prefix.h:

        Basic UIProcess side of things:
        * UIProcess/Network/NetworkProcessProxy.cpp: Added.
        (WebKit):
        (WebKit::NetworkProcessProxy::create):
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::~NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::didReceiveMessage):
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::didReceiveInvalidMessage):
        (WebKit::NetworkProcessProxy::syncMessageSendTimedOut):
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/Network/NetworkProcessProxy.h: Added.
        (WebKit):
        (NetworkProcessProxy):

        Basic NetworkProcess side of things:
        * NetworkProcess/Info.plist: Added.
        * NetworkProcess/NetworkProcess.cpp: Added.
        (WebKit):
        (WebKit::NetworkProcess::shared):
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::~NetworkProcess):
        (WebKit::NetworkProcess::initialize):
        (WebKit::NetworkProcess::shouldTerminate):
        (WebKit::NetworkProcess::didReceiveMessage):
        (WebKit::NetworkProcess::didClose):
        (WebKit::NetworkProcess::didReceiveInvalidMessage):
        (WebKit::NetworkProcess::syncMessageSendTimedOut):
        * NetworkProcess/NetworkProcess.h: Added.
        (WebCore):
        (WebKit):
        (NetworkProcess):

        Add the main method for the NetworkProcess itself:
        * WebProcess/WebKitMain.cpp:
        (WebKitMain):
        * NetworkProcess/NetworkProcessMain.h: Added.
        (WebKit):
        * NetworkProcess/mac/NetworkProcessMainMac.mm: Added.
        (WebKit):
        (WebKit::NetworkProcessMain):

        Teach ProcessLauncher about the new app type:
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::processTypeAsString):
        (WebKit::ProcessLauncher::getProcessTypeFromString):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::createProcess):

        Launch the NetworkProcess when we launch the first WebProcess:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureNetworkProcess):
        * UIProcess/WebContext.h:
        (WebContext):

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

        Unreviewed, rolling out r131189.
        http://trac.webkit.org/changeset/131189
        https://bugs.webkit.org/show_bug.cgi?id=99187

        Made inspector http tests crash on WK2. (Requested by rakuco
        on #webkit).

        * PlatformEfl.cmake:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):

2012-10-12  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Share resources installed for inspector
        https://bugs.webkit.org/show_bug.cgi?id=98991

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake: Removed build script which install resources to share.
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL): Modified not to use makeString.
        (WebKit::WebInspectorProxy::inspectorBaseURL): Changed resource path.

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

        Unreviewed, rolling out r131160.
        http://trac.webkit.org/changeset/131160
        https://bugs.webkit.org/show_bug.cgi?id=99163

        "It should not be landed without it's follow-up because it
        break pixal and ref tests without it." (Requested by kbalazs
        on #webkit).

        * Shared/API/c/qt/WKImageQt.cpp:
        (WKImageCreateQImage):
        * Shared/API/c/qt/WKImageQt.h:

2012-10-12  Balazs Kelemen  <kbalazs@webkit.org>

        [WK2] Serialization of Resource[Request,Response,Error] should be shared across ports
        https://bugs.webkit.org/show_bug.cgi?id=90142

        Unreviewed buildfix 2.

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::encodePlatformData):
        (CoreIPC::::decodePlatformData):

2012-10-12  Balazs Kelemen  <kbalazs@webkit.org>

        [WK2] Serialization of Resource[Request,Response,Error] should be shared across ports
        https://bugs.webkit.org/show_bug.cgi?id=90142

        Unreviewed buildfix.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::decode):

2012-10-12  Balazs Kelemen  <kbalazs@webkit.org>

        [WK2] Serialization of Resource[Request,Response,Error] should be shared across ports
        https://bugs.webkit.org/show_bug.cgi?id=90142

        Reviewed by Simon Hausmann.

        Share common serialization code across Qt and soup ports.
        All of these ports serialize the WebCore representation
        of these types.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC):
        (CoreIPC::::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::::encodePlatformData):
        (CoreIPC::::decodePlatformData):
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        (CoreIPC::::encodePlatformData):
        (CoreIPC::::decodePlatformData):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::encodePlatformData):
        (CoreIPC::::decodePlatformData):
        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::::encodePlatformData):
        (CoreIPC::::decodePlatformData):

2012-10-12  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed, rolling out r130389.
        http://trac.webkit.org/changeset/130389
        https://bugs.webkit.org/show_bug.cgi?id=98048

        It broke chromium

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-10-12  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WTR] Do a forced repaint before generating pixel results
        https://bugs.webkit.org/show_bug.cgi?id=98654

        Reviewed by Jocelyn Turcotte.

        Added API to convert a QImage to a WKImage so we can
        pass it to cross-platform code.

        * Shared/API/c/qt/WKImageQt.cpp:
        (WKImageCreateFromQImage):
        * Shared/API/c/qt/WKImageQt.h:

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

        Unreviewed, rolling out r131121.
        http://trac.webkit.org/changeset/131121
        https://bugs.webkit.org/show_bug.cgi?id=99144

        It made all tests timeout on all WK2 platform (Requested by
        ossy on #webkit).

        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        (WebKit::InjectedBundle::postSynchronousMessage):

2012-10-11  Andy Estes  <aestes@apple.com>

        Add some basic methods and properties to the injected bundle Objective-C DOM API
        https://bugs.webkit.org/show_bug.cgi?id=99137

        Reviewed by Sam Weinig.

        Add methods and properties that allow for tree traversal, node creation/insertion,
        attribute modification, text node retrieval, and range creation.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm:
        (toDocument):
        (-[WKDOMDocument createElement:]):
        (-[WKDOMDocument createTextNode:]):
        (-[WKDOMDocument body]):
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.mm:
        (-[WKDOMElement hasAttribute:]):
        (-[WKDOMElement getAttribute:]):
        (-[WKDOMElement setAttribute:value:]):
        (-[WKDOMElement tagName]):
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        (WebKit::WKDOMNodeClass):
        (WebKit::toWebCoreText):
        (WebKit::toWKDOMText):
        (WebKit::toWebCoreRange):
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:
        (-[WKDOMNode insertNode:before:]):
        (-[WKDOMNode appendChild:]):
        (-[WKDOMNode parentNode]):
        (-[WKDOMNode firstChild]):
        (-[WKDOMNode nextSibling]):
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange setStart:offset:]):
        (-[WKDOMRange setEnd:offset:]):
        (-[WKDOMRange collapse:]):
        (-[WKDOMRange selectNode:]):
        (-[WKDOMRange selectNodeContents:]):
        (-[WKDOMRange isCollapsed]):
        * WebProcess/InjectedBundle/API/mac/WKDOMText.h: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMText.mm: Added.
        (-[WKDOMText data]):

2012-10-11  Brady Eidson  <beidson@apple.com>

        Add a WKContext call to enable the NetworkProcess.
        https://bugs.webkit.org/show_bug.cgi?id=99140

        Reviewed by Sam Weinig.

        Add the SPI:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetUsesNetworkProcess):
        * UIProcess/API/C/WKContextPrivate.h:

        Add a member for the flag and the first call site that will be interested in the flag's value:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::setUsesNetworkProcess):
        (WebKit):
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::ensureNetworkProcess):
        * UIProcess/WebContext.h:
        (WebContext):

2012-10-11  Andy Estes  <aestes@apple.com>

        Fix the 32-bit Mac build after r131138.

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::load):

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

        Stop using Connection::deprecatedSend in WebConnection
        https://bugs.webkit.org/show_bug.cgi?id=99130

        Reviewed by Sam Weinig.

        Instead of using deprecatedSend, just encode the data using a separate ArgumentEncoder and pass it along as a DataReference.

        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        Add new files.

        * Platform/CoreIPC/MessageID.h:
        Add WebConnectionMessageClass.

        * Shared/WebConnection.cpp:
        (WebKit::WebConnection::WebConnection):
        Make WebConnection hold on to the CoreIPC::Connection.

        (WebKit::WebConnection::postMessage):
        Ask the subclasses to encode the body data, then send it.

        (WebKit::WebConnection::handleMessage):
        Ask the subclasses to decode the body data, then call didReceiveClient.

        (WebKit::WebConnection::invalidate):
        Null out m_connection.

        * Shared/WebConnection.h:
        (WebKit::WebConnection::connection):

        * Shared/WebConnection.messages.in: Added.

        * UIProcess/WebConnectionToWebProcess.cpp:
        (WebKit::WebConnectionToWebProcess::WebConnectionToWebProcess):
        Pass the connection to the WebConnection initializer.

        (WebKit::WebConnectionToWebProcess::encodeMessageBody):
        (WebKit::WebConnectionToWebProcess::decodeMessageBody):
        Encode and decode the message body.

        (WebKit::WebConnectionToWebProcess::didReceiveMessage):
        Handle WebConnection messages.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

        * WebProcess/WebConnectionToUIProcess.cpp:
        (WebKit::WebConnectionToUIProcess::WebConnectionToUIProcess):
        Pass the connection to the WebConnection initializer.

        (WebKit::WebConnectionToUIProcess::encodeMessageBody):
        (WebKit::WebConnectionToUIProcess::decodeMessageBody):
        Encode and decode the message body.

        (WebKit::WebConnectionToUIProcess::didReceiveMessage):
        Handle WebConnection messages.

        * win/WebKit2.vcproj:
        Add new files.

2012-10-11  Andy Estes  <aestes@apple.com>

        Expose the main frame's document to injected bundles via the Objective-C API
        https://bugs.webkit.org/show_bug.cgi?id=99133

        Patch by Sam Weinig.

        Reviewed by Anders Carlsson.

        Allow a bundle to declare a principle class which will be instantiated
        by WebKit2 and passed an object to which WKBundleClient calls are
        forwarded and which can access the main frame's WKDOMDocument.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm: Instantiate
        the bundle's principle class forward WKBundleClient calls to it.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        Add a property called mainFrameDocument which returns a WKDOMDocument.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerInternal.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::load): Initialize the shared
        WKWebProcessPlugInController with the bundle's principle class.

2012-10-11  Sam Weinig  <sam@webkit.org>

        Add a helper function for initializing WebKit2 DOM objects
        https://bugs.webkit.org/show_bug.cgi?id=99128

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        (WebKit::WKDOMNodeClass):
        (WebKit::initWithImpl):
        (WebKit::toWKDOMNode):
        (WebKit::toWKDOMRange):
        (WebKit::toWKDOMType):
        Add toWKDOMType which implements the core object initialization and caching.

2012-10-11  Seokju Kwon  <seokju.kwon@samsung.com>

        [EFL][WK2] Add support for Inspector
        https://bugs.webkit.org/show_bug.cgi?id=98639

        Reviewed by Kenneth Rohde Christiansen.

        Support inspector on WebKit2/Efl and add APIs to show and close the inspector.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_inspector_show):
        (ewk_view_inspector_close):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):
        * UIProcess/WebInspectorProxy.h:
        (WebInspectorProxy):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::resizeInspectorWindow):
        (WebKit):
        (WebKit::destroyInspectorWindow):
        (WebKit::closeInspectorWindow):
        (WebKit::WebInspectorProxy::createInspectorWindow):
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (WebKit::WebInspectorProxy::platformOpen):

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

        Stop using deprecatedSend and deprecatedSendSync for sending messages to the UI process
        https://bugs.webkit.org/show_bug.cgi?id=99125

        Reviewed by Andreas Kling.

        Instead of using deprecatedSend, just encode the data using a separate ArgumentEncoder and pass it along as a DataReference.

        * UIProcess/WebContext.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::postMessage):
        (WebKit):
        (WebKit::WebProcessProxy::postSynchronousMessage):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        (WebKit::InjectedBundle::postSynchronousMessage):

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

        Stop using deprecatedSend for WebContext::postMessageToInjectedBundle
        https://bugs.webkit.org/show_bug.cgi?id=99123

        Reviewed by Andreas Kling.

        Instead of using deprecatedSend, just encode the data using a separate ArgumentEncoder and pass it along as a DataReference.

        * Platform/CoreIPC/MessageID.h:
        Remove MessageClassInjectedBundle.

        * Shared/CoreIPCSupport/InjectedBundleMessageKinds.h: Removed.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        Stop using deprecatedSend.

        (WebKit::WebContext::postMessageToInjectedBundle):
        Stop using deprecatedSend. Remove now invalid FIXMEs.

        * UIProcess/WebPageProxy.cpp:
        Remove include.

        * WebKit2.xcodeproj/project.pbxproj:
        Remove InjectedBundleMessageKinds.h.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        The injected bundle is no longer in charge of receiving IPC messages.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):
        Stop passing messages to the injected bundle.

        (WebKit::WebProcess::postInjectedBundleMessage):
        Decode the message and pass it to the injected bundle.

        * WebProcess/WebProcess.messages.in:
        Add PostInjectedBundleMessage.

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

        Stop using deprecatedSend for WebPageProxy::postMessageToInjectedBundle
        https://bugs.webkit.org/show_bug.cgi?id=99120

        Reviewed by Andreas Kling.

        Instead of using deprecatedSend, just encode the data using a separate ArgumentEncoder and pass it along as a DataReference.

        * Shared/CoreIPCSupport/InjectedBundleMessageKinds.h:
        Remove PostMessageToPage.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::postMessageToInjectedBundle):
        Stop using deprecatedSend.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::didReceiveMessage):
        Remove code to handle PostMessageToPage.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::postInjectedBundleMessage):
        Decode the APIObject and send it along to the injected bundle.

        * WebProcess/WebPage/WebPage.messages.in:
        Add PostInjectedBundleMessage message.

2012-10-11  Regina Chung  <heejin.r.chung@samsung.com>

        [EFL][WK2] WebProcess keeps on waiting for UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=97646

        Reviewed by Kenneth Rohde Christiansen.

        Set LayerTreeRenderer to active so UIProcess can send RenderNextFrame message to WebProcess
        after accelerated compositing(AC) mode is entered, so WebProcess can start flushing changes to UIProcess.

        * UIProcess/API/efl/EflViewportHandler.cpp: Added API for setting LayerTreeRenderer's active state.
        (WebKit::EflViewportHandler::setActive):
        (WebKit):
        * UIProcess/API/efl/EflViewportHandler.h:
        (EflViewportHandler):
        * UIProcess/API/efl/ewk_view.cpp: Sets LayerTreeRenderer's active status to true after entering AC mode.
        (ewk_view_accelerated_compositing_mode_enter):

2012-10-10  Brady Eidson  <beidson@apple.com>

        Switch ResourceLoader::resourceData() from SharedBuffer to ResourceBuffer
        https://bugs.webkit.org/show_bug.cgi?id=98976

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::finishedLoading):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::source):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getMainResourceDataOfFrame):

2012-10-11  Sam Weinig  <sam@webkit.org>

        Add missing WK_EXPORT for WKDOMTextIterator.

        Rubber-stamped by Brady Eidson.

        * WebProcess/InjectedBundle/API/mac/WKDOMTextIterator.h:

2012-10-11  Zeno Albisser  <zeno@webkit.org>

        [Qt] Implement GraphicsSurfaceToken to replace uint64_t as token type.
        https://bugs.webkit.org/show_bug.cgi?id=98501

        Replace the token type for GraphicsSurface with a new class GraphicsSurfaceToken.
        This is necessary in order to implement GraphicsSurface for Windows.
        Depending on the platform a GraphicsSurfaceToken might contain a
        WindowID (Linux/GLX), two IOSurfaceIDs (Mac) or in the future two HANDLEs (Windows).
        The simple uint64_t is not sufficient anymore, since a single HANDLE in windows
        can be 64bit already.

        Reviewed by Noam Rosenthal.

        * Shared/ShareableSurface.cpp:
        (WebKit::ShareableSurface::Handle::encode):
        (WebKit::ShareableSurface::Handle::decode):
        (WebKit::ShareableSurface::create):
        (WebKit::ShareableSurface::createHandle):
        * Shared/ShareableSurface.h:
        (WebKit::ShareableSurface::Handle::graphicsSurfaceToken):
        (Handle):
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC):
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/WebCoreArgumentCoders.h:
        (WebCore):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::updateTileForLayer):
        (WebKit::LayerTreeCoordinatorProxy::syncCanvas):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::syncCanvas):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::syncCanvas):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::syncCanvas):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-10-10  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Avoid unnecessary calls in PageViewportController
        https://bugs.webkit.org/show_bug.cgi?id=98886

        Reviewed by Jocelyn Turcotte.

        Remove leftover and unneeded update guards and visibility update
        notifications to avoid unnecessary update cycles between the
        controller an the client.
        Previously didRenderFrame triggered updates for no reason since
        animations on the page cause a lot of DidRenderFrame messages
        for which the viewport state does not change.

        * UIProcess/PageViewportController.cpp:
        (WebKit::ViewportUpdateDeferrer::~ViewportUpdateDeferrer):
        (WebKit::PageViewportController::didRenderFrame):
        * UIProcess/PageViewportController.h:
        (PageViewportController):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::setContentsScale):
        (WebKit::PageViewportControllerClientQt::didChangeViewportAttributes):
        (WebKit::PageViewportControllerClientQt::updateViewportController):
        * UIProcess/qt/PageViewportControllerClientQt.h:
        (PageViewportControllerClientQt):

2012-10-11  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] It should be possible to disable favicons in WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=98885

        Reviewed by Carlos Garcia Campos.

        Make support for favicons in WebKit2GTK+ disabled by default, and
        allow enabling it even after calling webkit_web_context_get_favicon_database(),
        by decoupling opening the IconDatabase, which will happen when
        setting the path for the database directory, from creating the
        instance of WebKitFaviconDatabase from WebKitWebContext.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (_WebKitWebContextPrivate): Renamed faviconDatabasePath to
        faviconDatabaseDirectory;
        (ensureFaviconDatabase): Makes sure there's an instance of
        WebKitFaviconDatabase created and associated to the context.
        (webkit_web_context_set_favicon_database_directory): Use the
        default path if NULL is passed, or the specified one, creating the
        database if needed and opening it by setting it's path. If the
        database is already open this method does nothing.
        (webkit_web_context_get_favicon_database_directory): Return the
        path or NULL if webkit_web_context_set_favicon_database_directory
        has not been called yet.
        (webkit_web_context_get_favicon_database): Return the instance of
        WebKitFaviconDatabase, or create it if it doesn't exist yet, but
        never set the path (would cause the icon database to be opened).

        * UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:
        (testNotInitialized): New test to check that a NOT_INITIALIZED
        error is got when using the database before setting its path.
        (testSetDirectory): Call set_favicon_database_directory() here
        instead of doing it in the constructor of FaviconDatabaseTest.
        (beforeAll): Add testNotInitialized() to the test suite.

2012-10-11  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Revisit setting API names and documentation
        https://bugs.webkit.org/show_bug.cgi?id=98793

        Reviewed by Kenneth Rohde Christiansen.

        Make setting API names to be consistent and revisit the documentation.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_frame_flattening_enabled_set):
        (ewk_settings_frame_flattening_enabled_get):
        (ewk_settings_dns_prefetching_enabled_set):
        (ewk_settings_dns_prefetching_enabled_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

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

        Disallow full screen mode keyboard access by default.
        https://bugs.webkit.org/show_bug.cgi?id=98971
        <rdar://problem/12474226>

        Reviewed by Sam Weinig.

        Only support full screen if keyboard access is not requested.

        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::supportsFullScreen):

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

        Unreviewed, rolling out r130972 and r130984.
        http://trac.webkit.org/changeset/130972
        http://trac.webkit.org/changeset/130984
        https://bugs.webkit.org/show_bug.cgi?id=98986

        Huge numbers of WK2 crashes (Requested by smfr on #webkit).

        * Platform/CoreIPC/Connection.h:
        (Connection):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::addMessageReceiver):
        (CoreIPC::MessageReceiverMap::clearAllMessageReceivers):
        (CoreIPC::MessageReceiverMap::knowsHowToHandleMessage):
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * UIProcess/WebConnectionToWebProcess.h:
        (WebConnectionToWebProcess):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::knowsHowToHandleMessage):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):

2012-10-10  Sam Weinig  <sam@webkit.org>

        Add more Objective-C WebKit2 DOM API skeletons.
        https://bugs.webkit.org/show_bug.cgi?id=98981

        Reviewed by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.mm:
        Update guards to actually do something. __CLANG__ is never defined, but __clang__ is.

        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        - Abstracts DOM object caching into the DOMCache class which can only be used as a singleton.
        - Adds WKDOMRange class extension to allow manipulating its internal pointer for caching purposes.
        - Add WKDOMRange conversion functions.

        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:
        Rename _node to _impl for consistency.

        * WebProcess/InjectedBundle/API/mac/WKDOMRange.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange _initWithImpl:WebCore::]):
        (-[WKDOMRange initWithDocument:]):
        (-[WKDOMRange dealloc]):
        (-[WKDOMRange startContainer]):
        (-[WKDOMRange startOffset]):
        (-[WKDOMRange endContainer]):
        (-[WKDOMRange endOffset]):
        (-[WKDOMRange text]):
        Added. Only offers base range functionality.

        * WebProcess/InjectedBundle/API/mac/WKDOMTextIterator.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMTextIterator.mm:
        (-[WKDOMTextIterator initWithRange:]):
        (-[WKDOMTextIterator advance]):
        (-[WKDOMTextIterator atEnd]):
        (-[WKDOMTextIterator currentRange]):
        (-[WKDOMTextIterator currentTextPointer]):
        (-[WKDOMTextIterator currentTextLength]):
        Added. Almost identical to WebTextIterator API in WebKit.

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

        Stop crashing left and right.

        * UIProcess/WebConnectionToWebProcess.h:
        (WebKit::WebConnectionToWebProcess::webProcessProxy):
        Add a getter.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fromConnection):
        The WebProcessProxy is not the Connection::Client, the WebConnectionToWebProcess is.

2012-10-10  Sam Weinig  <sam@webkit.org>

        Fix the GCC Mac build. Why are we still building with GCC again?

        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.mm:
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:

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

        [EFL][WK2] Add toolbar buttons to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=98883

        Reviewed by Kenneth Rohde Christiansen.

        Add "back,forward,list,changed" signal on the Ewk_View
        to notify the client when the view's back / forward
        list has changed. This is useful for the UI to update
        its back / forward buttons disabled state.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_back_forward_list_changed):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didChangeBackForwardList):
        * UIProcess/API/efl/ewk_view_private.h:

2012-10-10  Jon Lee  <jonlee@apple.com>

        [WK2] Activate plugins when user clicks on snapshot
        https://bugs.webkit.org/show_bug.cgi?id=98328
        <rdar://problem/12426681>

        Reviewed by Brady Eidson.

        Implement the recreation of the plugin.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::recreateAndInitialize): We can run into a situation where the user
        decided to run the plugin before the snapshot was ready to be taken. In this case, the
        plugin member variable is non-null, and the timer is still active. Turn off the timer, and
        destroy that instance of the plugin. We set the plugin to the instance provided in the
        first parameter to this function, and reset the member variables so that the PluginView is
        in a state similar to when it was first created. We also immediately initialize the plugin,
        which may happen synchronously or asynchronously.

        * WebProcess/Plugins/PluginView.h:
        (WebKit::PluginView::initialParameters): Expose the initial parameters. Used to recreate
        the plugin.
        (WebKit::PluginView::pluginElement): Expose the element associated with the widget. Used to
        recreate the plugin.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::recreatePlugin): Create a new Plugin instance using the same
        parameters used to create the plugin for snapshotting. Forward that instance to the widget.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient): Implement recreatePlugin().

2012-10-10  Sam Weinig  <sam@webkit.org>

        Fix 32-bit build.

        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.mm:
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:

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

        WebContext should be a MessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=98958

        Reviewed by Sam Weinig.

        Make WebContext be a MessageReceiver that lives in its own map. This allows us to get rid of the
        knowsHowToHandleMessage functions on MessageReceiverMap and WebContext.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::client):
        (Connection):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::addMessageReceiver):
        (CoreIPC::MessageReceiverMap::invalidate):
        (CoreIPC::MessageReceiverMap::knowsHowToHandleMessage):
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::dispatchMessage):
        (WebKit::WebContext::dispatchSyncMessage):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fromConnection):
        (WebKit):
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):

2012-10-10  Sam Weinig  <sam@webkit.org>

        Add skeleton of a WebKit2 ObjC DOM SPI (not intended to be the full DOM)
        https://bugs.webkit.org/show_bug.cgi?id=98955

        Reviewed by Anders Carlsson.

        Add a skeleton DOM implementation only exposing Node, Element and Document
        for now. It is currently only available in 64-bit as it relies on the non-fragile
        ABI for now.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.h: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.mm: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.h: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm: Added.

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

        [WebKit2] Create an API for adding and removing user stylesheets from a page group
        https://bugs.webkit.org/show_bug.cgi?id=98432

        Reviewed by Sam Weinig.

        This patch adds the following API to WKBrowsingContextGroup:

        - (void)addUserStyleSheet:(NSString *)source baseURL:(NSURL *)baseURL whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist mainFrameOnly:(BOOL)mainFrameOnly;
        - (void)removeAllUserStyleSheets;

        Sheets added via this API are sent to all processes that contain a page
        in the given page group. Sheets are also cached in the UI process in a
        new object called UserContentContainer, which is a property of each
        group's WebPageGroupData and is sent to new web processes during page
        initialization.

        This is less than ideal, since new pages added to a pre-existing
        process / page group combination will send redundant user stylesheet
        strings over the wire. To avoid this we'd have to keep track track of
        the groups that currently exist in each process and only send user
        content during page creation if it is the first time a process has seen
        the page's group. I decided to not add this complexity for the time
        being, but we might need to consider it if we find that the current
        approach impacts performance for clients that heavily utilize user
        content.

        * Shared/API/c/WKArray.cpp:
        (WKArrayCreateAdoptingValues): Add a WKArray creation function that
        adopts the incoming WKTypeRefs rather than refing them.
        * Shared/API/c/WKArray.h:
        * Shared/API/c/WKBase.h: Move WKUserContentInjectedFrames out of
        WKBundlePrivate.h so it can be used in WKPageGroup, too.
        * Shared/API/c/cf/WKURLCF.cpp:
        (WKURLCreateWithCFURL): Return 0 for null CFURLRefs instead of crashing
        inside CFURLGetString().
        * Shared/ImmutableArray.cpp:
        (WebKit::ImmutableArray::ImmutableArray): Add a tag to differentiate
        between the adopting and refing ctors.
        * Shared/ImmutableArray.h:
        (WebKit::ImmutableArray::create): Call the refing ctor.
        (WebKit::ImmutableArray::adopt): Call the adopting ctor.
        * Shared/UserContentContainer.cpp: Added.
        (UserContentItemMessageEncoder): Create a UserMessageEncoder for
        serializing UserContentContainer::Item's APIObjects.
        (WebKit::UserContentItemMessageEncoder::UserContentItemMessageEncoder):
        (WebKit::UserContentItemMessageEncoder::encode):
        (UserContentItemMessageDecoder): Create a UserMessageEncoder for
        deserializing UserContentContainer::Item's APIObjects.
        (WebKit::UserContentItemMessageDecoder::UserContentItemMessageDecoder):
        (WebKit::UserContentItemMessageDecoder::decode):
        (WebKit::UserContentContainer::Item::Item):
        (WebKit::encodeStringArray): Add a helper function for encoding
        ImmutableArrays of WebStrings.
        (WebKit::UserContentContainer::Item::encode): Encode the item's
        properties using UserContentItemMessageEncoder.
        (WebKit::decodeStringArray): Add a helper function for decoding
        ImmutableArrays of WebStrings.
        (WebKit::UserContentContainer::Item::decode): Decode the item's
        properties using UserContentItemMessageDecoder.
        (WebKit::toStringVector): Add a helper function for converting an
        ImmutableArray of WebStrings to a Vector of Strings.
        (WebKit::UserContentContainer::Item::whitelist): Use toStringVector().
        (WebKit::UserContentContainer::Item::blacklist): Ditto.
        (WebKit::UserContentContainer::encode): Encode the Vector of UserContentContainer::Items.
        (WebKit::UserContentContainer::decode): Decode the Vector of UserContentContainer::Items.
        * Shared/UserContentContainer.h: Added.
        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::encode): Include userStyleSheets when encoding.
        (WebKit::WebPageGroupData::decode): Include userStyleSheets when decoding.
        * Shared/WebPageGroupData.h:
        (WebPageGroupData): Add a UserContentContainer called userStyleSheets
        to WebPageGroupData.
        * UIProcess/API/C/WKPageGroup.cpp: Add the C SPI version of the Objective-C API.
        (WKPageGroupAddUserStyleSheet):
        (WKPageGroupRemoveAllUserStyleSheets):
        * UIProcess/API/C/WKPageGroup.h:
        * UIProcess/API/mac/WKBrowsingContextGroup.h: Add the Objective-C API.
        * UIProcess/API/mac/WKBrowsingContextGroup.mm:
        (createWKArray): Add a helper function that converts an NSArray of NSStrings to a WKArray of WKStrings.
        (-[WKBrowsingContextGroup addUserStyleSheet:baseURL:whitelist:blacklist:mainFrameOnly:]):
        Implement the Objective-C API in terms of the C SPI.
        (-[WKBrowsingContextGroup removeAllUserStyleSheets]): Ditto.
        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::addUserStyleSheet): Add the new sheet to the
        group's WebPageGroupData, which ensures that the group's sheets are
        sent to new web processes.
        (WebKit::WebPageGroup::removeAllUserStyleSheets): Ditto for removal.
        * UIProcess/WebPageGroup.h:
        (WebKit::WebPageGroup::sendToAllProcessesInGroup): Add a helper message
        that sends a message to all processes that have a page in the current
        group. This is used to add new user sheets to already-initialized page
        groups in the UI processes.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Moved
        WKUserContentInjectedFrames from here to WKBase.h.
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::WebPageGroupProxy): Add each sheet in the
        WebPageGroupData to WebCore's page group.
        (WebKit::WebPageGroupProxy::addUserStyleSheet): Add the sheet received
        from the UI process to WebCore's page group.
        (WebKit::WebPageGroupProxy::removeAllUserStyleSheets): Remove all
        sheets from WebCore's page group.
        * WebProcess/WebPage/WebPageGroupProxy.h:
        * WebProcess/WebPage/WebPageGroupProxy.messages.in: Define
        AddUserStyleSheet and RemoveAllUserStyleSheets, two messages sent from
        the UI process to a web process's WebPageGroupProxy.

2012-10-10  Sam Weinig  <sam@webkit.org>

        Make all of the WebContext sub objects MessageReceivers
        https://bugs.webkit.org/show_bug.cgi?id=98661

        Reviewed by Anders Carlsson.

        Start work towards simplified message dispatch.

        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::clearAllMessageReceivers):
        (CoreIPC::MessageReceiverMap::knowsHowToHandleMessage):
        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        Add additional helper methods.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::addMessageReceiver):
        (WebKit::WebContext::knowsHowToHandleMessage):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        Add a MessageReceiverMap that chains to the main on in WebProcessProxy. Simplifies
        didReceiveMessage and didReceiveSyncMessage.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        Use the new WebContext methods to simplify dispatch.

        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::WebNotificationManagerProxy):
        * UIProcess/Notifications/WebNotificationManagerProxy.h:
        (WebNotificationManagerProxy):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::WebApplicationCacheManagerProxy):
        * UIProcess/WebApplicationCacheManagerProxy.h:
        (WebApplicationCacheManagerProxy):
        * UIProcess/WebBatteryManagerProxy.cpp:
        (WebKit::WebBatteryManagerProxy::WebBatteryManagerProxy):
        * UIProcess/WebBatteryManagerProxy.h:
        (WebBatteryManagerProxy):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::WebCookieManagerProxy):
        * UIProcess/WebCookieManagerProxy.h:
        (WebCookieManagerProxy):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::WebDatabaseManagerProxy):
        (WebKit::WebDatabaseManagerProxy::didReceiveMessage):
        (WebKit):
        * UIProcess/WebDatabaseManagerProxy.h:
        (WebDatabaseManagerProxy):
        * UIProcess/WebGeolocationManagerProxy.cpp:
        (WebKit::WebGeolocationManagerProxy::WebGeolocationManagerProxy):
        * UIProcess/WebGeolocationManagerProxy.h:
        (WebGeolocationManagerProxy):
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::WebIconDatabase):
        * UIProcess/WebIconDatabase.h:
        (WebIconDatabase):
        (WebKit::WebIconDatabase::type):
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::WebKeyValueStorageManagerProxy):
        * UIProcess/WebKeyValueStorageManagerProxy.h:
        (WebKeyValueStorageManagerProxy):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::WebMediaCacheManagerProxy):
        * UIProcess/WebMediaCacheManagerProxy.h:
        (WebMediaCacheManagerProxy):
        * UIProcess/WebNetworkInfoManagerProxy.cpp:
        (WebKit::WebNetworkInfoManagerProxy::WebNetworkInfoManagerProxy):
        (WebKit::WebNetworkInfoManagerProxy::didReceiveSyncMessage):
        * UIProcess/WebNetworkInfoManagerProxy.h:
        (WebNetworkInfoManagerProxy):
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::WebResourceCacheManagerProxy):
        (WebKit::WebResourceCacheManagerProxy::didReceiveMessage):
        (WebKit):
        * UIProcess/WebResourceCacheManagerProxy.h:
        (WebResourceCacheManagerProxy):
        * UIProcess/WebVibrationProxy.cpp:
        (WebKit::WebVibrationProxy::WebVibrationProxy):
        * UIProcess/WebVibrationProxy.h:
        (WebVibrationProxy):
        * UIProcess/soup/WebSoupRequestManagerProxy.cpp:
        (WebKit::WebSoupRequestManagerProxy::WebSoupRequestManagerProxy):
        (WebKit::WebSoupRequestManagerProxy::didReceiveMessage):
        (WebKit):
        * UIProcess/soup/WebSoupRequestManagerProxy.h:
        (WebSoupRequestManagerProxy):
        * WebProcess/Authentication/AuthenticationManager.h:
        (AuthenticationManager):
        * WebProcess/Geolocation/WebGeolocationManager.h:
        (WebGeolocationManager):
        Make all the WebContext sub-objects MessageReceivers to simplify dispatch.

2012-10-10  Simon Fraser  <simon.fraser@apple.com>

        Add the mangled symbol name for Frame::layerTreeAsText() to the confusingly named
        Windows export file.

        * win/WebKit2.def:

2012-10-10  Simon Fraser  <simon.fraser@apple.com>

        Store a visible rect in GraphicsLayers, and optionally dump it in layerTreeAsText
        https://bugs.webkit.org/show_bug.cgi?id=98839

        Reviewed by Sam Weinig.

        Add a flag to layerTreeAsText() so that tests can optionally include this visible rect in
        layer tree dumps. This output will be platform-specific, so we don't want to do it unconditionally.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::layerTreeAsText):

2012-10-10  Shinya Kawanaka  <shinyak@chromium.org>

        Needs internal API to return distributed nodes for InsertionPoint
        https://bugs.webkit.org/show_bug.cgi?id=98868

        Reviewed by Hajime Morita.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-10-10  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt][WK2] REGRESSION(r130879): It made fast/events/touch/* tests crash
        https://bugs.webkit.org/show_bug.cgi?id=98888

        Reviewed by Kenneth Rohde Christiansen.

        Add null-checks in the gesture recognizers to allow them working without a PageViewportController.
        The pinch and pan gesture recognizers aren't used in that case yet, but they could eventually
        be used to send pinch and pan gesture events to the web process. They are currently kept active
        because we need the tap gesture recognizer and its logic is bound to those other recognizers.

        * UIProcess/qt/QtPanGestureRecognizer.cpp:
        (WebKit::QtPanGestureRecognizer::update):
        (WebKit::QtPanGestureRecognizer::finish):
        (WebKit::QtPanGestureRecognizer::cancel):
        * UIProcess/qt/QtPinchGestureRecognizer.cpp:
        (WebKit::QtPinchGestureRecognizer::update):
        (WebKit::QtPinchGestureRecognizer::finish):
        (WebKit::QtPinchGestureRecognizer::cancel):

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

        [GTK] Test /webkit2/WebKitWebView/history-cache asserts in debug bot
        https://bugs.webkit.org/show_bug.cgi?id=98731

        Reviewed by Martin Robinson.

        The problem is in the test itself that is using
        SingleResourceLoadTest class to load a multiresource document.

        * UIProcess/API/gtk/tests/TestResources.cpp:
        (testWebViewResourcesHistoryCache): Load only single resource
        documents and check also that the main resource given is the
        expected one.
        (serverCallback): Add another single resource document.

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

        [WK2][SOUP] ResourceError.isCancellation() is not carried over IPC
        https://bugs.webkit.org/show_bug.cgi?id=98882

        Reviewed by Kenneth Rohde Christiansen.

        Properly serialize / deserialize ResourceError.isCancellation
        boolean so that it can be used in UIProcess.

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):

2012-10-10  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Add APIs to get/set the DNS prefetching
        https://bugs.webkit.org/show_bug.cgi?id=98790

        Reviewed by Laszlo Gombos.

        Add setting APIs for DNS prefetching and a unit test.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_DNS_prefetching_enabled_set):
        (ewk_settings_DNS_prefetching_enabled_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

2012-10-09  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt][WK2] REGRESSION(r130629): It made touchadjustment/focusout-on-touch.html fai1
        https://bugs.webkit.org/show_bug.cgi?id=98642

        Reviewed by Kenneth Rohde Christiansen.

        There was an early return that would prevent gesture recognition if no PageViewportController
        has been set on QtWebPageEventHandler. The gesture recognizer are also used to send
        GestureEvents to WebCore which this layout test is using.

        Make sure that the gesture recognition is done even when no PageViewportController is present.

        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::handleInputEvent):
        (WebKit::QtWebPageEventHandler::doneWithTouchEvent):

2012-10-10  Zeno Albisser  <zeno@webkit.org>

        [Qt] ProcessLauncherQt should use QStringLiteral for serviceName.
        https://bugs.webkit.org/show_bug.cgi?id=98398

        QString(const char*) is deprecated, we should use QStringLiteral instead.

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncher::launchProcess):

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

        [EFL][WK2] Add History callbacks API
        https://bugs.webkit.org/show_bug.cgi?id=98594

        Reviewed by Kenneth Rohde Christiansen.

        Added History callbacks API to Ewk Context. Added unit tests.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context):
        (_Ewk_Context::_Ewk_Context):
        (ewk_context_history_callbacks_set): New public function which lets the client to set History callbacks.
        (ewk_context_history_client_get):
        (ewk_context_add_visited_link): New public function to mark a URL as visited link.
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_history_client.cpp: Added.
        (getEwkHistoryDelegate):
        (didNavigateWithNavigationData):
        (didPerformClientRedirect):
        (didPerformServerRedirect):
        (didUpdateHistoryTitle):
        (populateVisitedLinks):
        (ewk_context_history_client_attach):
        * UIProcess/API/efl/ewk_context_history_client_private.h: Added.
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/ewk_navigation_data.cpp: Added.
        (_Ewk_Navigation_Data):
        (_Ewk_Navigation_Data::_Ewk_Navigation_Data):
        (_Ewk_Navigation_Data::~_Ewk_Navigation_Data):
        (ewk_navigation_data_ref):
        (ewk_navigation_data_unref):
        (ewk_navigation_data_title_get):
        (ewk_navigation_data_original_request_get):
        (ewk_navigation_data_url_get):
        (ewk_navigation_data_new):
        * UIProcess/API/efl/ewk_navigation_data.h: Added.
        * UIProcess/API/efl/ewk_navigation_data_private.h: Added.
        * UIProcess/API/efl/ewk_view.cpp:
        (addToPageViewMap):
        (removeFromPageViewMap):
        (_ewk_view_smart_del):
        (_ewk_view_initialize):
        (ewk_view_from_page_get):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/tests/test_ewk2_context_history_delegate.cpp: Added.
        (httpServer):
        (navigateWithNavigationData):
        (performClientRedirect):
        (performServerRedirect):
        (updateHistoryTitle):
        (populateVisitedLinks):
        (onLoadFinishedForRedirection):
        (serverCallbackRedirection):
        (TEST_F):

2012-10-09  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] Change parameter and return type of loadUrlSync().
        https://bugs.webkit.org/show_bug.cgi?id=97920

        Reviewed by Gyuyoung Kim.

        loadUrlSync() uses waitUntilLoadFinished() internally, and it has
        a parameter and return value for timeout.
        To set and check timeout, loadUrlSync() should have those.

        A parameter for timeout interval is added to loadUrlSync() and it
        returns the result of waitUntilLoadFinished() for checking timeout.

        And I added codes to check the result of all the LoadUrlSync()
        function calls with ASSERT_TRUE() macro.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::loadUrlSync):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        (EWK2UnitTestBase):
        * UIProcess/API/efl/tests/test_ewk2_back_forward_list.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_intents.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2012-10-09  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] Move timeout callback to the CallbackDataTimer class.
        https://bugs.webkit.org/show_bug.cgi?id=97861

        Reviewed by Gyuyoung Kim.

        Timeout callbacks for waitUntil{LoadFinished,TitleChanged,URIChanged}
        can be moved to the CallbackDataTimer class.

        Moved the callback implementation to the CallbackDataTimer class.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::CallbackDataTimer::CallbackDataTimer):
        (CallbackDataTimer):
        (EWK2UnitTest::CallbackDataTimer::timeOutCallback):
        (EWK2UnitTest::CallbackDataExpectedValue::CallbackDataExpectedValue):
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilLoadFinished):
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilTitleChangedTo):
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilURIChangedTo):

2012-10-09  Jian Li  <jianli@chromium.org>

        Update the CSS property used to support draggable regions.
        https://bugs.webkit.org/show_bug.cgi?id=97156

        Reviewed by Adam Barth.

        The CSS property to support draggable regions, guarded under
        WIDGET_REGION is now disabled from Mac WebKit, in order not to cause
        confusion with DASHBOARD_SUPPORT feature.

        Also update the code to use the new name annotatedRegions to work for
        both features.

        * Configurations/FeatureDefines.xcconfig: Disable WIDGET_REGION feature.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp: Rename dashboardRegions to annotatedRegions.
        (WebKit::WebChromeClient::annotatedRegionsChanged):
        * WebProcess/WebCoreSupport/WebChromeClient.h: Rename dashboardRegions to annotatedRegions.
        (WebChromeClient):

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

        Unreviewed, rolling out r130811 and r130821.
        http://trac.webkit.org/changeset/130811
        http://trac.webkit.org/changeset/130821
        https://bugs.webkit.org/show_bug.cgi?id=98831

        Broke date-suggestion-picker-appearance-with-scroll-bar.html
        (Requested by abarth|gardening on #webkit).

        * Shared/WebRenderObject.cpp:
        (WebKit::WebRenderObject::WebRenderObject):
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::screenRectOfContents):

2012-10-09  Jon Lee  <jonlee@apple.com>

        [WK2] Have plugins render offscreen to capture snapshot
        https://bugs.webkit.org/show_bug.cgi?id=98326
        <rdar://problem/12426658>

        Reviewed by Simon Fraser.

        Keep the plugin rendering without compositing to easily grab the snapshot.

        PluginView now has two variables referring to snapshots, but are unrelated. The timer
        is used to capture a snapshot that acts as a poster for a plugin. The ShareableBitmap
        variable m_snapshot is used whenever the plugin paints in software, to avoid side effects
        should the plugin run JS during painting.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit): Add a named constant for the time delay before a snapshot is taken.
        (WebKit::PluginView::PluginView): Initialize a 3-second timer to get the snapshot.
        (WebKit::PluginView::~PluginView): Refactor part of the destructor code out into
        destroyPluginAndReset() for reuse.
        (WebKit::PluginView::destroyPluginAndReset): Contains part of the destructor code.
        In addition to destroying the plugin, the destructor cancels pending loads and streams.
        (WebKit::PluginView::didInitializePlugin): If the plugin is in a state where it needs
        to generate or display a poster, don't setup the compositing layer and start the timer.
        (WebKit::PluginView::paint): Avoid painting if the plugin is not running.
        (WebKit::PluginView::invalidateRect): Avoid painting if the plugin is not running.
        (WebKit::PluginView::isAcceleratedCompositingEnabled): Don't enable accelerated compositing
        until the plugin is running.
        (WebKit::PluginView::pluginSnapshotTimerFired): When the timer fires, get a snapshot, generate
        an Image that WebCore can render, and destroy the plugin.

        Rename m_snapshot to m_transientPaintingSnapshot.
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::paint):
        (WebKit::PluginView::notifyWidget):
        (WebKit::PluginView::pluginSnapshotTimerFired):

2012-10-09  Rik Cabanier  <cabanier@adobe.com>

        Add missing compile flag for compositing
        https://bugs.webkit.org/show_bug.cgi?id=98681

        Reviewed by Dirk Schulze.

        This flag is needed in case there is a difference in API
        when compositing is enabled

        * Configurations/FeatureDefines.xcconfig:

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

        Unreviewed, rolling out r130680.
        http://trac.webkit.org/changeset/130680
        https://bugs.webkit.org/show_bug.cgi?id=98720

        this patch has a typo so was ineffective (Requested by
        cabanier on #webkit).

        * Configurations/FeatureDefines.xcconfig:

2012-10-09  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][WK2] Inform the PageProxy about visibility changes when the view is shown/hidden.
        https://bugs.webkit.org/show_bug.cgi?id=98757

        Reviewed by Kenneth Rohde Christiansen.

        SVN r130720 exposed a bug in our code: the PageProxy is not
        notified when one calls evas_object_show() or evas_object_hide()
        on the view, so the visibility it has when the WebPageProxy is
        constructed remained set forever.

        This made the ewk_context_vibration_client_callbacks_set unit test
        start running forever, because WebPageProxy's constructor now sets
        the page's visibility to hidden by the default for us, since it is
        called from within ewk_view_smart_add() and before
        evas_object_show().

        We now listen to the EVAS_CALLBACK_SHOW and EVAS_CALLBACK_HIDE
        callbacks and update the WebPageProxy accordingly. Note that we
        could not do this from the smart_show and smart_hide functions we
        already had, since they are called before the object's actual
        visibility is updated.

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_on_show):
        (_ewk_view_on_hide):
        (_ewk_view_smart_add):

2012-10-09  Simon Pena  <spena@igalia.com>

        [GTK] Add support for running JavaScript from GResources
        https://bugs.webkit.org/show_bug.cgi?id=98488

        Reviewed by Carlos Garcia Campos.

        GResources allow embedding certain resources, frequently used, in a "bundle"
        which can be kept separated or stored in the binary. This patch adds
        support for running JavaScript from GResources.

        For this, methods run_javascript_from_gresource and
        run_javascript_from_gresource_finish are added, which load the resource
        asynchronously and, when it is ready, run the JavaScript.

        * UIProcess/API/gtk/WebKitWebView.cpp: Include the new methods.
        (resourcesStreamReadCallback):
        (webkit_web_view_run_javascript_from_gresource):
        (webkit_web_view_run_javascript_from_gresource_finish):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Include the new
        methods in the documentation.
        * UIProcess/API/gtk/tests/GNUmakefile.am: Add the test resources to the
        build infrastructure.
        * UIProcess/API/gtk/tests/TestMain.cpp: Register the resources in the tests,
        so that they can be accessed in all of them.
        (register_gresource):
        (main):
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp: Test the
        run_javascript_from_gresource method.
        (testWebViewRunJavaScript):
        * UIProcess/API/gtk/tests/WebViewTest.cpp: Add a method for testing the
        new run_javascript_from_gresource method.
        (runJavaScriptFromGResourceReadyCallback):
        (WebViewTest::runJavaScriptFromGResourceAndWaitUntilFinished):
        * UIProcess/API/gtk/tests/WebViewTest.h:
        * UIProcess/API/gtk/tests/resources/webkit2gtk-tests.gresource.xml: Added.
        Resource bundle containing the resources.
        * UIProcess/API/gtk/tests/resources/webkit2gtk-tests.test.js: Added.
        Example JavaScript file to test the GResources support.


2012-10-08  Kiran Muppala  <cmuppala@apple.com>

        Throttle DOM timers on hidden pages.
        https://bugs.webkit.org/show_bug.cgi?id=98474

        Reviewed by Maciej Stachowiak.

        Add HIDDEN_PAGE_DOM_TIMER_THROTTLING feature define.  Use existing code of
        PAGE_VISIBILITY_API to detect changes to page visibility state.

        * Configurations/FeatureDefines.xcconfig:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Check visibility state on construction.
        (WebKit::WebPageProxy::initializeWebPage):
        Send initial visibility state message if HIDDEN_PAGE_DOM_TIMER_THROTTLING
        is enabled or if PAGE_VISIBILITY_API is enabled.
        (WebKit::WebPageProxy::viewStateDidChange):
        When PAGE_VISIBILITY_API is not enabled, compare new visibility against
        WebPageProxy::m_isVisible, to minimize number of messages sent.
        Remove unnecessary second call to PageClient::isViewVisible for updating
        visibility state.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPageVisibilityState):
        WebKitTestRunner uses this method to implement testRunner.setPageVisibility(),
        hence enable it for testing hidden page timer throttling as well.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit):
        (WebKit::WebPage::setVisibilityState):
        Ensure Page::setVisibilityState is called either if PAGE_VISIBILITY_API is
        enabled or if HIDDEN_PAGE_DOM_TIMER_THROTTLING is enabled.

        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:

2012-10-08  Simon Fraser  <simon.fraser@apple.com>

        Try to fix Windows build by exporting Frame::layerTreeAsText().

        * win/WebKit2.def:

2012-10-08  Rik Cabanier  <cabanier@adobe.com>

        Add missing compile flag for compositing
        https://bugs.webkit.org/show_bug.cgi?id=98681

        Reviewed by Dirk Schulze.

        This flag is needed in case there is a difference in API
        when compositing is enabled

        * Configurations/FeatureDefines.xcconfig:

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

        [EFL][WK2] EWK2UnitTestBase.ewk_cookie_manager_accept_policy unit test is failing
        https://bugs.webkit.org/show_bug.cgi?id=98663

        Reviewed by Laszlo Gombos.

        EWK2UnitTestBase.ewk_cookie_manager_accept_policy unit test was
        failing because the elements of a list were checked in a given
        order but the list was not sorted beforehand.

        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (sortHostNames):
        (TEST_F):

2012-10-08  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Avoid useless converting to WKPage
        https://bugs.webkit.org/show_bug.cgi?id=98516

        Reviewed by Eric Seidel.

        Use priv->pageProxy->findString() and priv->pageProxy->hideFindUI()
        to avoid useless converting to WK.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_text_find):
        (ewk_view_text_find_highlight_clear):

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

        [WK2][WTR] WebKitTestRunner needs testRunner.dispatchPendingLoadRequests
        https://bugs.webkit.org/show_bug.cgi?id=98638

        Reviewed by Eric Seidel.

        Add implementation for testRunner.dispatchPendingLoadRequests in
        WebKitTestRunner.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleDispatchPendingLoadRequests):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::dispatchPendingLoadRequests):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

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

        [GTK] Add a setting to enable/disable smooth scrolling to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=98646

        Reviewed by Xan Lopez.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsSetProperty): Implement setter for new property.
        (webKitSettingsGetProperty): Implement getter for new property.
        (webkit_settings_class_init): Add new property
        enable-smooth-scrolling.
        (webkit_settings_get_enable_smooth_scrolling):
        (webkit_settings_set_enable_smooth_scrolling):
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (testWebKitSettings): Test smooth scrolling setting API.

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

        [EFL][WK2] Use URL instead of URI in the API
        https://bugs.webkit.org/show_bug.cgi?id=98643

        Reviewed by Kenneth Rohde Christiansen.

        Use URL instead of URI in WebKit2 EFL API. This change
        was discussed on the mailing list and aims at making
        the API more consistent.

        * UIProcess/API/efl/ewk_back_forward_list_item.cpp:
        (_Ewk_Back_Forward_List_Item):
        (ewk_back_forward_list_item_url_get):
        (ewk_back_forward_list_item_original_url_get):
        * UIProcess/API/efl/ewk_back_forward_list_item.h:
        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_url_scheme_register):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (decideDestinationWithSuggestedFilename):
        * UIProcess/API/efl/ewk_download_job.h:
        * UIProcess/API/efl/ewk_resource_private.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (ewk_view_url_update):
        (ewk_view_url_set):
        (ewk_view_url_get):
        (ewk_view_reload):
        (ewk_view_reload_bypass_cache):
        (ewk_view_load_finished):
        (ewk_view_load_provisional_redirect):
        (ewk_view_load_provisional_started):
        (ewk_view_html_string_load):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didSameDocumentNavigationForFrame):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::loadUrlSync):
        (EWK2UnitTest::onURLChanged):
        (EWK2UnitTest::timeOutWhileWaitingUntilURLChangedTo):
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilURLChangedTo):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        (EWK2UnitTestBase):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.cpp:
        (EWK2UnitTestServer::EWK2UnitTestServer):
        (EWK2UnitTestServer::~EWK2UnitTestServer):
        (EWK2UnitTestServer::getURLForPath):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.h:
        (EWK2UnitTestServer):
        * UIProcess/API/efl/tests/resources/redirect_url_to_default.html: Renamed from Source/WebKit2/UIProcess/API/efl/tests/resources/redirect_uri_to_default.html.
        * UIProcess/API/efl/tests/test_ewk2_back_forward_list.cpp:
        (checkItem):
        (urlFromTitle):
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_download_job.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2012-10-08  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] r122720 causes performance regression with DirectFB on ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=97548

        Reviewed by Jocelyn Turcotte.

        Revert the rest of r122720. This change modifies the NativeImagePtr from QImage* to QPixmap*.

        Covered by existing tests.

        * Shared/qt/ShareableBitmapQt.cpp:
        (WebKit::ShareableBitmap::createImage):
        * UIProcess/qt/QtWebIconDatabaseClient.cpp:
        (WebKit::QtWebIconDatabaseClient::iconImageForPageURL):
        * WebProcess/WebCoreSupport/qt/WebDragClientQt.cpp:
        (WebKit::convertQPixmapToShareableBitmap):
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::adoptImageBackingStore):

2012-10-08  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        Unreviewed build fix after r130630

        Explicit convertion is required from QSizeF to FloatSize.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewLegacyPrivate::updateViewportSize):

2012-10-04  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix the mouse hover events transformation when devicePixelRatio != 1
        https://bugs.webkit.org/show_bug.cgi?id=98429

        Reviewed by Kenneth Rohde Christiansen.

        This prevents the events from being transformed two or three times.
        This is only noticeable in desktop mode.

        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::handleHoverLeaveEvent):
        (WebKit::QtWebPageEventHandler::handleHoverMoveEvent):

2012-10-04  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Apply QQuickWebViewExperimental::devicePixelRatio to the desktop mode as well
        https://bugs.webkit.org/show_bug.cgi?id=98428

        Reviewed by Kenneth Rohde Christiansen.

        This is handled by the PageViewportController when in flickable mode.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewLegacyPrivate::updateViewportSize):

2012-10-04  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Prevent the PageViewportController from affecting the viewport in desktop mode
        https://bugs.webkit.org/show_bug.cgi?id=98427

        Reviewed by Kenneth Rohde Christiansen.

        QQuickFlickable isn't tightly bound to it anymore, we can avoid creating it
        completely in this case.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewFlickablePrivate::onComponentComplete):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate::onComponentComplete):
        (QQuickWebViewPrivate::viewportController):
        (QQuickWebViewPrivate):
        (QQuickWebViewFlickablePrivate::viewportController):
        (QQuickWebViewFlickablePrivate):
        * UIProcess/qt/QtPageClient.cpp:
        (WebKit::QtPageClient::didRenderFrame):
        (WebKit::QtPageClient::didChangeContentsSize):
        (WebKit::QtPageClient::pageTransitionViewportReady):
        * UIProcess/qt/QtWebPageLoadClient.cpp:
        (WebKit::QtWebPageLoadClient::didCommitLoad):

2012-10-04  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix a QSocketNotifier warning at startup
        https://bugs.webkit.org/show_bug.cgi?id=98411

        Reviewed by Simon Hausmann.

        The actual warning:
        QSocketNotifier: socket notifiers cannot be enabled from another thread

        The problem was that QSocketNotifier::setEnabled was called on the main thread
        after moveToThread was called. This hasn't had any effect since Connection
        would dispatch a readyReadHandler call right after which would then call
        setEnabled again from the correct thread from ~SocketNotifierResourceGuard.

        Replace the call with a queued invoke to shut the warning.

        * Platform/qt/WorkQueueQt.cpp:
        (WorkQueue::registerSocketEventHandler):

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

        [GTK] Test /webkit2/WebKitWebView/populate-menu asserts in debug bots
        https://bugs.webkit.org/show_bug.cgi?id=98507

        Reviewed by Martin Robinson.

        Make sure we retain the page URL before asking for the icon.

        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        (getIconSurfaceSynchronously): Retain the page URL before asking
        for the icon, and release it if we fail to get an icon.
        (processPendingIconsForPageURL): Renamed to make it clear it
        receives a Sring and not a char* and moved
        getIconSurfaceSynchronously() call out of the loop to call it only
        once even if there are multiple requests pending.
        (iconDataReadyForPageURLCallback): Do not retain the page URL
        here.

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

        [GTK] Don't use the C API internally in WebKitWebContext
        https://bugs.webkit.org/show_bug.cgi?id=96768

        Reviewed by Martin Robinson.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitDownloadClient.cpp:
        (didStart):
        (didReceiveResponse):
        (didReceiveData):
        (decideDestinationWithSuggestedFilename):
        (didCreateDestination):
        (didFail):
        (didCancel):
        (didFinish):
        (attachDownloadClientToContext):
        * UIProcess/API/gtk/WebKitRequestManagerClient.cpp:
        (attachRequestManagerClientToContext):
        * UIProcess/API/gtk/WebKitSecurityManager.cpp:
        (registerSecurityPolicyForURIScheme):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (_WebKitWebContextPrivate):
        (createDefaultWebContext):
        (webkit_web_context_set_cache_model):
        (webkit_web_context_get_cache_model):
        (webkit_web_context_clear_cache):
        (webkit_web_context_download_uri):
        (webkit_web_context_get_cookie_manager):
        (webkit_web_context_get_favicon_database_directory):
        (webkit_web_context_get_favicon_database):
        (webkit_web_context_set_additional_plugins_directory):
        (webkitWebContextGetPluginThread):
        (webkit_web_context_register_uri_scheme):
        (webkitWebContextGetOrCreateDownload):
        (webkitWebContextRemoveDownload):
        (webkitWebContextGetContext):
        (webkitWebContextGetRequestManager):
        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed):

2012-10-07  Kangil Han  <kangil.han@samsung.com>

        [EFL][WK2] Fix unused parameter compile warning.
        https://bugs.webkit.org/show_bug.cgi?id=98610

        Reviewed by Laszlo Gombos.

        Fixed unused parameter compile warning by removing initiatingPageRef parameter name.

        * UIProcess/API/efl/ewk_context_request_manager_client.cpp:
        (didReceiveURIRequest):

2012-10-07  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Rename first/second to key/value in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=82784

        Reviewed by Eric Seidel.

        * Platform/CoreIPC/ArgumentCoders.h:
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::getOrCreate):
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::processIncomingMessage):
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::registerEventSourceHandler):
        (WorkQueue::unregisterEventSourceHandler):
        * Platform/mac/WorkQueueMac.cpp:
        (WorkQueue::unregisterMachPortEventHandler):
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::pluginDestroyed):
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        * Shared/WebPreferencesStore.cpp:
        (WebKit::valueForKey):
        (WebKit::WebPreferencesStore::getBoolValueForKey):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::::decode):
        * Shared/qt/ArgumentCodersQt.cpp:
        (CoreIPC::::decode):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::decode):
        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (_Ewk_Back_Forward_List::~_Ewk_Back_Forward_List):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context::~_Ewk_Context):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_priv_loading_resources_clear):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_subresources):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseContainerForall):
        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView _expectedPreviewCallbackForRect:]):
        (pageDidDrawToPDF):
        (-[WKPrintingView _drawPreview:]):
        * UIProcess/API/mac/WKView.mm:
        (commandNameForSelector):
        (-[WKView validateUserInterfaceItem:]):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::updateTile):
        (WebKit::CoordinatedBackingStore::texture):
        (WebKit::CoordinatedBackingStore::paintToTextureMapper):
        (WebKit::CoordinatedBackingStore::commitTileOperations):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::updateTileForLayer):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::adjustPositionForFixedLayers):
        (WebKit::LayerTreeRenderer::syncCanvas):
        (WebKit::LayerTreeRenderer::setLayerChildren):
        (WebKit::LayerTreeRenderer::setLayerFilters):
        (WebKit::LayerTreeRenderer::setLayerState):
        (WebKit::LayerTreeRenderer::assignImageToLayer):
        * UIProcess/GeolocationPermissionRequestManagerProxy.cpp:
        (WebKit::GeolocationPermissionRequestManagerProxy::invalidateRequests):
        * UIProcess/InspectorServer/WebInspectorServer.cpp:
        (WebKit::WebInspectorServer::~WebInspectorServer):
        (WebKit::WebInspectorServer::registerPage):
        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        (WebKit::WebSocketServerConnection::sendHTTPResponseHeader):
        * UIProcess/InspectorServer/qt/WebInspectorServerQt.cpp:
        (WebKit::WebInspectorServer::buildPageList):
        * UIProcess/Notifications/NotificationPermissionRequestManagerProxy.cpp:
        (WebKit::NotificationPermissionRequestManagerProxy::invalidateRequests):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        * UIProcess/WebContext.cpp:
        (WebKit::createDictionaryFromHashMap):
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::didFinishURLImport):
        * UIProcess/WebIntentData.cpp:
        (WebKit::WebIntentData::extras):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::checkURLReceivedFromWebProcess):
        (WebKit::WebProcessProxy::addBackForwardItem):
        (WebKit::WebProcessProxy::frameCountInPage):
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::cancelRequestForGeolocation):
        (WebKit::GeolocationPermissionRequestManager::didReceiveGeolocationPermissionDecision):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::getOrCreate):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::getOrCreate):
        * WebProcess/InjectedBundle/InjectedBundleIntent.cpp:
        (WebKit::InjectedBundleIntent::extras):
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::policyForOrigin):
        (WebKit::WebNotificationManager::show):
        (WebKit::WebNotificationManager::clearNotifications):
        (WebKit::WebNotificationManager::removeNotificationFromContextMap):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::invalidate):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::destroyStream):
        (WebKit::NetscapePlugin::frameDidFinishLoading):
        (WebKit::NetscapePlugin::frameDidFail):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::buildHTTPHeaders):
        (WebKit::PluginView::~PluginView):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::layerByID):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::adoptImageBackingStore):
        (WebKit::LayerTreeCoordinator::releaseImageBackingStore):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::removeItem):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::commandNameForSelectorName):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::visitedLinkStateChanged):
        (WebKit::WebProcess::allVisitedLinkStateChanged):
        (WebKit::WebProcess::focusedWebPage):
        (WebKit::WebProcess::createWebPage):
        (WebKit::WebProcess::webPageGroup):
        (WebKit::fromCountedSetToHashMap):
        (WebKit::WebProcess::setTextCheckerState):

2012-10-07  Dan Bernstein  <mitz@apple.com>

        Web process XPC services don't have correct version information in their Info.plist files
        https://bugs.webkit.org/show_bug.cgi?id=98619

        Reviewed by Anders Carlsson.

        * WebProcessService/Info.plist: Added CFBundleGetInfoString, and changed
        CFBundleShortVersionString and CFBundleVersion to report the source version.
        * WebProcessServiceForWebKitDevelopment/Info.plist: Ditto.

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

        WebKit2 part of <rdar://problem/12446507> [mac] WebKit clients cannot change the behavior of text-rendering: auto
        https://bugs.webkit.org/show_bug.cgi?id=98601

        Reviewed by Darin Adler.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters): Added initializer for
        to shouldEnableKerningAndLigaturesByDefault. The initial value is false.
        (WebKit::WebProcessCreationParameters::encode): Added encoding of
        shouldEnableKerningAndLigaturesByDefault.
        (WebKit::WebProcessCreationParameters::decode): Added decoding of
        shouldEnableKerningAndLigaturesByDefault.
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters): Added shouldEnableKerningAndLigaturesByDefault boolean
        member variable.
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess): Changed to set
        shouldEnableKerningAndLigaturesByDefault in the process creation parameters according to
        the value of the WebKitKerningAndLigaturesEnabledByDefault user defaults key.
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): Added a call to
        Font::setDefaultTypesettingFeatures() to enable kerning and ligatures if requested in the
        process creation parameters.

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

        [WK2][WTR] WebKitTestRunner needs testRunner.setSerializeHTTPLoads
        https://bugs.webkit.org/show_bug.cgi?id=98524

        Reviewed by Alexey Proskuryakov.

        Add implementation for testRunner.setSerializeHTTPLoads in
        WebKitTestRunner.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetSerialLoadingEnabled):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setSerialLoadingEnabled):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

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

        Unreviewed, rolling out r130556 and r130564.
        http://trac.webkit.org/changeset/130556
        http://trac.webkit.org/changeset/130564
        https://bugs.webkit.org/show_bug.cgi?id=98572

        The patch wasn't reviewed by a reviewer and it is breaking
        Chromium Windows (Requested by jchaffraix on #webkit).

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2012-10-05  Sam Weinig  <sam@webkit.org>

        Set the current working directory to TMPDIR when entering the sandbox in the plug-in process.
        Based on a patch by Ivan Krstić.

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/Netscape/mac/NetscapeSandboxFunctions.mm:
        (enterSandbox):

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

        [cg] GraphicsContextCG should ask CG whether the shadow offset workaround is required
        https://bugs.webkit.org/show_bug.cgi?id=98565
        <rdar://problem/12436468>

        Reviewed by Simon Fraser.

        Add wkCGContextDrawsWithCorrectShadowOffsets.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2012-10-04  Eric Carlson  <eric.carlson@apple.com>

        Allow ports to override text track rendering style
        https://bugs.webkit.org/show_bug.cgi?id=97800
        <rdar://problem/12044964>

        Reviewed by Silvia Pfeiffer.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize new WKSI function pointers.

2012-10-05  José Dapena Paz  <jdapena@igalia.com>

        [GTK] Add support for creating EGL contexts
        https://bugs.webkit.org/show_bug.cgi?id=77921

        Reviewed by Martin Robinson.

        This patch adds support for EGL, using OpenGL and OpenGL ES 2. Both
        options are set up on compile time, with the configure options
        --enable-egl and --enable-gles2.

        The implementation only adds support for EGL on top of X11, to
        isolate the changes to the minimum. More changes should come
        later to enable EGL for other targets (as Wayland).

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:

2012-10-04  Jon Lee  <jonlee@apple.com>

        Add a setting to enable plugin snapshotting
        https://bugs.webkit.org/show_bug.cgi?id=98319
        <rdar://problem/12426480>

        Reviewed by Brady Eidson.

        Expose plugInSnapshottingEnabled preference to WebKit clients.

        * Shared/WebPreferencesStore.h:
        (WebKit):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPlugInSnapshottingEnabled):
        (WKPreferencesGetPlugInSnapshottingEnabled):
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Update preference based on store.

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

        [Qt][WK2] Plugins are completely broken with a custom device pixel ratio
        https://bugs.webkit.org/show_bug.cgi?id=98518

        Reviewed by Kenneth Rohde Christiansen.

        Implement painting with scale factor in ShareableBitmap.
        The backing store of the plugin are still overscaled in MiniBrowser
        with this patch but this is only the effect of the fake device scale
        factor defined in qml (1.5). We should probably remove it on desktop.

        * Shared/qt/ShareableBitmapQt.cpp:
        (WebKit::ShareableBitmap::paint):

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

        [EFL] Unskip fullscreen unit tests for EwkView
        https://bugs.webkit.org/show_bug.cgi?id=98509

        Reviewed by Kenneth Rohde Christiansen.

        Update 2 fullscreen unit tests for EwkView so that
        they don't require a call to ecore_evas_fullscreen_set()
        to succeed. ecore_evas_fullscreen_set() does not
        seem to work in Xvfb and causes the tests to hang.
        With this update, we can now run those tests again.

        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

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

        [GTK] Test /webkit2/WebKitPrintOperation/print-errors gives runtime critical warnings
        https://bugs.webkit.org/show_bug.cgi?id=98497

        Reviewed by Martin Robinson.

        The problem is that GTK+ tries to write in the IO channel that has
        already been closed.

        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        (WebKit::WebPrintOperationGtk::print): Finish the surface when
        printing fails because printing data is invalid.

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

        [GTK] Test /webkit2/WebKitWebResource/response fails
        https://bugs.webkit.org/show_bug.cgi?id=98511

        Reviewed by Martin Robinson.

        Do not consider the favicon as a resource for the web resources
        unit tests.

        * UIProcess/API/gtk/tests/TestResources.cpp:

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

        REGRESSION (r129989 - r130019): [WK2] TestResources test is failing
        https://bugs.webkit.org/show_bug.cgi?id=98342

        Reviewed by Martin Robinson.

        Return 404 error in unit tests using a HTTP server for paths not
        handled by the test. This way all tests should return now a 404
        for /favicon.ico.

        * UIProcess/API/gtk/tests/TestBackForwardList.cpp:
        (serverCallback):
        * UIProcess/API/gtk/tests/TestCookieManager.cpp:
        (serverCallback):
        * UIProcess/API/gtk/tests/TestLoaderClient.cpp:
        (serverCallback):
        * UIProcess/API/gtk/tests/TestResources.cpp:
        (serverCallback):
        * UIProcess/API/gtk/tests/TestSSL.cpp:
        (serverCallback):
        * UIProcess/API/gtk/tests/TestWebKitPolicyClient.cpp:
        (serverCallback):
        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (serverCallback):
        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:
        (serverCallback):

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

        [WK2][SOUP] Assertion hit in WebKit::DownloadManager::downloadFinished() when download fails
        https://bugs.webkit.org/show_bug.cgi?id=97565

        Reviewed by Gustavo Noronha Silva.

        Make sure to notify the downlaod client that the response has been
        received when the newly created download has already been added to
        the DownloadManager downloads map.

        * WebProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::DownloadClient::DownloadClient): Initialize
        m_handleResponseLaterID.
        (WebKit::DownloadClient::~DownloadClient): Remove the source for
        the delayed response notification if it hasn't been triggered.
        (WebKit::DownloadClient::didReceiveData): If response hasn't been
        handled yet, remove the source for the delayed response
        notification and handle the resource before start writing the data
        received to the output stream.
        (WebKit::DownloadClient::handleResponse): Call
        didReceiveResponse() with the delayed response.
        (WebKit::DownloadClient::handleResponseLaterCallback): Call
        handleResponse().
        (WebKit::DownloadClient::handleResponseLater): Schedule an idle
        callback to handle the response later, to make sure the download
        has been added to the downloads map.
        (WebKit::Download::startWithHandle): Call handleResponseLater()
        with the given response to handle the response when the download
        has been added to the downloads map.

2012-10-05  Jongseok Yang  <js45.yang@samsung.com>

        [EFL][WK2] Remove "web" word from ewk_web_error APIs
        https://bugs.webkit.org/show_bug.cgi?id=97886

        Reviewed by Gyuyoung Kim.

        Remove "web" word from ewk_web_error APIs.
        "web" word was redundant because "ewk" means "EFL WebKit" and WK APIs for error does not have "web" word.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (didFail):
        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (getAcceptPolicyCallback):
        (getHostnamesWithCookiesCallback):
        * UIProcess/API/efl/ewk_cookie_manager.h:
        * UIProcess/API/efl/ewk_download_job_private.h:
        * UIProcess/API/efl/ewk_error.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_web_error.cpp.
        (_Ewk_Error):
        (_Ewk_Error::_Ewk_Error):
        (_Ewk_Error::~_Ewk_Error):
        (ewk_error_free):
        (ewk_error_type_get):
        (ewk_error_url_get):
        (ewk_error_code_get):
        (ewk_error_description_get):
        (ewk_error_cancellation_get):
        (ewk_error_new):
        * UIProcess/API/efl/ewk_error.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_web_error.h.
        * UIProcess/API/efl/ewk_error_private.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_web_error_private.h.
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_resource_load_failed):
        (ewk_view_download_job_failed):
        (ewk_view_load_error):
        (ewk_view_load_provisional_failed):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didFailLoadWithErrorForFrame):
        (didFailProvisionalLoadWithErrorForFrame):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        (didFailLoadForResource):
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (getAcceptPolicyCallback):
        (getHostnamesWithCookiesCallback):
        * UIProcess/API/efl/tests/test_ewk2_download_job.cpp:
        (on_download_failed):

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

        [WK2][GTK] WebPageAccessibilityObject leaking
        https://bugs.webkit.org/show_bug.cgi?id=98502

        Reviewed by Carlos Garcia Campos.

        Use GRefPtr on the accessibility object to fix the leak.

        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformInitialize):
        (WebKit::WebPage::updateAccessibilityTree):

2012-10-05  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Add API to count the matching text
        https://bugs.webkit.org/show_bug.cgi?id=97873

        Reviewed by Gyuyoung Kim.

        Add an API, ewk_view_text_matches_count(), to count the matched text in the document.
        This API does not highlight the matched text in the document unlike ewk_view_text_find().

        ewk_view_text_find() finds the matching text and but also update the UI view,
        but some applications may not want to affect the view, and just want to know the count.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_text_matches_count):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

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

        [WK2][GTK][EFL] standard_output returned by g_spawn_sync must be freed
        https://bugs.webkit.org/show_bug.cgi?id=98384

        Reviewed by Gyuyoung Kim.

        Free the standard_output returned by g_spawn_sync() to avoid
        a memory leak.

        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::scanPlugin):

2012-10-05  Jongseok Yang  <js45.yang@samsung.com>

        [EFL][WK2] Remove "web" word from ewk_resource APIs
        https://bugs.webkit.org/show_bug.cgi?id=97887

        Reviewed by Gyuyoung Kim.

        Remove "web" word from ewk_web_resource APIs.
        "web" word was redundant because "ewk" means "EFL WebKit" and enough to understand the meaning with ewk_resource_XXX.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_resource.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_web_resource.cpp.
        (_Ewk_Resource):
        (_Ewk_Resource::_Ewk_Resource):
        (_Ewk_Resource::~_Ewk_Resource):
        (ewk_resource_ref):
        (ewk_resource_unref):
        (ewk_resource_url_get):
        (ewk_resource_new):
        (ewk_resource_main_resource_get):
        * UIProcess/API/efl/ewk_resource.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_web_resource.h.
        * UIProcess/API/efl/ewk_resource_private.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_web_resource_private.h.
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_priv_loading_resources_clear):
        (ewk_view_resource_load_initiated):
        (ewk_view_resource_load_response):
        (ewk_view_resource_load_failed):
        (ewk_view_resource_load_finished):
        (ewk_view_resource_request_sent):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        (didInitiateLoadForResource):

2012-10-04  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] ewk_web_error_free is not a public API
        https://bugs.webkit.org/show_bug.cgi?id=98482

        Reviewed by Gyuyoung Kim.

        Because Ewk_Web_Error is just passed as a parameter of callback function
        and maintained internally, ewk_web_error_free should not be a public API.

        This patch moves ewk_web_error_free from public header to private header.

        * UIProcess/API/efl/ewk_context_download_client.cpp:
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        * UIProcess/API/efl/ewk_web_error.cpp:
        * UIProcess/API/efl/ewk_web_error.h:
        * UIProcess/API/efl/ewk_web_error_private.h:

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

        [EFL][WK2] Implement window frame callbacks in UIClient
        https://bugs.webkit.org/show_bug.cgi?id=98280

        Reviewed by Kenneth Rohde Christiansen.

        Implement callbacks to set and query window geometry
        in EwkView's UIClient.

        * UIProcess/API/efl/ewk_view_ui_client.cpp:
        (getWindowFrame):
        (setWindowFrame):
        (ewk_view_ui_client_attach):
        * UIProcess/API/efl/tests/resources/window_move_resize.html: Added.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (windowMoveResizeTimedOut):
        (TEST_F): Add corresponding unit test.

2012-10-04  Rik Cabanier  <cabanier@adobe.com>

        Turn Compositing on by default in WebKit build
        https://bugs.webkit.org/show_bug.cgi?id=98315

        Reviewed by Simon Fraser.

        enable -webkit-blend-mode on trunk.

        * Configurations/FeatureDefines.xcconfig:

2012-10-04  Simon Fraser  <simon.fraser@apple.com>

        Fix the Qt build by removing an errant paste at the top of the file.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:

2012-10-04  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Add APIs to get/set the frame flattening.
        https://bugs.webkit.org/show_bug.cgi?id=95982

        Reviewed by Gyuyoung Kim.

        Added new APIs and test case to support frame flattening.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_enable_frame_flattening_set):
        (ewk_settings_enable_frame_flattening_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/resources/frame_flattening_test.html: Added.
        * UIProcess/API/efl/tests/resources/frame_flattening_test_subframe.html: Added.
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

2012-10-04  Simon Fraser  <simon.fraser@apple.com>

        TiledCoreAnimationDrawingArea.mm should not include RenderLayerCompositor.h
        https://bugs.webkit.org/show_bug.cgi?id=98471

        Reviewed by Dean Jackson.

        Remove #import of <WebCore/RenderLayerCompositor.h> from this file.
        It is not required.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:

2012-10-04  Simon Fraser  <simon.fraser@apple.com>

        Final part of "sync" to "flush" renaming
        https://bugs.webkit.org/show_bug.cgi?id=98430

        Reviewed by Tim Horton.

        Change method names on GraphicsLayer and GraphicsLayerClient that
        refer to "sync" to use the term "flush" instead, to be consistent
        with the rest of the code.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::paintToCurrentGLContext):
        (WebKit::LayerTreeRenderer::flushLayerChanges):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (WebKit::LayerTreeRenderer::notifyFlushRequired):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::didChangeLayerState):
        (WebCore::CoordinatedGraphicsLayer::didChangeAnimatedProperties):
        (WebCore::CoordinatedGraphicsLayer::didChangeChildren):
        (WebCore::CoordinatedGraphicsLayer::didChangeFilters):
        (WebCore::CoordinatedGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::CoordinatedGraphicsLayer::setContentsToCanvas):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingState):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):
        (WebKit::LayerTreeCoordinator::notifyFlushRequired):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):
        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::notifyFlushRequired):
        (WebKit::LayerTreeHostCA::flushPendingLayerChanges):
        * WebProcess/WebPage/ca/LayerTreeHostCA.h:
        (LayerTreeHostCA):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::notifyFlushRequired):
        (WebKit::LayerTreeHostGtk::flushPendingLayerChanges):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:
        (LayerTreeHostGtk):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::notifyFlushRequired):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

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

        [EFL][WK2] Implement PageClientImpl::isViewVisible()
        https://bugs.webkit.org/show_bug.cgi?id=98249

        Reviewed by Kenneth Rohde Christiansen.

        Implement PageClientImpl::isViewVisible() for EFL port
        by calling evas_object_visible_get() on the view.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::isViewVisible):

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

        Improve initial empty process tracking
        https://bugs.webkit.org/show_bug.cgi?id=98458

        Reviewed by Sam Weinig.

        * UIProcess/WebContext.cpp: (WebKit::WebContext::disconnectProcess):
        Unset m_haveInitialEmptyProcess if we no longer do.

2012-10-03  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Support all attributes of GeolocationPosition
        https://bugs.webkit.org/show_bug.cgi?id=98212

        Reviewed by Sam Weinig.

        Add complete support for GeolocationPosition.

        * Shared/WebGeolocationPosition.cpp:
        (WebKit::WebGeolocationPosition::WebGeolocationPosition):
        (WebKit::WebGeolocationPosition::Data::encode):
        (WebKit::WebGeolocationPosition::Data::decode):
        * Shared/WebGeolocationPosition.h:
        (Data):
        (WebKit::WebGeolocationPosition::create):
        (WebKit::WebGeolocationPosition::canProvideAltitude):
        (WebKit::WebGeolocationPosition::altitude):
        (WebGeolocationPosition):
        (WebKit::WebGeolocationPosition::canProvideAltitudeAccuracy):
        (WebKit::WebGeolocationPosition::altitudeAccuracy):
        (WebKit::WebGeolocationPosition::canProvideHeading):
        (WebKit::WebGeolocationPosition::heading):
        (WebKit::WebGeolocationPosition::canProvideSpeed):
        (WebKit::WebGeolocationPosition::speed):
        WebGeolocationPosition mirror the attributes of WebCore::GeolocationPosition.

        * UIProcess/API/C/WKGeolocationPosition.cpp:
        (WKGeolocationPositionCreate):
        (WKGeolocationPositionCreate_b):
        Add a new API exposing all the arguments.

        * UIProcess/API/C/WKGeolocationPosition.h:
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::didChangePosition):

2012-10-04  Simon Fraser  <simon.fraser@apple.com>

        Standardize on "flush" terminology for compositing layer flushing/syncing
        https://bugs.webkit.org/show_bug.cgi?id=98321

        Reviewed by Simon Fraser.

        Rename compositing-related methods that refer to "syncing" to instead
        refer to "flushing".

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::scheduleCompositingLayerFlush):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):
        * WebProcess/WebPage/DrawingArea.h:
        (DrawingArea):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::scheduleCompositingLayerFlush):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        (DrawingAreaImpl):
        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::flushPendingLayerChanges):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scheduleCompositingLayerFlush):
        (WebKit::TiledCoreAnimationDrawingArea::didInstallPageOverlay):
        (WebKit::TiledCoreAnimationDrawingArea::didUninstallPageOverlay):
        (WebKit::TiledCoreAnimationDrawingArea::setPageOverlayNeedsDisplay):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

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

        [EFL][WK2] Add setting to allow file access from file:// URLs
        https://bugs.webkit.org/show_bug.cgi?id=98121

        Reviewed by Laszlo Gombos.

        Add Ewk setting to set / query permission to access
        files from file:// URLs.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_file_access_from_file_urls_allowed_set):
        (ewk_settings_file_access_from_file_urls_allowed_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/resources/local_file_access.html: Added.
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F): Add unit tests for new ewk setting.

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

        [EFL] Run unit tests with Xvfb
        https://bugs.webkit.org/show_bug.cgi?id=98389

        Reviewed by Laszlo Gombos.

        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init): Call ecore_evas_shutdown() instead of
        edje_shutdown() when ecore_x_init() fails.
        (ewk_shutdown): Remove extra call to edje_shutdown().
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F): Temporarily disable fullscreen unit tests
        until we get them working with Xvfb.

2012-10-04  Balazs Kelemen  <kbalazs@webkit.org>

        Don't allow compositing to be disabled in forced compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=98048

        Reviewed by Jocelyn Turcotte.

        Export Settings::setAcceleratedCompositingEnabled because it has been deinlined.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-10-04  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix the tst_QQuickWebView::scrollRequest auto test
        https://bugs.webkit.org/show_bug.cgi?id=98045

        Reviewed by Simon Hausmann.

        Relying on QQuickWebViewPrivate::setNeedsDisplay can cause a false positive
        emission of the loadVisuallyCommitted signal since this method is also
        called when a layer is deleted or when the root layer changes.

        Move the signal emission to QQuickWebViewPrivate::didRenderFrame which
        is called only after a DidRenderFrame message has been received from the
        web process.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::setNeedsDisplay):
        (QQuickWebViewPrivate::didRenderFrame):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        * UIProcess/qt/QtPageClient.cpp:
        (WebKit::QtPageClient::didRenderFrame):

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

        Regression(r130363): Broke unit tests
        https://bugs.webkit.org/show_bug.cgi?id=98341

        Reviewed by Gyuyoung Kim.

        Fix WebKit2 EFL to use X11 as well.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::SetUp):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.cpp:
        (EWK2UnitTest::EWK2UnitTestEnvironment::EWK2UnitTestEnvironment):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.h:
        (EWK2UnitTestEnvironment):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestMain.cpp:
        (main):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (checkFullScreenProperty):

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

        [EFL] Enable use of X11 in DumpRenderTree / WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=98231

        Reviewed by Gyuyoung Kim.

        Initialize ecore_x library in ewk_main instead of
        WebKitTestRunner since WebKit is using ecore_x
        not WebKitTestRunner itself.

        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init):
        (ewk_shutdown):

2012-10-03  Kangil Han  <kangil.han@samsung.com>

        Fix unused parameter compile warnings.
        https://bugs.webkit.org/show_bug.cgi?id=98243

        Reviewed by Alexey Proskuryakov.

        Fixed unused parameter compile warnings by removing parameter names, adding UNUSED_PARAM usage and commenting out.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPluginInternal):
        * PluginProcess/unix/PluginProcessUnix.cpp:
        (WebKit::PluginProcess::platformInitialize):
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::getOwnPropertyNames):
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_RequestRead):
        (WebKit::NPN_NewStream):
        (WebKit::NPN_Write):
        (WebKit::NPN_MemFlush):
        (WebKit::NPN_ReloadPlugins):
        (WebKit::NPN_GetJavaPeer):
        (WebKit::NPN_InvalidateRegion):
        (WebKit::NPN_ForceRedraw):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::contentsScaleFactorChanged):
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformPostInitializeWindowed):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::contentsScaleFactorChanged):

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

        Plugins are killed after 45 seconds if showing keychain "Allow/Deny" dialog
        https://bugs.webkit.org/show_bug.cgi?id=85138
        <rdar://problem/11406430>

        Reviewed by Andreas Kling.

        Remove the watchdog that would kill a plug-in if we've been waiting for a sync reply from it for more than 45 seconds.
        It's unlikely that someone is going to wait 45 seconds for Safari to recover from a plug-in hang, and the timeout is
        causing problems with plug-ins (see the bugzilla bug for more information).

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::Connection):
        (CoreIPC::Connection::waitForSyncReply):
        * Platform/CoreIPC/Connection.h:
        (Client):
        (Connection):
        * PluginProcess/PluginProcess.cpp:
        * PluginProcess/PluginProcess.h:
        (PluginProcess):
        * PluginProcess/WebProcessConnection.cpp:
        * PluginProcess/WebProcessConnection.h:
        (WebProcessConnection):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters):
        * UIProcess/Plugins/PluginProcessManager.cpp:
        * UIProcess/Plugins/PluginProcessManager.h:
        (PluginProcessManager):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        * UIProcess/Plugins/PluginProcessProxy.h:
        (PluginProcessProxy):
        * UIProcess/WebConnectionToWebProcess.cpp:
        * UIProcess/WebConnectionToWebProcess.h:
        (WebConnectionToWebProcess):
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::PluginProcessConnection):
        * WebProcess/Plugins/PluginProcessConnection.h:
        (PluginProcessConnection):
        * WebProcess/WebConnectionToUIProcess.cpp:
        * WebProcess/WebConnectionToUIProcess.h:
        (WebConnectionToUIProcess):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/WebProcess.h:
        (WebProcess):

2012-10-03  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [WK2] PageViewportController.cpp is supposed to be a generic WebKit2 file but only works with Qt port.
        https://bugs.webkit.org/show_bug.cgi?id=98186

        Reviewed by Noam Rosenthal.

        Remove the dependece of WebCore::FloatSize to QSize implicit conversion.

        * UIProcess/API/qt/qquickwebpage.cpp:
        (QQuickWebPagePrivate::updateSize):
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewLegacyPrivate::updateViewportSize):
        (QQuickWebViewFlickablePrivate::updateViewportSize):
        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::didRenderFrame):
        (WebKit::PageViewportController::pageDidRequestScroll):
        (WebKit::PageViewportController::syncVisibleContents):
        (WebKit::PageViewportController::viewportSizeInContentsCoordinates):
        (WebKit):
        * UIProcess/PageViewportController.h:
        (PageViewportController):

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

        Try to fix the Qt WebKit2 failures.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        Always force compositing if USE(COORDINATED_GRAPHICS) is true.

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

        Use the XPC service by default on newer systems
        https://bugs.webkit.org/show_bug.cgi?id=98297
        <rdar://problem/12424641>

        Reviewed by Sam Weinig.

        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::shouldUseXPC):
        Return false for older systems.

        (WebKit::WebProcessProxy::platformConnect):
        Call shouldUseXPC().

2012-10-02  Andy Estes  <aestes@apple.com>

        [WebKit2] Add the ability to send messages to the WebPageGroupProxy
        https://bugs.webkit.org/show_bug.cgi?id=98233

        Reviewed by Anders Carlsson.

        Add a WebPageGroupProxy.messages.in, implement a stub message receiver
        in WebPageGroupProxy, and teach WebProcess how to route messages to the
        appropriate WebPageGroupProxy.

        * CMakeLists.txt: Tell a build system about added files.
        * DerivedSources.make: Ditto.
        * DerivedSources.pri: Ditto.
        * GNUmakefile.list.am: Ditto.
        * WebKit2.xcodeproj/project.pbxproj: Ditto.
        * win/WebKit2.vcproj: Ditto.
        * Platform/CoreIPC/MessageID.h: Add MessageClassWebPageGroupProxy.
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::didReceiveMessage): Stub out the method
        that will receive messages.
        (WebKit::WebPageGroupProxy::didReceiveWebPageGroupProxyMessage): Stub
        out a method that will exist in WebPageGroupProxyMessageReceiver.cpp
        once WebPageGroupProxy.messages.in contains messages.
        * WebProcess/WebPage/WebPageGroupProxy.h:
        * WebProcess/WebPage/WebPageGroupProxy.messages.in: Added.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage): Route messages to the
        WebPageGroupProxy matching destinationID if the message is of class
        MessageClassWebPageGroupProxy.

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

        Change most GraphicsLayer::create calls to use the version that takes a GraphicsLayerFactory
        https://bugs.webkit.org/show_bug.cgi?id=98217

        Reviewed by Andreas Kling.

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::createPageOverlayLayer):
        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::initialize):
        (WebKit::LayerTreeHostCA::createPageOverlayLayer):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::initialize):
        (WebKit::LayerTreeHostGtk::createPageOverlayLayer):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer):

2012-10-03  Alberto Garcia  <agarcia@igalia.com>

        [GTK] [WK2] Unused variable in webkitWebViewLoadChanged
        https://bugs.webkit.org/show_bug.cgi?id=98271

        Reviewed by Martin Robinson.

        Use the priv variable to directly access private attributes
        instead of dereferencing webView->priv all the time.
        Fixes -Wunused-variable.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewLoadChanged):

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

        [EFL][WK2] Implement focus/unfocus in UIClient
        https://bugs.webkit.org/show_bug.cgi?id=98253

        Reviewed by Gyuyoung Kim.

        Implement focus-related functionality in
        WebKitEFL's UIClient.

        * UIProcess/API/efl/ewk_view_ui_client.cpp:
        (focus):
        (unfocus):
        (takeFocus):
        (ewk_view_ui_client_attach):

2012-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebView doesn't emit notify:favicon when it changes in some cases in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=98153

        Reviewed by Martin Robinson.

        The main problem is that it relies on icon-ready signal to be
        emitted by the favicon database, but that signal is only emitted
        when the icon is loaded from the network or imported from the
        database, but not when the icon is already in memory. The way to
        detect if a web page doesn't have a favicon or it's unknown it's
        also incorrectly done and the wrong error is returned for pages
        not having a favicon.

        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        (GetFaviconSurfaceAsyncData): Add a GError field.
        (getIconSurfaceSynchronously): Add a GError parameter and fill it
        accordingly. Use imageForPageURL() instead of
        nativeImageForPageURL() because the latter always returns NULL for
        empty images, so it's not possible to know whether it's an empty
        image or not. If the image is empty is because the web page is
        known by the database and it doesn't have a favicon.
        (processPendingIconsForURI): Pass the data error to
        getIconSurfaceSynchronously(). Don't set the icon if the request
        has been cancelled.
        (webkitFaviconDatabaseGetFavicon): Pass NULL as error to
        getIconSurfaceSynchronously().
        (setErrorForAsyncResult): Fill also error for
        WEBKIT_FAVICON_DATABASE_ERROR_FAVICON_UNKNOWN.
        (webkit_favicon_database_get_favicon): If we get NULL as icon in
        the first place, check the error code returned by
        getIconSurfaceSynchronously() and return early if the page doesn't
        have a favicon. Remove the cancelled signal to avoid race
        conditions.
        (webkit_favicon_database_get_favicon_finish): Errors are processed
        before now, so simply propagate the error if any or return the
        favicon.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (_WebKitWebViewPrivate): Keep a reference of the favicon.
        (webkitWebViewCancelFaviconRequest): Cancel any async operation to
        get the favicon.
        (webkitWebViewUpdateFavicon): Check if favicon has changed and
        save it emitting also notify::favicon signal.
        (iconReadyCallback): Only update the favicon if we don't have one
        already.
        (webkitWebViewFinalize): Call webkitWebViewCancelFaviconRequest().
        (getFaviconReadyCallback): Update the favicon.
        (webkitWebViewRequestFavicon): Request a new favicon.
        (webkitWebViewLoadChanged): Try to get the favicon when the load
        has been committed and the URI is the final one.
        (webkit_web_view_get_favicon): Return the cached favicon.
        * UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:
        (serverCallback):
        (testSetDirectory):
        (testGetFavicon):
        (testWebViewFavicon):

2012-10-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to get the web view that initiated a custom URI request to WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=97895

        Reviewed by Martin Robinson.

        The message DidReceiveURIRequest is now sent to the page that
        initiated the request that forwards the mesassage to the
        WebSoupRequestManagerProxy.

        * UIProcess/API/C/soup/WKSoupRequestManager.h: Update
        didReceiveURIRequest callback to receive the initiating page ID.
        * UIProcess/API/efl/ewk_context_request_manager_client.cpp:
        (didReceiveURIRequest): Update the callback API change.
        * UIProcess/API/gtk/WebKitRequestManagerClient.cpp:
        (didReceiveURIRequest): Pass the initiating page to the
        WebKitURISchemeRequest constructor.
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp:
        (_WebKitURISchemeRequestPrivate): Keep a reference to the
        WebPageProxy that initiatesd the request.
        (webkitURISchemeRequestCreate): Save the initiating page.
        (webkit_uri_scheme_request_get_web_view): Return the view widget
        of the initiating WebPageProxy.
        * UIProcess/API/gtk/WebKitURISchemeRequest.h:
        * UIProcess/API/gtk/WebKitURISchemeRequestPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbol.
        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveURIRequest): Forward the request
        to the soup request manager proxy.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy): Add didReceiveURIRequest().
        * UIProcess/WebPageProxy.messages.in: Add DidReceiveURIRequest
        message.
        * UIProcess/soup/WebSoupRequestManagerClient.cpp:
        (WebKit::WebSoupRequestManagerClient::didReceiveURIRequest):
        Pass the inititing page to the client callback.
        * UIProcess/soup/WebSoupRequestManagerClient.h:
        (WebSoupRequestManagerClient):
        * UIProcess/soup/WebSoupRequestManagerProxy.cpp:
        (WebKit::WebSoupRequestManagerProxy::didReceiveURIRequest): Pass
        the inititing page to the client.
        * UIProcess/soup/WebSoupRequestManagerProxy.h:
        (WebSoupRequestManagerProxy):
        * UIProcess/soup/WebSoupRequestManagerProxy.messages.in: Remove
        DidReceiveURIRequest message.
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::WebFrameNetworkingContext):
        Save the pageID of the WebFrame.
        (WebKit::WebFrameNetworkingContext::initiatingPageID): Return the
        inititing page ID.
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:
        * WebProcess/soup/WebSoupRequestManager.cpp:
        (WebKit::WebSoupRequestManager::send): Send DidReceiveURIRequest
        message to the WebPage that initiated the request.

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

        Unreviewed build fix for the GTK port after r130207.
        Use proper file separators for new entries.

        * GNUmakefile.list.am:

2012-10-02  Joone Hur  <joone.hur@intel.com>

        Unreviewed, GTK+,Efl debug build fix after r130225.

        This patch allows to include the static xErrorString variable when LOG_DISABLED is 0.

        * PluginProcess/unix/PluginProcessMainUnix.cpp:
        (WebKit):

2012-10-02  Sam Weinig  <sam@webkit.org>

        Fix a typo and add some \n's to make Mark happy.

        Rubber-stamped by Mark "logging must be fast" Rowe.

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::load):

2012-10-02  Sam Weinig  <sam@webkit.org>

        Add Objective-C API for the InjectedBundle
        https://bugs.webkit.org/show_bug.cgi?id=98222

        Reviewed by Anders Carlsson.

        Add skeleton of the Objective-C API for the InjectedBundle.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new API files.

        * WebProcess/InjectedBundle/API/mac: Added.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h: Added.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm: Added.
        (-[WKWebProcessPlugIn _initWithPrincipalClassInstance:injectedBundle:]):
        Initialization method for the WKWebProcessPlugIn object. This object will act as the WKBundleRef
        object does in the C-SPI.
        (+[WKWebProcessPlugIn _shared]):
        Access the shared instance.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h: Added.

        * WebProcess/InjectedBundle/InjectedBundle.h:
        Store an NSBundle rather than a CFBundleRef as the platform bundle.

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp: Removed.
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm: Copied from Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp.
        (WebKit::InjectedBundle::load):
        If a principal class is provided and no WKBundleInitialize function is present in the bundle, use the principal class
        as the initialization point. The principal class must conform to the WKWebProcessPlugIn protocol and if a
        webProcessPlugInInitialize: method is present, it is called. 

2012-10-02  Dan Bernstein  <mitz@apple.com>

        Fixed a crash when the localization option is not passed to the web process.

        Reviewed by Sam Weinig.

        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain): Changed to not call WKSetDefaultLocalization
        with the empty string.
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain): Ditto.

== Rolled over to ChangeLog-2012-10-02 ==
