| // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/renderer/about_handler.h" |
| |
| #include "base/platform_thread.h" |
| #include "googleurl/src/gurl.h" |
| |
| struct AboutHandlerUrl { |
| const char *url; |
| void (*action)(); |
| }; |
| |
| static AboutHandlerUrl about_urls[] = { |
| { "about:crash", AboutHandler::AboutCrash }, |
| { "about:hang", AboutHandler::AboutHang }, |
| { "about:shorthang", AboutHandler::AboutShortHang }, |
| { NULL, NULL } |
| }; |
| |
| bool AboutHandler::WillHandle(const GURL& url) { |
| if (url.scheme() != "about") |
| return false; |
| |
| struct AboutHandlerUrl* url_handler = about_urls; |
| while (url_handler->url) { |
| if (url == GURL(url_handler->url)) |
| return true; |
| url_handler++; |
| } |
| return false; |
| } |
| |
| // static |
| bool AboutHandler::MaybeHandle(const GURL& url) { |
| if (url.scheme() != "about") |
| return false; |
| |
| struct AboutHandlerUrl* url_handler = about_urls; |
| while (url_handler->url) { |
| if (url == GURL(url_handler->url)) { |
| url_handler->action(); |
| return true; // theoretically :] |
| } |
| url_handler++; |
| } |
| return false; |
| } |
| |
| // static |
| void AboutHandler::AboutCrash() { |
| int *zero = NULL; |
| *zero = 0; // Null pointer dereference: kaboom! |
| } |
| |
| // static |
| void AboutHandler::AboutHang() { |
| for (;;) { |
| PlatformThread::Sleep(1000); |
| } |
| } |
| |
| // static |
| void AboutHandler::AboutShortHang() { |
| PlatformThread::Sleep(20000); |
| } |
| |