- add sources.
[platform/framework/web/crosswalk.git] / src / content / browser / webui / generic_handler.cc
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.
4
5 #include "content/browser/webui/generic_handler.h"
6
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"
14
15 namespace content {
16
17 GenericHandler::GenericHandler() {
18 }
19
20 GenericHandler::~GenericHandler() {
21 }
22
23 void GenericHandler::RegisterMessages() {
24   web_ui()->RegisterMessageCallback("navigateToUrl",
25       base::Bind(&GenericHandler::HandleNavigateToUrl, base::Unretained(this)));
26 }
27
28 void GenericHandler::HandleNavigateToUrl(const 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;
36
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));
44
45   CHECK(button == 0.0 || button == 1.0);
46   bool middle_button = (button == 1.0);
47
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;
52
53   web_ui()->GetWebContents()->OpenURL(OpenURLParams(
54       GURL(url_string), Referrer(), disposition, PAGE_TRANSITION_LINK, false));
55
56   // This may delete us!
57 }
58
59 }  // namespace content