Home | History | Annotate | Download | only in infobars
      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_host.h"
     12 #include "chrome/browser/extensions/extension_infobar_delegate.h"
     13 #include "chrome/browser/extensions/extension_tab_util.h"
     14 #include "chrome/browser/extensions/window_controller.h"
     15 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
     16 #include "chrome/browser/infobars/infobar_service.h"
     17 #include "chrome/browser/ui/browser.h"
     18 #include "chrome/common/extensions/extension.h"
     19 #include "chrome/common/url_constants.h"
     20 #include "content/public/browser/web_contents.h"
     21 #include "extensions/common/error_utils.h"
     22 #include "grit/generated_resources.h"
     23 
     24 using extensions::Extension;
     25 
     26 namespace {
     27 
     28 const char kHtmlPath[] = "path";
     29 const char kTabId[] = "tabId";
     30 const char kHeight[] = "height";
     31 
     32 }  // namespace
     33 
     34 bool InfobarsShowFunction::RunImpl() {
     35   DictionaryValue* args;
     36   EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args));
     37 
     38   int tab_id;
     39   EXTENSION_FUNCTION_VALIDATE(args->GetInteger(kTabId, &tab_id));
     40 
     41   std::string html_path;
     42   EXTENSION_FUNCTION_VALIDATE(args->GetString(kHtmlPath, &html_path));
     43 
     44   int height = 0;
     45   if (args->HasKey(kHeight))
     46     EXTENSION_FUNCTION_VALIDATE(args->GetInteger(kHeight, &height));
     47 
     48   const Extension* extension = GetExtension();
     49   GURL url = extension->GetResourceURL(extension->url(), html_path);
     50 
     51   Browser* browser = NULL;
     52   content::WebContents* web_contents = NULL;
     53   if (!ExtensionTabUtil::GetTabById(
     54       tab_id,
     55       profile(),
     56       include_incognito(),
     57       &browser,
     58       NULL,
     59       &web_contents,
     60       NULL)) {
     61     error_ = extensions::ErrorUtils::FormatErrorMessage(
     62         extensions::tabs_constants::kTabNotFoundError,
     63         base::IntToString(tab_id));
     64     return false;
     65   }
     66 
     67   ExtensionInfoBarDelegate::Create(
     68       InfoBarService::FromWebContents(web_contents), browser, GetExtension(),
     69       url, height);
     70 
     71   // TODO(finnur): Return the actual DOMWindow object. Bug 26463.
     72   DCHECK(browser->extension_window_controller());
     73   SetResult(browser->extension_window_controller()->CreateWindowValue());
     74 
     75   return true;
     76 }
     77