Index: chrome/browser/extensions/api/app_window/app_window_api.cc |
diff --git a/chrome/browser/extensions/api/app_window/app_window_api.cc b/chrome/browser/extensions/api/app_window/app_window_api.cc |
index c6623e0532280417d43dfa9d36bc177cafa3a36b..199fbf4b9afcf5c70f65f9c120e15ee1d71df112 100644 |
--- a/chrome/browser/extensions/api/app_window/app_window_api.cc |
+++ b/chrome/browser/extensions/api/app_window/app_window_api.cc |
@@ -52,6 +52,8 @@ const char kConflictingBoundsOptions[] = |
"The $1 property cannot be specified for both inner and outer bounds."; |
const char kAlwaysOnTopPermission[] = |
"The \"app.window.alwaysOnTop\" permission is required."; |
+const char kInvalidUrlParameter[] = |
+ "The URL used for window creation must be local for security reasons."; |
} // namespace app_window_constants |
const char kNoneFrameOption[] = "none"; |
@@ -152,10 +154,15 @@ bool AppWindowCreateFunction::RunAsync() { |
GURL url = GetExtension()->GetResourceURL(params->url); |
// Allow absolute URLs for component apps, otherwise prepend the extension |
// path. |
- if (GetExtension()->location() == extensions::Manifest::COMPONENT) { |
- GURL absolute = GURL(params->url); |
- if (absolute.has_scheme()) |
+ GURL absolute = GURL(params->url); |
+ if (absolute.has_scheme()) { |
+ if (GetExtension()->location() == extensions::Manifest::COMPONENT) { |
url = absolute; |
+ } else { |
+ // Show error when url passed isn't local. |
+ error_ = app_window_constants::kInvalidUrlParameter; |
+ return false; |
+ } |
} |
// TODO(jeremya): figure out a way to pass the opening WebContents through to |