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(&params);
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