Changeset 109778 in webkit


Ignore:
Timestamp:
Mar 5, 2012 11:50:05 AM (12 years ago)
Author:
commit-queue@webkit.org
Message:

[chromium] Pass WebNavigationPolicy to WebViewClient::createView
https://bugs.webkit.org/show_bug.cgi?id=80057

Patch by Charlie Reis <creis@chromium.org> on 2012-03-05
Reviewed by Darin Fisher.

Source/WebKit/chromium:

  • public/WebViewClient.h:

(WebViewClient):
(WebKit::WebViewClient::createView):

  • src/ChromeClientImpl.cpp:

(WebKit::ChromeClientImpl::ChromeClientImpl):
(WebKit::ChromeClientImpl::createWindow):
(WebKit::ChromeClientImpl::getNavigationPolicy):
(WebKit):
(WebKit::ChromeClientImpl::show):
(WebKit::ChromeClientImpl::setNewWindowNavigationPolicy):

  • src/ChromeClientImpl.h:

(ChromeClientImpl):

  • src/FrameLoaderClientImpl.cpp:

(WebKit::FrameLoaderClientImpl::dispatchCreatePage):
(WebKit::FrameLoaderClientImpl::dispatchDecidePolicyForNewWindowAction):

Tools:

  • DumpRenderTree/chromium/WebViewHost.cpp:

(WebViewHost::createView):

  • DumpRenderTree/chromium/WebViewHost.h:

(WebViewHost):

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/chromium/ChangeLog

    r109777 r109778  
     12012-03-05  Charlie Reis  <creis@chromium.org>
     2
     3        [chromium] Pass WebNavigationPolicy to WebViewClient::createView
     4        https://bugs.webkit.org/show_bug.cgi?id=80057
     5
     6        Reviewed by Darin Fisher.
     7
     8        * public/WebViewClient.h:
     9        (WebViewClient):
     10        (WebKit::WebViewClient::createView):
     11        * src/ChromeClientImpl.cpp:
     12        (WebKit::ChromeClientImpl::ChromeClientImpl):
     13        (WebKit::ChromeClientImpl::createWindow):
     14        (WebKit::ChromeClientImpl::getNavigationPolicy):
     15        (WebKit):
     16        (WebKit::ChromeClientImpl::show):
     17        (WebKit::ChromeClientImpl::setNewWindowNavigationPolicy):
     18        * src/ChromeClientImpl.h:
     19        (ChromeClientImpl):
     20        * src/FrameLoaderClientImpl.cpp:
     21        (WebKit::FrameLoaderClientImpl::dispatchCreatePage):
     22        (WebKit::FrameLoaderClientImpl::dispatchDecidePolicyForNewWindowAction):
     23
    1242012-03-05  James Robinson  <jamesr@chromium.org>
    225
  • trunk/Source/WebKit/chromium/public/WebViewClient.h

    r107832 r109778  
    9494    // The request parameter is only for the client to check if the request
    9595    // could be fulfilled.  The client should not load the request.
     96    // The policy parameter indicates how the new view will be displayed in
     97    // WebWidgetClient::show.
    9698    virtual WebView* createView(WebFrame* creator,
    9799                                const WebURLRequest& request,
    98100                                const WebWindowFeatures& features,
    99                                 const WebString& name) {
     101                                const WebString& name,
     102                                WebNavigationPolicy policy) {
    100103        return 0;
    101104    }
  • trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp

    r108883 r109778  
    137137    , m_menubarVisible(true)
    138138    , m_resizable(true)
     139    , m_nextNewWindowNavigationPolicy(WebNavigationPolicyIgnore)
    139140{
    140141}
     
    239240        return 0;
    240241
     242    // FrameLoaderClientImpl may have given us a policy to use for the next new
     243    // window navigation. If not, determine the policy using the same logic as
     244    // show().
     245    WebNavigationPolicy policy;
     246    if (m_nextNewWindowNavigationPolicy != WebNavigationPolicyIgnore) {
     247        policy = m_nextNewWindowNavigationPolicy;
     248        m_nextNewWindowNavigationPolicy = WebNavigationPolicyIgnore;
     249    } else
     250        policy = getNavigationPolicy();
     251
    241252    WrappedResourceRequest request;
    242253    if (!r.resourceRequest().isEmpty())
     
    245256        request.bind(action.resourceRequest());
    246257    WebViewImpl* newView = static_cast<WebViewImpl*>(
    247         m_webView->client()->createView(WebFrameImpl::fromFrame(frame), request, features, r.frameName()));
     258        m_webView->client()->createView(WebFrameImpl::fromFrame(frame), request, features, r.frameName(), policy));
    248259    if (!newView)
    249260        return 0;
     
    288299}
    289300
    290 void ChromeClientImpl::show()
    291 {
    292     if (!m_webView->client())
    293         return;
    294 
     301WebNavigationPolicy ChromeClientImpl::getNavigationPolicy()
     302{
    295303    // If our default configuration was modified by a script or wasn't
    296304    // created by a user gesture, then show as a popup. Else, let this
     
    307315    if (currentEventShouldCauseBackgroundTab(WebViewImpl::currentInputEvent()))
    308316        policy = WebNavigationPolicyNewBackgroundTab;
    309 
    310     m_webView->client()->show(policy);
     317    return policy;
     318}
     319 
     320void ChromeClientImpl::show()
     321{
     322    if (!m_webView->client())
     323        return;
     324
     325    m_webView->client()->show(getNavigationPolicy());
    311326}
    312327
     
    803818}
    804819
     820void ChromeClientImpl::setNewWindowNavigationPolicy(WebNavigationPolicy policy)
     821{
     822    m_nextNewWindowNavigationPolicy = policy;
     823}
     824
    805825void ChromeClientImpl::formStateDidChange(const Node* node)
    806826{
  • trunk/Source/WebKit/chromium/src/ChromeClientImpl.h

    r108957 r109778  
    3636#include "PopupMenu.h"
    3737#include "SearchPopupMenu.h"
     38#include "WebNavigationPolicy.h"
    3839
    3940namespace WebCore {
     
    190191    // ChromeClientImpl:
    191192    void setCursorForPlugin(const WebCursorInfo&);
     193    void setNewWindowNavigationPolicy(WebNavigationPolicy);
    192194
    193195    virtual bool selectItemWritingDirectionIsNatural();
     
    210212
    211213private:
     214    WebNavigationPolicy getNavigationPolicy();
    212215    void getPopupMenuInfo(WebCore::PopupContainer*, WebPopupMenuInfo*);
    213216    void setCursor(const WebCursorInfo&);
     
    219222    bool m_menubarVisible;
    220223    bool m_resizable;
     224
     225    // The policy for how the next webview to be created will be shown.
     226    WebNavigationPolicy m_nextNewWindowNavigationPolicy;
    221227};
    222228
  • trunk/Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp

    r109670 r109778  
    874874Frame* FrameLoaderClientImpl::dispatchCreatePage(const NavigationAction& action)
    875875{
    876     struct WindowFeatures features;
    877     Page* newPage = m_webFrame->frame()->page()->chrome()->createWindow(
    878         m_webFrame->frame(), FrameLoadRequest(m_webFrame->frame()->document()->securityOrigin()),
    879         features, action);
    880 
    881876    // Make sure that we have a valid disposition.  This should have been set in
    882877    // the preceeding call to dispatchDecidePolicyForNewWindowAction.
     
    885880    m_nextNavigationPolicy = WebNavigationPolicyIgnore;
    886881
     882    // Store the disposition on the opener ChromeClientImpl so that we can pass
     883    // it to WebViewClient::createView.
     884    ChromeClientImpl* chromeClient = static_cast<ChromeClientImpl*>(m_webFrame->frame()->page()->chrome()->client());
     885    chromeClient->setNewWindowNavigationPolicy(policy);
     886
     887    struct WindowFeatures features;
     888    Page* newPage = m_webFrame->frame()->page()->chrome()->createWindow(
     889        m_webFrame->frame(), FrameLoadRequest(m_webFrame->frame()->document()->securityOrigin()),
     890        features, action);
     891
    887892    // createWindow can return null (e.g., popup blocker denies the window).
    888893    if (!newPage)
    889894        return 0;
    890895
     896    // Also give the disposition to the new window.
    891897    WebViewImpl::fromPage(newPage)->setInitialNavigationPolicy(policy);
    892898    return newPage->mainFrame();
     
    950956        // to keep this state.
    951957        m_nextNavigationPolicy = navigationPolicy;
     958
     959        // Store the disposition on the opener ChromeClientImpl so that we can pass
     960        // it to WebViewClient::createView.
     961        ChromeClientImpl* chromeClient = static_cast<ChromeClientImpl*>(m_webFrame->frame()->page()->chrome()->client());
     962        chromeClient->setNewWindowNavigationPolicy(navigationPolicy);
    952963    }
    953964    (m_webFrame->frame()->loader()->policyChecker()->*function)(policyAction);
  • trunk/Tools/ChangeLog

    r109760 r109778  
     12012-03-05  Charlie Reis  <creis@chromium.org>
     2
     3        [chromium] Pass WebNavigationPolicy to WebViewClient::createView
     4        https://bugs.webkit.org/show_bug.cgi?id=80057
     5
     6        Reviewed by Darin Fisher.
     7
     8        * DumpRenderTree/chromium/WebViewHost.cpp:
     9        (WebViewHost::createView):
     10        * DumpRenderTree/chromium/WebViewHost.h:
     11        (WebViewHost):
     12
    1132012-03-05  Martin Robinson  <mrobinson@igalia.com>
    214
  • trunk/Tools/DumpRenderTree/chromium/WebViewHost.cpp

    r109462 r109778  
    243243// WebViewClient -------------------------------------------------------------
    244244
    245 WebView* WebViewHost::createView(WebFrame*, const WebURLRequest& request, const WebWindowFeatures&, const WebString&)
     245WebView* WebViewHost::createView(WebFrame*, const WebURLRequest& request, const WebWindowFeatures&, const WebString&, WebNavigationPolicy)
    246246{
    247247    if (!layoutTestController()->canOpenWindows())
  • trunk/Tools/DumpRenderTree/chromium/WebViewHost.h

    r109236 r109778  
    127127
    128128    // WebKit::WebViewClient
    129     virtual WebKit::WebView* createView(WebKit::WebFrame*, const WebKit::WebURLRequest&, const WebKit::WebWindowFeatures&, const WebKit::WebString&);
     129    virtual WebKit::WebView* createView(WebKit::WebFrame*, const WebKit::WebURLRequest&, const WebKit::WebWindowFeatures&, const WebKit::WebString&, WebKit::WebNavigationPolicy);
    130130    virtual WebKit::WebWidget* createPopupMenu(WebKit::WebPopupType);
    131131    virtual WebKit::WebWidget* createPopupMenu(const WebKit::WebPopupMenuInfo&);
Note: See TracChangeset for help on using the changeset viewer.