15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <list> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_extra_parts.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_content_browser_client.h" 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/extension_system.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/tab_contents/render_view_context_menu.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/resource_controller.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/resource_dispatcher_host.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/resource_throttle.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/context_menu_params.h" 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/url_constants.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "extensions/common/switches.h" 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/dns/mock_host_resolver.h" 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/test/embedded_test_server/embedded_test_server.h" 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebContextMenuData.h" 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebInputEvent.h" 43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "webkit/common/resource_type.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An UI-less RenderViewContextMenu. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestRenderViewContextMenu : public RenderViewContextMenu { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestRenderViewContextMenu(WebContents* web_contents, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::ContextMenuParams& params) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : RenderViewContextMenu(web_contents, params) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestRenderViewContextMenu() {} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void PlatformInit() OVERRIDE {} 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void PlatformCancel() OVERRIDE {} 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool GetAcceleratorForCommandId(int, ui::Accelerator*) OVERRIDE { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestRenderViewContextMenu); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class can defer requests for arbitrary URLs. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestNavigationListener 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public base::RefCountedThreadSafe<TestNavigationListener> { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestNavigationListener() {} 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add |url| to the set of URLs we should delay. 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DelayRequestsForURL(const GURL& url) { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserThread::PostTask( 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserThread::IO, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FROM_HERE, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TestNavigationListener::DelayRequestsForURL, this, url)); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls_to_delay_.insert(url); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resume all deferred requests. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ResumeAll() { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)) { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserThread::PostTask( 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserThread::IO, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FROM_HERE, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TestNavigationListener::ResumeAll, this)); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WeakThrottleList::const_iterator it; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (it = throttles_.begin(); it != throttles_.end(); ++it) { 100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (it->get()) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*it)->Resume(); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) throttles_.clear(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Constructs a ResourceThrottle if the request for |url| should be held. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Needs to be invoked on the IO thread. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceThrottle* CreateResourceThrottle( 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceType::Type resource_type) { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (urls_to_delay_.find(url) == urls_to_delay_.end()) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Throttle* throttle = new Throttle(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) throttles_.push_back(throttle->AsWeakPtr()); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return throttle; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::RefCountedThreadSafe<TestNavigationListener>; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestNavigationListener() {} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores a throttle per URL request that we have delayed. 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Throttle : public content::ResourceThrottle, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public base::SupportsWeakPtr<Throttle> { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Resume() { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller()->Resume(); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::ResourceThrottle implementation. 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void WillStartRequest(bool* defer) OVERRIDE { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *defer = true; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::WeakPtr<Throttle> WeakThrottle; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::list<WeakThrottle> WeakThrottleList; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WeakThrottleList throttles_; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The set of URLs to be delayed. 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<GURL> urls_to_delay_; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestNavigationListener); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Waits for a WC to be created. Once it starts loading |delay_url| (after at 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// least the first navigation has committed), it delays the load, executes 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |script| in the last committed RVH and resumes the load when |until_url| 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// commits. This class expects |script| to trigger the load of |until_url|. 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DelayLoadStartAndExecuteJavascript 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public content::NotificationObserver, 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::WebContentsObserver { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayLoadStartAndExecuteJavascript( 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestNavigationListener* test_navigation_listener, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& delay_url, 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& script, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& until_url) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : content::WebContentsObserver(), 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener_(test_navigation_listener), 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delay_url_(delay_url), 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) until_url_(until_url), 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) script_(script), 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) script_was_executed_(false), 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh_(NULL) { 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_TAB_ADDED, 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener_->DelayRequestsForURL(delay_url_); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DelayLoadStartAndExecuteJavascript() {} 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) OVERRIDE { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type != chrome::NOTIFICATION_TAB_ADDED) { 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContentsObserver::Observe( 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Details<content::WebContents>(details).ptr()); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.RemoveAll(); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidStartProvisionalLoadForFrame( 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 frame_id, 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 parent_frame_id, 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_main_frame, 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& validated_url, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_error_page, 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_iframe_srcdoc, 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* render_view_host) OVERRIDE { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (validated_url != delay_url_ || !rvh_) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh_->ExecuteJavascriptInWebFrame(string16(), UTF8ToUTF16(script_)); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) script_was_executed_ = true; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidCommitProvisionalLoadForFrame( 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 frame_id, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_main_frame, 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PageTransition transition_type, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* render_view_host) OVERRIDE { 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (script_was_executed_ && url == until_url_) { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContentsObserver::Observe(NULL); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener_->ResumeAll(); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh_ = render_view_host; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar_; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<TestNavigationListener> test_navigation_listener_; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL delay_url_; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL until_url_; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string script_; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool script_was_executed_; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* rvh_; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DelayLoadStartAndExecuteJavascript); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A ResourceDispatcherHostDelegate that adds a TestNavigationObserver. 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestResourceDispatcherHostDelegate 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public ChromeResourceDispatcherHostDelegate { 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestResourceDispatcherHostDelegate( 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prerender::PrerenderTracker* prerender_tracker, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestNavigationListener* test_navigation_listener) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ChromeResourceDispatcherHostDelegate(prerender_tracker), 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener_(test_navigation_listener) { 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestResourceDispatcherHostDelegate() {} 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RequestBeginning( 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::URLRequest* request, 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* resource_context, 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) appcache::AppCacheService* appcache_service, 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceType::Type resource_type, 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int child_id, 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int route_id, 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_continuation_of_transferred_request, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<content::ResourceThrottle>* throttles) OVERRIDE { 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeResourceDispatcherHostDelegate::RequestBeginning( 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request, 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_context, 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) appcache_service, 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_type, 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child_id, 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) route_id, 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_continuation_of_transferred_request, 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) throttles); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceThrottle* throttle = 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener_->CreateResourceThrottle(request->url(), 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_type); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (throttle) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) throttles->push_back(throttle); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<TestNavigationListener> test_navigation_listener_; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestResourceDispatcherHostDelegate); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used to manage the lifetime of the TestResourceDispatcherHostDelegate which 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// needs to be deleted before the threads are stopped. 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestBrowserMainExtraParts : public ChromeBrowserMainExtraParts { 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit TestBrowserMainExtraParts( 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestNavigationListener* test_navigation_listener) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : test_navigation_listener_(test_navigation_listener) { 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestBrowserMainExtraParts() {} 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestResourceDispatcherHostDelegate* resource_dispatcher_host_delegate() { 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!resource_dispatcher_host_delegate_.get()) { 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_dispatcher_host_delegate_.reset( 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new TestResourceDispatcherHostDelegate( 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_browser_process->prerender_tracker(), 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener_.get())); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return resource_dispatcher_host_delegate_.get(); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ChromeBrowserMainExtraParts implementation. 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void PostMainMessageLoopRun() OVERRIDE { 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_dispatcher_host_delegate_.reset(); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<TestNavigationListener> test_navigation_listener_; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestResourceDispatcherHostDelegate> 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_dispatcher_host_delegate_; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestBrowserMainExtraParts); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A ContentBrowserClient that doesn't forward the RDH created signal. 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestContentBrowserClient : public chrome::ChromeContentBrowserClient { 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit TestContentBrowserClient( 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestNavigationListener* test_navigation_listener) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : test_navigation_listener_(test_navigation_listener) { 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestContentBrowserClient() {} 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ResourceDispatcherHostCreated() OVERRIDE { 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't invoke ChromeContentBrowserClient::ResourceDispatcherHostCreated. 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It would notify BrowserProcessImpl which would create a 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ChromeResourceDispatcherHostDelegate and other objects. Not creating 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // other objects might turn out to be a problem in the future. 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceDispatcherHost::Get()->SetDelegate( 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_main_extra_parts_->resource_dispatcher_host_delegate()); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual content::BrowserMainParts* CreateBrowserMainParts( 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::MainFunctionParams& parameters) OVERRIDE { 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeBrowserMainParts* main_parts = static_cast<ChromeBrowserMainParts*>( 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeContentBrowserClient::CreateBrowserMainParts(parameters)); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_main_extra_parts_ = 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new TestBrowserMainExtraParts(test_navigation_listener_.get()); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts->AddParts(browser_main_extra_parts_); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return main_parts; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<TestNavigationListener> test_navigation_listener_; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBrowserMainExtraParts* browser_main_extra_parts_; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestContentBrowserClient); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebNavigationApiTest : public ExtensionApiTest { 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebNavigationApiTest() {} 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WebNavigationApiTest() {} 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionApiTest::SetUpInProcessBrowserTestFixture(); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener_ = new TestNavigationListener(); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_browser_client_.reset( 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new TestContentBrowserClient(test_navigation_listener_.get())); 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) original_content_browser_client_ = content::SetBrowserClientForTesting( 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_browser_client_.get()); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FrameNavigationState::set_allow_extension_scheme(true); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch( 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kAllowLegacyExtensionManifests); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_resolver()->AddRule("*", "127.0.0.1"); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDownInProcessBrowserTestFixture() OVERRIDE { 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionApiTest::TearDownInProcessBrowserTestFixture(); 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::SetBrowserClientForTesting(original_content_browser_client_); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestNavigationListener* test_navigation_listener() { 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return test_navigation_listener_.get(); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<TestNavigationListener> test_navigation_listener_; 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestContentBrowserClient> content_browser_client_; 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ContentBrowserClient* original_content_browser_client_; 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebNavigationApiTest); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 38390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Fails often on Windows dbg bots. http://crbug.com/177163 38490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_WIN) 38590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_Api DISABLED_Api 38690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#else 38790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_Api Api 38890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // defined(OS_WIN) 38990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, MAYBE_Api) { 390eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunExtensionSubtest("webnavigation", "test_api.html")) << message_; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Fails often on Windows dbg bots. http://crbug.com/177163 39690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_WIN) 39790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_GetFrame DISABLED_GetFrame 39890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#else 39990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_GetFrame GetFrame 40090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // defined(OS_WIN) 40190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, MAYBE_GetFrame) { 402eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunExtensionSubtest("webnavigation", "test_getFrame.html")) << message_; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 407a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, ClientRedirect) { 408eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunExtensionSubtest("webnavigation", "test_clientRedirect.html")) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 414a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, ServerRedirect) { 415eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunExtensionSubtest("webnavigation", "test_serverRedirect.html")) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 421868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// http://crbug.com/235171 and http://crbug.com/177163 422868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if (defined(OS_WIN) && !defined(NDEBUG)) || \ 423868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) (defined(OS_CHROMEOS) || (defined(OS_LINUX) && defined(USE_AURA))) 424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define MAYBE_ServerRedirectSingleProcess DISABLED_ServerRedirectSingleProcess 425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#else 426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define MAYBE_ServerRedirectSingleProcess ServerRedirectSingleProcess 427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, 429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MAYBE_ServerRedirectSingleProcess) { 430eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 431eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set max renderers to 1 to force running out of processes. 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost::SetMaxRendererProcessCount(1); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the extension to set itself up and return control to us. 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunExtensionSubtest( 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "webnavigation", "test_serverRedirectSingleProcess.html")) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WaitForLoadStop(tab); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResultCatcher catcher; 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url(base::StringPrintf( 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.a.com:%d/" 446eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "extensions/api_test/webnavigation/serverRedirect/a.html", 447eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->port())); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url = GURL(base::StringPrintf( 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.b.com:%d/server-redirect?http://www.b.com:%d/", 453eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->port(), 454eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->port())); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 461a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, ForwardBack) { 462eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunExtensionSubtest("webnavigation", "test_forwardBack.html")) 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 468a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, IFrame) { 469eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunExtensionSubtest("webnavigation", "test_iframe.html")) << message_; 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 474a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, SrcDoc) { 475eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE( 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunExtensionSubtest("webnavigation", "test_srcdoc.html")) << message_; 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, OpenTab) { 481eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunExtensionSubtest("webnavigation", "test_openTab.html")) << message_; 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 486a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, ReferenceFragment) { 487eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunExtensionSubtest("webnavigation", "test_referenceFragment.html")) 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 493a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, SimpleLoad) { 494eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunExtensionSubtest("webnavigation", "test_simpleLoad.html")) << message_; 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 49990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Fails often on Windows dbg bots. http://crbug.com/177163 50090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_WIN) 50190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_Failures DISABLED_Failures 50290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#else 50390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_Failures Failures 50490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // defined(OS_WIN) 50590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, MAYBE_Failures) { 506eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunExtensionSubtest("webnavigation", "test_failures.html")) << message_; 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 511a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, FilteredTest) { 512eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunExtensionSubtest("webnavigation", "test_filtered.html")) << message_; 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Fails often on Windows dbg bots. http://crbug.com/177163 51890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_WIN) 51990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_UserAction DISABLED_UserAction 52090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#else 52190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_UserAction UserAction 52290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // defined(OS_WIN) 52390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, MAYBE_UserAction) { 524eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 525eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the extension to set itself up and return control to us. 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunExtensionSubtest("webnavigation", "test_userAction.html")) << message_; 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WaitForLoadStop(tab); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResultCatcher catcher; 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = extensions::ExtensionSystem::Get( 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->extension_service(); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* extension = 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->GetExtensionById(last_loaded_extension_id_, false); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = extension->GetResourceURL("userAction/a.html"); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This corresponds to "Open link in new tab". 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ContextMenuParams params; 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.is_editable = false; 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.media_type = WebKit::WebContextMenuData::MediaTypeNone; 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.page_url = url; 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.frame_id = WebNavigationTabObserver::Get(tab)-> 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) frame_navigation_state().GetMainFrameID().frame_num; 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.link_url = extension->GetResourceURL("userAction/b.html"); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestRenderViewContextMenu menu(tab, params); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu.Init(); 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) menu.ExecuteCommand(IDC_CONTENT_CONTEXT_OPENLINKNEWTAB, 0); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 559868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// http://crbug.com/177163 560868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_WIN) && !defined(NDEBUG) 561868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_RequestOpenTab DISABLED_RequestOpenTab 562868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 563868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_RequestOpenTab RequestOpenTab 564868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 565868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, MAYBE_RequestOpenTab) { 566eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 567eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the extension to set itself up and return control to us. 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunExtensionSubtest("webnavigation", "test_requestOpenTab.html")) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WaitForLoadStop(tab); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResultCatcher catcher; 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = extensions::ExtensionSystem::Get( 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->extension_service(); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* extension = 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->GetExtensionById(last_loaded_extension_id_, false); 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = extension->GetResourceURL("requestOpenTab/a.html"); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There's a link on a.html. Middle-click on it to open it in a new tab. 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent mouse_event; 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.type = WebKit::WebInputEvent::MouseDown; 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.button = WebKit::WebMouseEvent::ButtonMiddle; 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.x = 7; 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.y = 7; 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.clickCount = 1; 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.type = WebKit::WebInputEvent::MouseUp; 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 59990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Fails often on Windows dbg bots. http://crbug.com/177163 60090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_WIN) 60190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_TargetBlank DISABLED_TargetBlank 60290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#else 60390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_TargetBlank TargetBlank 60490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // defined(OS_WIN) 60590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, MAYBE_TargetBlank) { 606eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 607eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the extension to set itself up and return control to us. 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunExtensionSubtest("webnavigation", "test_targetBlank.html")) 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WaitForLoadStop(tab); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResultCatcher catcher; 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 617eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL url = embedded_test_server()->GetURL( 618eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "/extensions/api_test/webnavigation/targetBlank/a.html"); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams params(browser(), url, content::PAGE_TRANSITION_LINK); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(¶ms); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There's a link with target=_blank on a.html. Click on it to open it in a 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // new tab. 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent mouse_event; 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.type = WebKit::WebInputEvent::MouseDown; 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.button = WebKit::WebMouseEvent::ButtonLeft; 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.x = 7; 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.y = 7; 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.clickCount = 1; 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.type = WebKit::WebInputEvent::MouseUp; 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 638868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// http://crbug.com/177163 639868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_WIN) && !defined(NDEBUG) 640868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_TargetBlankIncognito DISABLED_TargetBlankIncognito 641868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 642868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_TargetBlankIncognito TargetBlankIncognito 643868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 644868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, MAYBE_TargetBlankIncognito) { 645eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 646eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the extension to set itself up and return control to us. 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunExtensionSubtest( 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "webnavigation", "test_targetBlank.html", 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionApiTest::kFlagEnableIncognito)) << message_; 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResultCatcher catcher; 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 654eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL url = embedded_test_server()->GetURL( 655eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "/extensions/api_test/webnavigation/targetBlank/a.html"); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* otr_browser = ui_test_utils::OpenURLOffTheRecord( 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->profile(), url); 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* tab = otr_browser->tab_strip_model()->GetActiveWebContents(); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There's a link with target=_blank on a.html. Click on it to open it in a 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // new tab. 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent mouse_event; 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.type = WebKit::WebInputEvent::MouseDown; 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.button = WebKit::WebMouseEvent::ButtonLeft; 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.x = 7; 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.y = 7; 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.clickCount = 1; 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.type = WebKit::WebInputEvent::MouseUp; 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 676a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, History) { 677eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunExtensionSubtest("webnavigation", "test_history.html")) 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 683a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, CrossProcess) { 684eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 685eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension(test_data_dir_.AppendASCII("webnavigation").AppendASCII("app")); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension(test_data_dir_.AppendASCII("webnavigation")); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = extensions::ExtensionSystem::Get( 6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->extension_service(); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* extension = 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->GetExtensionById(last_loaded_extension_id_, false); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See crossProcess/d.html. 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayLoadStartAndExecuteJavascript call_script( 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener(), 697eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->GetURL("/test1"), 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "navigate2()", 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension->GetResourceURL("crossProcess/empty.html")); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPageTest( 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension->GetResourceURL("test_crossProcess.html").spec())) 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 706a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, CrossProcessFragment) { 707eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 708eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension(test_data_dir_.AppendASCII("webnavigation")); 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = extensions::ExtensionSystem::Get( 7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->extension_service(); 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* extension = 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->GetExtensionById(last_loaded_extension_id_, false); 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See crossProcess/f.html. 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayLoadStartAndExecuteJavascript call_script3( 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener(), 719eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->GetURL("/test3"), 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "updateFragment()", 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension->GetResourceURL(base::StringPrintf( 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crossProcess/f.html?%d#foo", 723eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->port()))); 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See crossProcess/g.html. 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayLoadStartAndExecuteJavascript call_script4( 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener(), 728eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->GetURL("/test4"), 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "updateFragment()", 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension->GetResourceURL(base::StringPrintf( 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crossProcess/g.html?%d#foo", 732eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->port()))); 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPageTest( 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension->GetResourceURL("test_crossProcessFragment.html").spec())) 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, CrossProcessHistory) { 740eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 741eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension(test_data_dir_.AppendASCII("webnavigation")); 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = extensions::ExtensionSystem::Get( 7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->extension_service(); 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* extension = 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->GetExtensionById(last_loaded_extension_id_, false); 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See crossProcess/e.html. 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayLoadStartAndExecuteJavascript call_script2( 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener(), 752eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->GetURL("/test2"), 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "updateHistory()", 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension->GetResourceURL("crossProcess/empty.html")); 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See crossProcess/h.html. 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayLoadStartAndExecuteJavascript call_script5( 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener(), 759eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->GetURL("/test5"), 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "updateHistory()", 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension->GetResourceURL("crossProcess/empty.html")); 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See crossProcess/i.html. 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayLoadStartAndExecuteJavascript call_script6( 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener(), 766eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->GetURL("/test6"), 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "updateHistory()", 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension->GetResourceURL("crossProcess/empty.html")); 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPageTest( 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension->GetResourceURL("test_crossProcessHistory.html").spec())) 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// http://crbug.com/177163 776868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_WIN) && !defined(NDEBUG) 777868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_Crash DISABLED_Crash 778868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 779868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_Crash Crash 780868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 781868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, MAYBE_Crash) { 782eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 783eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Wait for the extension to set itself up and return control to us. 7852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(RunExtensionSubtest("webnavigation", "test_crash.html")) 7862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << message_; 7872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 7892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WaitForLoadStop(tab); 7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultCatcher catcher; 7922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL url(base::StringPrintf( 7942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "http://www.a.com:%d/" 795eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "extensions/api_test/webnavigation/crash/a.html", 796eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->port())); 7972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GURL(content::kChromeUICrashURL)); 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url = GURL(base::StringPrintf( 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "http://www.a.com:%d/" 803eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "extensions/api_test/webnavigation/crash/b.html", 804eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->port())); 8052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 8062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 811