| Index: chrome/browser/extensions/extension_sidebar_api.cc
|
| ===================================================================
|
| --- chrome/browser/extensions/extension_sidebar_api.cc (revision 71115)
|
| +++ chrome/browser/extensions/extension_sidebar_api.cc (working copy)
|
| @@ -20,15 +20,16 @@
|
| #include "chrome/common/extensions/extension.h"
|
| #include "chrome/common/extensions/extension_constants.h"
|
| #include "chrome/common/extensions/extension_error_utils.h"
|
| +#include "chrome/common/extensions/extension_sidebar_utils.h"
|
| #include "chrome/common/render_messages.h"
|
| -#include "chrome/common/url_constants.h"
|
| #include "ipc/ipc_message_utils.h"
|
| #include "third_party/skia/include/core/SkBitmap.h"
|
|
|
| namespace {
|
| // Errors.
|
| +const char kNoSidebarError[] =
|
| + "This extension has no sidebar specified.";
|
| const char kNoTabError[] = "No tab with id: *.";
|
| -const char kInvalidUrlError[] = "Invalid url: \"*\".";
|
| const char kNoCurrentWindowError[] = "No current browser window was found";
|
| const char kNoDefaultTabError[] = "No default tab was found";
|
| const char kInvalidExpandContextError[] =
|
| @@ -49,32 +50,8 @@
|
| const char kActiveState[] = "active";
|
| const char kHiddenState[] = "hidden";
|
| const char kShownState[] = "shown";
|
| -}
|
| +} // namespace extension_sidebar_constants
|
|
|
| -static GURL ResolvePossiblyRelativeURL(const std::string& url_string,
|
| - const Extension* extension) {
|
| - GURL url = GURL(url_string);
|
| - if (!url.is_valid())
|
| - url = extension->GetResourceURL(url_string);
|
| -
|
| - return url;
|
| -}
|
| -
|
| -static bool CanUseHost(const Extension* extension,
|
| - const GURL& url,
|
| - std::string* error) {
|
| - if (extension->HasHostPermission(url))
|
| - return true;
|
| -
|
| - if (error) {
|
| - *error = ExtensionErrorUtils::FormatErrorMessage(
|
| - extension_manifest_errors::kCannotAccessPage, url.spec());
|
| - }
|
| -
|
| - return false;
|
| -}
|
| -
|
| -
|
| // static
|
| void ExtensionSidebarEventRouter::OnStateChanged(
|
| Profile* profile, TabContents* tab, const std::string& content_id,
|
| @@ -89,9 +66,9 @@
|
| std::string json_args;
|
| base::JSONWriter::Write(&args, false, &json_args);
|
|
|
| - const std::string& extension_id(content_id);
|
| profile->GetExtensionEventRouter()->DispatchEventToExtension(
|
| - extension_id, kOnStateChanged, json_args, profile, GURL());
|
| + extension_sidebar_utils::GetExtensionIdByContentId(content_id),
|
| + kOnStateChanged, json_args, profile, GURL());
|
| }
|
|
|
|
|
| @@ -111,6 +88,11 @@
|
| }
|
|
|
| bool SidebarFunction::RunImpl() {
|
| + if (!GetExtension()->sidebar_defaults()) {
|
| + error_ = kNoSidebarError;
|
| + return false;
|
| + }
|
| +
|
| if (!args_.get())
|
| return false;
|
|
|
| @@ -224,24 +206,13 @@
|
| const DictionaryValue& details) {
|
| std::string url_string;
|
| EXTENSION_FUNCTION_VALIDATE(details.GetString(kUrlKey, &url_string));
|
| - GURL url = ResolvePossiblyRelativeURL(url_string, GetExtension());
|
| - if (!url.is_valid()) {
|
| - error_ = ExtensionErrorUtils::FormatErrorMessage(kInvalidUrlError,
|
| - url_string);
|
| +
|
| + GURL url = extension_sidebar_utils::ResolveAndVerifyUrl(
|
| + url_string, GetExtension(), &error_);
|
| + if (!url.is_valid())
|
| return false;
|
| - }
|
| - if (!url.SchemeIs(chrome::kExtensionScheme) &&
|
| - !CanUseHost(GetExtension(), url, &error_)) {
|
| - return false;
|
| - }
|
| - // Disallow requests outside of the requesting extension view's extension.
|
| - if (url.SchemeIs(chrome::kExtensionScheme)) {
|
| - std::string extension_id(url.host());
|
| - if (extension_id != GetExtension()->id())
|
| - return false;
|
| - }
|
|
|
| - SidebarManager::GetInstance()->NavigateSidebar(tab, content_id, GURL(url));
|
| + SidebarManager::GetInstance()->NavigateSidebar(tab, content_id, url);
|
| return true;
|
| }
|
|
|
|
|