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) 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/files/scoped_temp_dir.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/string_util.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_extra_parts.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_content_browser_client.h" 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/download/download_browsertest.h" 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/download/download_prefs.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/renderer_context_menu/render_view_context_menu_test_util.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/public/browser/render_frame_host.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/resource_controller.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/resource_dispatcher_host.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/resource_throttle.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/context_menu_params.h" 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/resource_type.h" 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/url_constants.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "extensions/common/switches.h" 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/test/result_catcher.h" 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/dns/mock_host_resolver.h" 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/test/embedded_test_server/embedded_test_server.h" 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebContextMenuData.h" 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebInputEvent.h" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing content::ResourceType; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class can defer requests for arbitrary URLs. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestNavigationListener 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public base::RefCountedThreadSafe<TestNavigationListener> { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestNavigationListener() {} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add |url| to the set of URLs we should delay. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DelayRequestsForURL(const GURL& url) { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)) { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserThread::PostTask( 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserThread::IO, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FROM_HERE, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TestNavigationListener::DelayRequestsForURL, this, url)); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls_to_delay_.insert(url); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resume all deferred requests. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ResumeAll() { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)) { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserThread::PostTask( 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserThread::IO, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FROM_HERE, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TestNavigationListener::ResumeAll, this)); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WeakThrottleList::const_iterator it; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (it = throttles_.begin(); it != throttles_.end(); ++it) { 87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (it->get()) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*it)->Resume(); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) throttles_.clear(); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Constructs a ResourceThrottle if the request for |url| should be held. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Needs to be invoked on the IO thread. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceThrottle* CreateResourceThrottle( 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ResourceType resource_type) { 99effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (urls_to_delay_.find(url) == urls_to_delay_.end()) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Throttle* throttle = new Throttle(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) throttles_.push_back(throttle->AsWeakPtr()); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return throttle; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::RefCountedThreadSafe<TestNavigationListener>; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestNavigationListener() {} 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores a throttle per URL request that we have delayed. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Throttle : public content::ResourceThrottle, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public base::SupportsWeakPtr<Throttle> { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Resume() { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller()->Resume(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::ResourceThrottle implementation. 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void WillStartRequest(bool* defer) OVERRIDE { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *defer = true; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 125a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 126a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual const char* GetNameForLogging() const OVERRIDE { 127a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return "TestNavigationListener::Throttle"; 128a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::WeakPtr<Throttle> WeakThrottle; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::list<WeakThrottle> WeakThrottleList; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WeakThrottleList throttles_; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The set of URLs to be delayed. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<GURL> urls_to_delay_; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestNavigationListener); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Waits for a WC to be created. Once it starts loading |delay_url| (after at 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// least the first navigation has committed), it delays the load, executes 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// |script| in the last committed RVH and resumes the load when a URL ending in 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// |until_url_suffix| commits. This class expects |script| to trigger the load 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// of an URL ending in |until_url_suffix|. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DelayLoadStartAndExecuteJavascript 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public content::NotificationObserver, 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::WebContentsObserver { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayLoadStartAndExecuteJavascript( 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestNavigationListener* test_navigation_listener, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& delay_url, 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& script, 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& until_url_suffix) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : content::WebContentsObserver(), 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener_(test_navigation_listener), 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delay_url_(delay_url), 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) until_url_suffix_(until_url_suffix), 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) script_(script), 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) script_was_executed_(false), 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh_(NULL) { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_TAB_ADDED, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener_->DelayRequestsForURL(delay_url_); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DelayLoadStartAndExecuteJavascript() {} 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) OVERRIDE { 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type != chrome::NOTIFICATION_TAB_ADDED) { 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContentsObserver::Observe( 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Details<content::WebContents>(details).ptr()); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.RemoveAll(); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidStartProvisionalLoadForFrame( 181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RenderFrameHost* render_frame_host, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& validated_url, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_error_page, 184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool is_iframe_srcdoc) OVERRIDE { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (validated_url != delay_url_ || !rvh_) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 188a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) rvh_->GetMainFrame()->ExecuteJavaScript(base::UTF8ToUTF16(script_)); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) script_was_executed_ = true; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidCommitProvisionalLoadForFrame( 193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RenderFrameHost* render_frame_host, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PageTransition transition_type) OVERRIDE { 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (script_was_executed_ && EndsWith(url.spec(), until_url_suffix_, true)) { 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContentsObserver::Observe(NULL); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener_->ResumeAll(); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rvh_ = render_frame_host->GetRenderViewHost(); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar_; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<TestNavigationListener> test_navigation_listener_; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL delay_url_; 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string until_url_suffix_; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string script_; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool script_was_executed_; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* rvh_; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DelayLoadStartAndExecuteJavascript); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A ResourceDispatcherHostDelegate that adds a TestNavigationObserver. 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestResourceDispatcherHostDelegate 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public ChromeResourceDispatcherHostDelegate { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestResourceDispatcherHostDelegate( 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prerender::PrerenderTracker* prerender_tracker, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestNavigationListener* test_navigation_listener) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ChromeResourceDispatcherHostDelegate(prerender_tracker), 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener_(test_navigation_listener) { 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestResourceDispatcherHostDelegate() {} 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RequestBeginning( 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::URLRequest* request, 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* resource_context, 232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::AppCacheService* appcache_service, 2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ResourceType resource_type, 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<content::ResourceThrottle>* throttles) OVERRIDE { 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeResourceDispatcherHostDelegate::RequestBeginning( 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request, 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_context, 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) appcache_service, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_type, 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) throttles); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceThrottle* throttle = 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener_->CreateResourceThrottle(request->url(), 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_type); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (throttle) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) throttles->push_back(throttle); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<TestNavigationListener> test_navigation_listener_; 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestResourceDispatcherHostDelegate); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebNavigationApiTest : public ExtensionApiTest { 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebNavigationApiTest() {} 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WebNavigationApiTest() {} 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionApiTest::SetUpInProcessBrowserTestFixture(); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FrameNavigationState::set_allow_extension_scheme(true); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch( 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kAllowLegacyExtensionManifests); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_resolver()->AddRule("*", "127.0.0.1"); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 27323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ExtensionApiTest::SetUpOnMainThread(); 27423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) test_navigation_listener_ = new TestNavigationListener(); 27523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) resource_dispatcher_host_delegate_.reset( 27623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) new TestResourceDispatcherHostDelegate( 27723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) g_browser_process->prerender_tracker(), 27823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) test_navigation_listener_.get())); 27923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content::ResourceDispatcherHost::Get()->SetDelegate( 28023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) resource_dispatcher_host_delegate_.get()); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestNavigationListener* test_navigation_listener() { 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return test_navigation_listener_.get(); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<TestNavigationListener> test_navigation_listener_; 28923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_ptr<TestResourceDispatcherHostDelegate> 29023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) resource_dispatcher_host_delegate_; 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebNavigationApiTest); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, Api) { 296eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/api")) << message_; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, GetFrame) { 301eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/getFrame")) << message_; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, ClientRedirect) { 306eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/clientRedirect")) 3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << message_; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 311a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, ServerRedirect) { 312eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/serverRedirect")) 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << message_; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, Download) { 318cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::ScopedTempDir download_directory; 319cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(download_directory.CreateUniqueTempDir()); 320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DownloadPrefs* download_prefs = 321cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DownloadPrefs::FromBrowserContext(browser()->profile()); 322cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) download_prefs->SetDownloadPath(download_directory.path()); 323cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DownloadTestObserverNotInProgress download_observer( 3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::BrowserContext::GetDownloadManager(profile()), 1); 3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) download_observer.StartObserving(); 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(StartEmbeddedTestServer()); 3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/download")) 3295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << message_; 3305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) download_observer.WaitForFinished(); 3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, ServerRedirectSingleProcess) { 334eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 335eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set max renderers to 1 to force running out of processes. 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost::SetMaxRendererProcessCount(1); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the extension to set itself up and return control to us. 3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE( 3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunExtensionTest("webnavigation/serverRedirectSingleProcess")) 3425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << message_; 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WaitForLoadStop(tab); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResultCatcher catcher; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url(base::StringPrintf( 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.a.com:%d/" 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "extensions/api_test/webnavigation/serverRedirectSingleProcess/a.html", 351eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->port())); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url = GURL(base::StringPrintf( 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.b.com:%d/server-redirect?http://www.b.com:%d/", 357eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->port(), 358eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->port())); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, ForwardBack) { 366eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/forwardBack")) << message_; 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 370a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, IFrame) { 371eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/iframe")) << message_; 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, SrcDoc) { 376eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/srcdoc")) << message_; 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, OpenTab) { 381eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/openTab")) << message_; 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, ReferenceFragment) { 386eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/referenceFragment")) 3885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << message_; 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 391a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, SimpleLoad) { 392eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/simpleLoad")) << message_; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, Failures) { 397eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/failures")) << message_; 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 401a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, FilteredTest) { 402eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/filtered")) << message_; 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, UserAction) { 407eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 408eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the extension to set itself up and return control to us. 4105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/userAction")) << message_; 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WaitForLoadStop(tab); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResultCatcher catcher; 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = extensions::ExtensionSystem::Get( 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->extension_service(); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* extension = 4208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service->GetExtensionById(last_loaded_extension_id(), false); 4215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL url = extension->GetResourceURL("a.html"); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This corresponds to "Open link in new tab". 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ContextMenuParams params; 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.is_editable = false; 428f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) params.media_type = blink::WebContextMenuData::MediaTypeNone; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.page_url = url; 4305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) params.link_url = extension->GetResourceURL("b.html"); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestRenderViewContextMenu menu(tab->GetMainFrame(), params); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu.Init(); 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) menu.ExecuteCommand(IDC_CONTENT_CONTEXT_OPENLINKNEWTAB, 0); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, RequestOpenTab) { 440eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 441eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the extension to set itself up and return control to us. 4435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/requestOpenTab")) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WaitForLoadStop(tab); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResultCatcher catcher; 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = extensions::ExtensionSystem::Get( 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->extension_service(); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* extension = 4548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service->GetExtensionById(last_loaded_extension_id(), false); 4555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL url = extension->GetResourceURL("a.html"); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There's a link on a.html. Middle-click on it to open it in a new tab. 460f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent mouse_event; 461f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mouse_event.type = blink::WebInputEvent::MouseDown; 462f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mouse_event.button = blink::WebMouseEvent::ButtonMiddle; 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.x = 7; 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.y = 7; 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.clickCount = 1; 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event); 467f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mouse_event.type = blink::WebInputEvent::MouseUp; 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, TargetBlank) { 474eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 475eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the extension to set itself up and return control to us. 4775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/targetBlank")) << message_; 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WaitForLoadStop(tab); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResultCatcher catcher; 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 484eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL url = embedded_test_server()->GetURL( 485eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "/extensions/api_test/webnavigation/targetBlank/a.html"); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(¶ms); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There's a link with target=_blank on a.html. Click on it to open it in a 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // new tab. 492f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent mouse_event; 493f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mouse_event.type = blink::WebInputEvent::MouseDown; 494f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mouse_event.button = blink::WebMouseEvent::ButtonLeft; 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.x = 7; 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.y = 7; 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.clickCount = 1; 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event); 499f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mouse_event.type = blink::WebInputEvent::MouseUp; 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, TargetBlankIncognito) { 506eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 507eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the extension to set itself up and return control to us. 5095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTestIncognito("webnavigation/targetBlank")) 5105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << message_; 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResultCatcher catcher; 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 514eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL url = embedded_test_server()->GetURL( 515eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "/extensions/api_test/webnavigation/targetBlank/a.html"); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* otr_browser = ui_test_utils::OpenURLOffTheRecord( 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->profile(), url); 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* tab = otr_browser->tab_strip_model()->GetActiveWebContents(); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There's a link with target=_blank on a.html. Click on it to open it in a 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // new tab. 523f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent mouse_event; 524f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mouse_event.type = blink::WebInputEvent::MouseDown; 525f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mouse_event.button = blink::WebMouseEvent::ButtonLeft; 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.x = 7; 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.y = 7; 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.clickCount = 1; 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event); 530f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mouse_event.type = blink::WebInputEvent::MouseUp; 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 536a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, History) { 537eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 5385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/history")) << message_; 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 541a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, CrossProcess) { 542eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 543eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension(test_data_dir_.AppendASCII("webnavigation").AppendASCII("app")); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See crossProcess/d.html. 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayLoadStartAndExecuteJavascript call_script( 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener(), 549eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->GetURL("/test1"), 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "navigate2()", 5515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "empty.html"); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/crossProcess")) << message_; 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 556a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, CrossProcessFragment) { 557eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 558eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // See crossProcessFragment/f.html. 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayLoadStartAndExecuteJavascript call_script3( 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener(), 562eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->GetURL("/test3"), 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "updateFragment()", 5645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::StringPrintf("f.html?%d#foo", embedded_test_server()->port())); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // See crossProcessFragment/g.html. 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayLoadStartAndExecuteJavascript call_script4( 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener(), 569eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->GetURL("/test4"), 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "updateFragment()", 5715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::StringPrintf("g.html?%d#foo", embedded_test_server()->port())); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/crossProcessFragment")) 5745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << message_; 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, CrossProcessHistory) { 578eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 579eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // See crossProcessHistory/e.html. 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayLoadStartAndExecuteJavascript call_script2( 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener(), 583eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->GetURL("/test2"), 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "updateHistory()", 5855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "empty.html"); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // See crossProcessHistory/h.html. 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayLoadStartAndExecuteJavascript call_script5( 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener(), 590eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->GetURL("/test5"), 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "updateHistory()", 5925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "empty.html"); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // See crossProcessHistory/i.html. 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayLoadStartAndExecuteJavascript call_script6( 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_navigation_listener(), 597eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->GetURL("/test6"), 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "updateHistory()", 5995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "empty.html"); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/crossProcessHistory")) 6025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << message_; 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 60523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// TODO(jam): http://crbug.com/350550 60623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if !(defined(OS_CHROMEOS) && defined(ADDRESS_SANITIZER)) 6075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, Crash) { 608eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 609eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Wait for the extension to set itself up and return control to us. 6115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("webnavigation/crash")) << message_; 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WaitForLoadStop(tab); 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultCatcher catcher; 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL url(base::StringPrintf( 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "http://www.a.com:%d/" 620eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "extensions/api_test/webnavigation/crash/a.html", 621eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->port())); 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GURL(content::kChromeUICrashURL)); 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url = GURL(base::StringPrintf( 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "http://www.a.com:%d/" 628eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "extensions/api_test/webnavigation/crash/b.html", 629eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->port())); 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 63523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif 63623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 638