Chromium Code Reviews| Index: chrome/browser/extensions/extension_toolstrip_api.cc |
| diff --git a/chrome/browser/extensions/extension_toolstrip_api.cc b/chrome/browser/extensions/extension_toolstrip_api.cc |
| index a502dcaa7196bc41cdd49153a3a43a9e5cd986a6..5c58a5e822cedee3f313b1821a422c1c60057cd5 100644 |
| --- a/chrome/browser/extensions/extension_toolstrip_api.cc |
| +++ b/chrome/browser/extensions/extension_toolstrip_api.cc |
| @@ -33,6 +33,21 @@ const char kBadHeightError[] = "Bad height."; |
| // TODO(erikkay) what are good values here? |
| const int kMinHeight = 50; |
| const int kMaxHeight = 1000; |
| + |
| +// If |url_string| is a valid URL, simply return that, otherwise see if it's |
| +// a valid extension URL, relative to the |current_url|. |
| +static GURL ResolveURLForExtension(const std::string& url_string, |
|
Matt Perry
2009/09/15 20:31:57
I think Resolve works on absolute URLs too, so thi
|
| + const GURL& current_url, |
| + Extension *extension) { |
| + GURL url = GURL(url_string); |
| + if (!url.is_valid()) { |
| + url = current_url.Resolve(url_string); |
| + if (url.is_empty()) |
| + return url; |
| + } |
| + return url; |
| +} |
| + |
| }; // namespace |
| namespace keys = extension_tabs_module_constants; |
| @@ -82,14 +97,15 @@ bool ToolstripExpandFunction::RunImpl() { |
| return false; |
| } |
| - |
| GURL url; |
| if (args->HasKey(keys::kUrlKey)) { |
| std::string url_string; |
| EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kUrlKey, |
| &url_string)); |
| - url = GURL(url_string); |
| - if (!url.is_valid() && !url.is_empty()) { |
| + url = ResolveURLForExtension(url_string, |
| + dispatcher()->url(), |
| + dispatcher()->GetExtension()); |
| + if (!url.is_valid()) { |
| error_ = kInvalidURLError; |
| return false; |
| } |
| @@ -117,8 +133,10 @@ bool ToolstripCollapseFunction::RunImpl() { |
| std::string url_string; |
| EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kUrlKey, |
| &url_string)); |
| - url = GURL(url_string); |
| - if (!url.is_valid() && !url.is_empty()) { |
| + url = ResolveURLForExtension(url_string, |
| + dispatcher()->url(), |
| + dispatcher()->GetExtension()); |
| + if (!url.is_valid()) { |
| error_ = kInvalidURLError; |
| return false; |
| } |