Re-subimission of https://codereview.chromium.org/1041213003/
[chromium-blink-merge.git] / content / browser / webui / generic_handler.cc
blobb26bcd9294a3232e2c4738a4f94596d9c0d9d52e
1 // Copyright (c) 2011 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.
5 #include "content/browser/webui/generic_handler.h"
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
9 #include "base/logging.h"
10 #include "base/values.h"
11 #include "content/public/browser/web_ui.h"
12 #include "content/public/browser/web_contents.h"
13 #include "ui/base/window_open_disposition.h"
15 namespace content {
17 GenericHandler::GenericHandler() {
20 GenericHandler::~GenericHandler() {
23 void GenericHandler::RegisterMessages() {
24 web_ui()->RegisterMessageCallback("navigateToUrl",
25 base::Bind(&GenericHandler::HandleNavigateToUrl, base::Unretained(this)));
28 void GenericHandler::HandleNavigateToUrl(const base::ListValue* args) {
29 std::string url_string;
30 std::string target_string;
31 double button;
32 bool alt_key;
33 bool ctrl_key;
34 bool meta_key;
35 bool shift_key;
37 CHECK(args->GetString(0, &url_string));
38 CHECK(args->GetString(1, &target_string));
39 CHECK(args->GetDouble(2, &button));
40 CHECK(args->GetBoolean(3, &alt_key));
41 CHECK(args->GetBoolean(4, &ctrl_key));
42 CHECK(args->GetBoolean(5, &meta_key));
43 CHECK(args->GetBoolean(6, &shift_key));
45 CHECK(button == 0.0 || button == 1.0);
46 bool middle_button = (button == 1.0);
48 WindowOpenDisposition disposition = ui::DispositionFromClick(
49 middle_button, alt_key, ctrl_key, meta_key, shift_key);
50 if (disposition == CURRENT_TAB && target_string == "_blank")
51 disposition = NEW_FOREGROUND_TAB;
53 web_ui()->GetWebContents()->OpenURL(OpenURLParams(GURL(url_string),
54 Referrer(),
55 disposition,
56 ui::PAGE_TRANSITION_LINK,
57 false));
59 // This may delete us!
62 } // namespace content