Commit eed3392d authored by gbillock@chromium.org's avatar gbillock@chromium.org

Update to handle absolute-looking paths in manifests and still produce nice-looking URLs.

R=aa@chromium.org
BUG=127316
TEST=ExtensionTest.GetResourceURLAndPath,WebIntentsRegistryTest.GetIntentServicesForExtensionFilter

Review URL: https://chromiumcodereview.appspot.com/10384072

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@137169 0039d316-1c4b-4281-b951-d872f2087c98
parent 1012d1f2
...@@ -239,6 +239,9 @@ TEST_F(WebIntentsRegistryTest, GetIntentServicesForExtensionFilter) { ...@@ -239,6 +239,9 @@ TEST_F(WebIntentsRegistryTest, GetIntentServicesForExtensionFilter) {
base::Unretained(&consumer))); base::Unretained(&consumer)));
consumer.WaitForData(); consumer.WaitForData();
ASSERT_EQ(1U, consumer.services_.size()); ASSERT_EQ(1U, consumer.services_.size());
EXPECT_EQ(edit_extension->url().spec() + "services/edit",
consumer.services_[0].service_url.spec());
} }
TEST_F(WebIntentsRegistryTest, GetAllIntents) { TEST_F(WebIntentsRegistryTest, GetAllIntents) {
......
...@@ -435,7 +435,15 @@ GURL Extension::GetResourceURL(const GURL& extension_url, ...@@ -435,7 +435,15 @@ GURL Extension::GetResourceURL(const GURL& extension_url,
DCHECK(extension_url.SchemeIs(chrome::kExtensionScheme)); DCHECK(extension_url.SchemeIs(chrome::kExtensionScheme));
DCHECK_EQ("/", extension_url.path()); DCHECK_EQ("/", extension_url.path());
GURL ret_val = GURL(extension_url.spec() + relative_path); std::string path = relative_path;
// If the relative path starts with "/", it is "absolute" relative to the
// extension base directory, but extension_url is already specified to refer
// to that base directory, so strip the leading "/" if present.
if (relative_path.size() > 0 && relative_path[0] == '/')
path = relative_path.substr(1);
GURL ret_val = GURL(extension_url.spec() + path);
DCHECK(StartsWithASCII(ret_val.spec(), extension_url.spec(), false)); DCHECK(StartsWithASCII(ret_val.spec(), extension_url.spec(), false));
return ret_val; return ret_val;
......
...@@ -176,6 +176,10 @@ TEST(ExtensionTest, GetResourceURLAndPath) { ...@@ -176,6 +176,10 @@ TEST(ExtensionTest, GetResourceURLAndPath) {
"bar/../baz.js").spec()); "bar/../baz.js").spec());
EXPECT_EQ(extension->url().spec() + "baz.js", EXPECT_EQ(extension->url().spec() + "baz.js",
Extension::GetResourceURL(extension->url(), "../baz.js").spec()); Extension::GetResourceURL(extension->url(), "../baz.js").spec());
// Test that absolute-looking paths ("/"-prefixed) are pasted correctly.
EXPECT_EQ(extension->url().spec() + "test.html",
extension->GetResourceURL("/test.html").spec());
} }
TEST(ExtensionTest, GetAbsolutePathNoError) { TEST(ExtensionTest, GetAbsolutePathNoError) {
......
...@@ -73,7 +73,7 @@ TEST_F(ExtensionManifestTest, WebIntents) { ...@@ -73,7 +73,7 @@ TEST_F(ExtensionManifestTest, WebIntents) {
UTF16ToUTF8(extension->intents_services()[0].action)); UTF16ToUTF8(extension->intents_services()[0].action));
EXPECT_EQ("chrome-extension", EXPECT_EQ("chrome-extension",
extension->intents_services()[0].service_url.scheme()); extension->intents_services()[0].service_url.scheme());
EXPECT_EQ("//services/share", EXPECT_EQ("/services/share",
extension->intents_services()[0].service_url.path()); extension->intents_services()[0].service_url.path());
EXPECT_EQ("Sample Sharing Intent", EXPECT_EQ("Sample Sharing Intent",
UTF16ToUTF8(extension->intents_services()[0].title)); UTF16ToUTF8(extension->intents_services()[0].title));
...@@ -96,7 +96,7 @@ TEST_F(ExtensionManifestTest, WebIntents) { ...@@ -96,7 +96,7 @@ TEST_F(ExtensionManifestTest, WebIntents) {
extension = LoadAndExpectSuccess("intent_valid_using_href.json"); extension = LoadAndExpectSuccess("intent_valid_using_href.json");
ASSERT_TRUE(extension.get() != NULL); ASSERT_TRUE(extension.get() != NULL);
ASSERT_EQ(1u, extension->intents_services().size()); ASSERT_EQ(1u, extension->intents_services().size());
EXPECT_EQ("//services/share", EXPECT_EQ("/services/share",
extension->intents_services()[0].service_url.path()); extension->intents_services()[0].service_url.path());
} }
...@@ -114,7 +114,7 @@ TEST_F(ExtensionManifestTest, WebIntentsWithMultipleMimeTypes) { ...@@ -114,7 +114,7 @@ TEST_F(ExtensionManifestTest, WebIntentsWithMultipleMimeTypes) {
UTF16ToUTF8(extension->intents_services()[i].action)); UTF16ToUTF8(extension->intents_services()[i].action));
EXPECT_EQ("chrome-extension", EXPECT_EQ("chrome-extension",
extension->intents_services()[i].service_url.scheme()); extension->intents_services()[i].service_url.scheme());
EXPECT_EQ("//services/share", EXPECT_EQ("/services/share",
extension->intents_services()[i].service_url.path()); extension->intents_services()[i].service_url.path());
EXPECT_EQ("Sample Sharing Intent", EXPECT_EQ("Sample Sharing Intent",
UTF16ToUTF8(extension->intents_services()[i].title)); UTF16ToUTF8(extension->intents_services()[i].title));
...@@ -164,11 +164,11 @@ TEST_F(ExtensionManifestTest, WebIntentsMultiHref) { ...@@ -164,11 +164,11 @@ TEST_F(ExtensionManifestTest, WebIntentsMultiHref) {
extension->intents_services(); extension->intents_services();
EXPECT_EQ("chrome-extension", intents[0].service_url.scheme()); EXPECT_EQ("chrome-extension", intents[0].service_url.scheme());
EXPECT_EQ("//services/sharelink.html",intents[0].service_url.path()); EXPECT_EQ("/services/sharelink.html",intents[0].service_url.path());
EXPECT_EQ("text/uri-list",UTF16ToUTF8(intents[0].type)); EXPECT_EQ("text/uri-list",UTF16ToUTF8(intents[0].type));
EXPECT_EQ("chrome-extension", intents[1].service_url.scheme()); EXPECT_EQ("chrome-extension", intents[1].service_url.scheme());
EXPECT_EQ("//services/shareimage.html",intents[1].service_url.path()); EXPECT_EQ("/services/shareimage.html",intents[1].service_url.path());
EXPECT_EQ("image/*",UTF16ToUTF8(intents[1].type)); EXPECT_EQ("image/*",UTF16ToUTF8(intents[1].type));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment