15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/infobars/infobar_extension_api.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/tabs/tabs_constants.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_infobar_delegate.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_tab_util.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/window_controller.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/profiles/profile.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "extensions/browser/extension_host.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/error_utils.h" 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liubool InfobarsShowFunction::RunSync() { 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* args; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const char kTabId[] = "tabId"; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tab_id; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(args->GetInteger(kTabId, &tab_id)); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const char kHtmlPath[] = "path"; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string html_path; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(args->GetString(kHtmlPath, &html_path)); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const char kHeight[] = "height"; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int height = 0; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (args->HasKey(kHeight)) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(args->GetInteger(kHeight, &height)); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser = NULL; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents = NULL; 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!extensions::ExtensionTabUtil::GetTabById(tab_id, GetProfile(), 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) include_incognito(), &browser, 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) NULL, &web_contents, NULL)) { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error_ = extensions::ErrorUtils::FormatErrorMessage( 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::tabs_constants::kTabNotFoundError, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::IntToString(tab_id)); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GURL url(extension()->GetResourceURL(extension()->url(), html_path)); 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExtensionInfoBarDelegate::Create( 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) web_contents, browser, extension(), url, height); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(finnur): Return the actual DOMWindow object. Bug 26463. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(browser->extension_window_controller()); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetResult(browser->extension_window_controller()->CreateWindowValue()); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 59