Home | History | Annotate | Download | only in web_contents
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "content/browser/web_contents/debug_urls.h"
      6 
      7 #include <vector>
      8 
      9 #include "base/strings/utf_string_conversions.h"
     10 #include "content/browser/gpu/gpu_process_host_ui_shim.h"
     11 #include "content/browser/ppapi_plugin_process_host.h"
     12 #include "content/public/browser/browser_thread.h"
     13 #include "content/public/common/content_constants.h"
     14 #include "content/public/common/url_constants.h"
     15 #include "ppapi/proxy/ppapi_messages.h"
     16 #include "url/gurl.h"
     17 
     18 namespace content {
     19 
     20 namespace {
     21 
     22 void HandlePpapiFlashDebugURL(const GURL& url) {
     23 #if defined(ENABLE_PLUGINS)
     24   bool crash = url == GURL(kChromeUIPpapiFlashCrashURL);
     25 
     26   std::vector<PpapiPluginProcessHost*> hosts;
     27   PpapiPluginProcessHost::FindByName(UTF8ToUTF16(kFlashPluginName), &hosts);
     28   for (std::vector<PpapiPluginProcessHost*>::iterator iter = hosts.begin();
     29        iter != hosts.end(); ++iter) {
     30     if (crash)
     31       (*iter)->Send(new PpapiMsg_Crash());
     32     else
     33       (*iter)->Send(new PpapiMsg_Hang());
     34   }
     35 #endif
     36 }
     37 
     38 }  // namespace
     39 
     40 bool HandleDebugURL(const GURL& url, PageTransition transition) {
     41   // Ensure that the user explicitly navigated to this URL.
     42   if (!(transition & PAGE_TRANSITION_FROM_ADDRESS_BAR))
     43     return false;
     44 
     45   if (url.host() == kChromeUIBrowserCrashHost) {
     46     // Induce an intentional crash in the browser process.
     47     CHECK(false);
     48     return true;
     49   }
     50 
     51   if (url == GURL(kChromeUIGpuCleanURL)) {
     52     GpuProcessHostUIShim* shim = GpuProcessHostUIShim::GetOneInstance();
     53     if (shim)
     54       shim->SimulateRemoveAllContext();
     55     return true;
     56   }
     57 
     58   if (url == GURL(kChromeUIGpuCrashURL)) {
     59     GpuProcessHostUIShim* shim = GpuProcessHostUIShim::GetOneInstance();
     60     if (shim)
     61       shim->SimulateCrash();
     62     return true;
     63   }
     64 
     65   if (url == GURL(kChromeUIGpuHangURL)) {
     66     GpuProcessHostUIShim* shim = GpuProcessHostUIShim::GetOneInstance();
     67     if (shim)
     68       shim->SimulateHang();
     69     return true;
     70   }
     71 
     72   if (url == GURL(kChromeUIPpapiFlashCrashURL) ||
     73       url == GURL(kChromeUIPpapiFlashHangURL)) {
     74     BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
     75                             base::Bind(&HandlePpapiFlashDebugURL, url));
     76     return true;
     77   }
     78 
     79   return false;
     80 }
     81 
     82 }  // namespace content
     83