| // Copyright (c) 2012 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/browser/infobars/infobar_extension_api.h" |
| |
| #include "base/strings/string_number_conversions.h" |
| #include "base/strings/string_util.h" |
| #include "base/values.h" |
| #include "chrome/browser/extensions/api/tabs/tabs_constants.h" |
| #include "chrome/browser/extensions/extension_host.h" |
| #include "chrome/browser/extensions/extension_infobar_delegate.h" |
| #include "chrome/browser/extensions/extension_tab_util.h" |
| #include "chrome/browser/extensions/window_controller.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/common/url_constants.h" |
| #include "content/public/browser/web_contents.h" |
| #include "extensions/common/error_utils.h" |
| #include "extensions/common/extension.h" |
| #include "grit/generated_resources.h" |
| |
| |
| bool InfobarsShowFunction::RunImpl() { |
| DictionaryValue* args; |
| EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); |
| |
| const char kTabId[] = "tabId"; |
| int tab_id; |
| EXTENSION_FUNCTION_VALIDATE(args->GetInteger(kTabId, &tab_id)); |
| |
| const char kHtmlPath[] = "path"; |
| std::string html_path; |
| EXTENSION_FUNCTION_VALIDATE(args->GetString(kHtmlPath, &html_path)); |
| |
| const char kHeight[] = "height"; |
| int height = 0; |
| if (args->HasKey(kHeight)) |
| EXTENSION_FUNCTION_VALIDATE(args->GetInteger(kHeight, &height)); |
| |
| Browser* browser = NULL; |
| content::WebContents* web_contents = NULL; |
| if (!extensions::ExtensionTabUtil::GetTabById(tab_id, GetProfile(), |
| include_incognito(), &browser, |
| NULL, &web_contents, NULL)) { |
| error_ = extensions::ErrorUtils::FormatErrorMessage( |
| extensions::tabs_constants::kTabNotFoundError, |
| base::IntToString(tab_id)); |
| return false; |
| } |
| const extensions::Extension* extension = GetExtension(); |
| GURL url(extension->GetResourceURL(extension->url(), html_path)); |
| ExtensionInfoBarDelegate::Create(web_contents, browser, GetExtension(), url, |
| height); |
| |
| // TODO(finnur): Return the actual DOMWindow object. Bug 26463. |
| DCHECK(browser->extension_window_controller()); |
| SetResult(browser->extension_window_controller()->CreateWindowValue()); |
| |
| return true; |
| } |