1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_infobar_module.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string_number_conversions.h"
8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "base/string_util.h"
93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/values.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_host.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_infobar_delegate.h"
12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/extensions/extension_infobar_module_constants.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_tabs_module.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_tabs_module_constants.h"
15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/tab_contents/confirm_infobar_delegate.h"
164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser.h"
1721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension.h"
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension_error_utils.h"
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/url_constants.h"
21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h"
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h"
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace keys = extension_infobar_module_constants;
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool ShowInfoBarFunction::RunImpl() {
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DictionaryValue* args;
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args));
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int tab_id;
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kTabId, &tab_id));
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string html_path;
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kHtmlPath, &html_path));
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  const Extension* extension = GetExtension();
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GURL url = extension->GetResourceURL(extension->url(), html_path);
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Browser* browser = NULL;
40201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  TabContentsWrapper* tab_contents = NULL;
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!ExtensionTabUtil::GetTabById(
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      tab_id,
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      profile(),
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      include_incognito(),
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      &browser,
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NULL,
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      &tab_contents,
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NULL)) {
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    error_ = ExtensionErrorUtils::FormatErrorMessage(
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        extension_tabs_module_constants::kTabNotFoundError,
513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        base::IntToString(tab_id));
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return false;
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
55201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  tab_contents->tab_contents()->AddInfoBar(
56201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      new ExtensionInfoBarDelegate(browser, tab_contents->tab_contents(),
57201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                   GetExtension(), url));
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TODO(finnur): Return the actual DOMWindow object. Bug 26463.
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  result_.reset(ExtensionTabUtil::CreateWindowValue(browser, false));
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return true;
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
64