1// Copyright (c) 2012 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 "chrome/browser/infobars/infobar_extension_api.h" 6 7#include "base/strings/string_number_conversions.h" 8#include "base/strings/string_util.h" 9#include "base/values.h" 10#include "chrome/browser/extensions/api/tabs/tabs_constants.h" 11#include "chrome/browser/extensions/extension_infobar_delegate.h" 12#include "chrome/browser/extensions/extension_tab_util.h" 13#include "chrome/browser/extensions/window_controller.h" 14#include "chrome/browser/ui/browser.h" 15#include "chrome/common/url_constants.h" 16#include "content/public/browser/web_contents.h" 17#include "extensions/browser/extension_host.h" 18#include "extensions/common/error_utils.h" 19#include "extensions/common/extension.h" 20#include "grit/generated_resources.h" 21 22bool InfobarsShowFunction::RunSync() { 23 base::DictionaryValue* args; 24 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); 25 26 const char kTabId[] = "tabId"; 27 int tab_id; 28 EXTENSION_FUNCTION_VALIDATE(args->GetInteger(kTabId, &tab_id)); 29 30 const char kHtmlPath[] = "path"; 31 std::string html_path; 32 EXTENSION_FUNCTION_VALIDATE(args->GetString(kHtmlPath, &html_path)); 33 34 const char kHeight[] = "height"; 35 int height = 0; 36 if (args->HasKey(kHeight)) 37 EXTENSION_FUNCTION_VALIDATE(args->GetInteger(kHeight, &height)); 38 39 Browser* browser = NULL; 40 content::WebContents* web_contents = NULL; 41 if (!extensions::ExtensionTabUtil::GetTabById(tab_id, GetProfile(), 42 include_incognito(), &browser, 43 NULL, &web_contents, NULL)) { 44 error_ = extensions::ErrorUtils::FormatErrorMessage( 45 extensions::tabs_constants::kTabNotFoundError, 46 base::IntToString(tab_id)); 47 return false; 48 } 49 const extensions::Extension* extension = GetExtension(); 50 GURL url(extension->GetResourceURL(extension->url(), html_path)); 51 ExtensionInfoBarDelegate::Create(web_contents, browser, GetExtension(), url, 52 height); 53 54 // TODO(finnur): Return the actual DOMWindow object. Bug 26463. 55 DCHECK(browser->extension_window_controller()); 56 SetResult(browser->extension_window_controller()->CreateWindowValue()); 57 58 return true; 59} 60