summaryrefslogtreecommitdiffstats
path: root/ppapi
diff options
context:
space:
mode:
authorpiman@google.com <piman@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-02 21:04:28 +0000
committerpiman@google.com <piman@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-02 21:04:28 +0000
commitb45c651999ef987ad88e314b90b39996b5c6d632 (patch)
tree40908ac7f69ec68233bbfe3445aa284c7105442a /ppapi
parenta5ae58faedf27b7964eae66ee14839ec53e9ec2d (diff)
downloadchromium_src-b45c651999ef987ad88e314b90b39996b5c6d632.zip
chromium_src-b45c651999ef987ad88e314b90b39996b5c6d632.tar.gz
chromium_src-b45c651999ef987ad88e314b90b39996b5c6d632.tar.bz2
Add PPB_URLUtil_Dev::GetDocumentURL
This also renames "Url" into "URL" for consistency. BUG=74569 TEST=http://www.espn.go.com/nba/ Review URL: http://codereview.chromium.org/6594107 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76608 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi')
-rw-r--r--ppapi/c/dev/ppb_url_util_dev.h50
-rw-r--r--ppapi/cpp/dev/url_util_dev.cc34
-rw-r--r--ppapi/cpp/dev/url_util_dev.h28
-rw-r--r--ppapi/tests/test_url_util.cc38
-rw-r--r--ppapi/tests/test_url_util.h9
5 files changed, 94 insertions, 65 deletions
diff --git a/ppapi/c/dev/ppb_url_util_dev.h b/ppapi/c/dev/ppb_url_util_dev.h
index 9ea8305..2cdad5f 100644
--- a/ppapi/c/dev/ppb_url_util_dev.h
+++ b/ppapi/c/dev/ppb_url_util_dev.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010 The Chromium Authors. All rights reserved.
+/* Copyright (c) 2011 The Chromium Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
@@ -11,7 +11,7 @@
#include "ppapi/c/pp_stdint.h"
#include "ppapi/c/pp_var.h"
-#define PPB_URLUTIL_DEV_INTERFACE "PPB_UrlUtil(Dev);0.4"
+#define PPB_URLUTIL_DEV_INTERFACE "PPB_URLUtil(Dev);0.5"
// A component specifies the range of the part of the URL. The begin specifies
// the index into the string of the first character of that component. The len
@@ -29,30 +29,30 @@
// If the component is present but empty, the length will be 0 instead. Example:
// http://foo/search -> query = (0, -1)
// http://foo/search? -> query = (18, 0)
-struct PP_UrlComponent_Dev {
+struct PP_URLComponent_Dev {
int32_t begin;
int32_t len;
};
-PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_UrlComponent_Dev, 8);
+PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_URLComponent_Dev, 8);
-struct PP_UrlComponents_Dev {
- struct PP_UrlComponent_Dev scheme;
- struct PP_UrlComponent_Dev username;
- struct PP_UrlComponent_Dev password;
- struct PP_UrlComponent_Dev host;
- struct PP_UrlComponent_Dev port;
- struct PP_UrlComponent_Dev path;
- struct PP_UrlComponent_Dev query;
- struct PP_UrlComponent_Dev ref;
+struct PP_URLComponents_Dev {
+ struct PP_URLComponent_Dev scheme;
+ struct PP_URLComponent_Dev username;
+ struct PP_URLComponent_Dev password;
+ struct PP_URLComponent_Dev host;
+ struct PP_URLComponent_Dev port;
+ struct PP_URLComponent_Dev path;
+ struct PP_URLComponent_Dev query;
+ struct PP_URLComponent_Dev ref;
};
-PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_UrlComponents_Dev, 64);
+PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_URLComponents_Dev, 64);
// URL encoding: URLs are supplied to this interface as NULL-terminated 8-bit
// strings. You can pass non-ASCII characters which will be interpreted as
// UTF-8. Canonicalized URL strings returned by these functions will be ASCII
// except for the reference fragment (stuff after the '#') which will be
// encoded as UTF-8.
-struct PPB_UrlUtil_Dev {
+struct PPB_URLUtil_Dev {
// Canonicalizes the given URL string according to the rules of the host
// browser. If the URL is invalid or the var is not a string, this will
// return a Null var and the components structure will be unchanged.
@@ -61,14 +61,14 @@ struct PPB_UrlUtil_Dev {
// will identify the components of the resulting URL. Components may be NULL
// to specify that no component information is necessary.
struct PP_Var (*Canonicalize)(struct PP_Var url,
- struct PP_UrlComponents_Dev* components);
+ struct PP_URLComponents_Dev* components);
// Resolves the given URL relative to the given base URL. The resulting URL
// is returned as a string. If the resolution is invalid or either of the
// inputs are not strings, a Null var will be returned. The resulting URL
// will also be canonicalized according to the rules of the browser.
//
- // Note that the "relative" URL bay in fact be absolute, in which case it
+ // Note that the "relative" URL may in fact be absolute, in which case it
// will be returned. This function is identical to resolving the full URL
// for an <a href="..."> on a web page. Attempting to resolve a relative URL
// on a base URL that doesn't support this (e.g. "data") will fail and will
@@ -77,12 +77,12 @@ struct PPB_UrlUtil_Dev {
// The components pointer, if non-NULL and the canonicalized URL is valid,
// will identify the components of the resulting URL. Components may be NULL
// to specify that no component information is necessary.
- struct PP_Var (*ResolveRelativeToUrl)(
+ struct PP_Var (*ResolveRelativeToURL)(
struct PP_Var base_url,
struct PP_Var relative_string,
- struct PP_UrlComponents_Dev* components);
+ struct PP_URLComponents_Dev* components);
- // Identical to ResolveRelativeToUrl except that the base URL is the base
+ // Identical to ResolveRelativeToURL except that the base URL is the base
// URL of the document containing the given plugin instance.
//
// Danger: This will be identical to resolving a relative URL on the page,
@@ -92,7 +92,7 @@ struct PPB_UrlUtil_Dev {
struct PP_Var (*ResolveRelativeToDocument)(
PP_Instance instance,
struct PP_Var relative_string,
- struct PP_UrlComponents_Dev* components);
+ struct PP_URLComponents_Dev* components);
// Checks whether the given two URLs are in the same security origin. Returns
// FALSE if either of the URLs are invalid.
@@ -109,6 +109,14 @@ struct PPB_UrlUtil_Dev {
// and any cross-origin capabilities enabled by the document. If either of
// the plugin instances are invalid, returns PP_FALSE.
PP_Bool (*DocumentCanAccessDocument)(PP_Instance active, PP_Instance target);
+
+ // Returns the URL for the document. This is a safe way to retrieve
+ // window.location.href.
+ // The components pointer, if non-NULL and the canonicalized URL is valid,
+ // will identify the components of the resulting URL. Components may be NULL
+ // to specify that no component information is necessary.
+ struct PP_Var (*GetDocumentURL)(PP_Instance instance,
+ struct PP_URLComponents_Dev* components);
};
#endif /* PPAPI_C_DEV_PPB_URL_UTIL_DEV_H_ */
diff --git a/ppapi/cpp/dev/url_util_dev.cc b/ppapi/cpp/dev/url_util_dev.cc
index ec08856..e7b396f 100644
--- a/ppapi/cpp/dev/url_util_dev.cc
+++ b/ppapi/cpp/dev/url_util_dev.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -11,13 +11,13 @@
namespace pp {
// static
-const UrlUtil_Dev* UrlUtil_Dev::Get() {
+const URLUtil_Dev* URLUtil_Dev::Get() {
static bool tried_to_init = false;
- static UrlUtil_Dev util;
+ static URLUtil_Dev util;
if (!tried_to_init) {
tried_to_init = true;
- util.interface_ = static_cast<const PPB_UrlUtil_Dev*>(
+ util.interface_ = static_cast<const PPB_URLUtil_Dev*>(
Module::Get()->GetBrowserInterface(PPB_URLUTIL_DEV_INTERFACE));
}
@@ -26,48 +26,54 @@ const UrlUtil_Dev* UrlUtil_Dev::Get() {
return &util;
}
-Var UrlUtil_Dev::Canonicalize(const Var& url,
- PP_UrlComponents_Dev* components) const {
+Var URLUtil_Dev::Canonicalize(const Var& url,
+ PP_URLComponents_Dev* components) const {
return Var(Var::PassRef(),
interface_->Canonicalize(url.pp_var(), components));
}
-Var UrlUtil_Dev::ResolveRelativeToUrl(const Var& base_url,
+Var URLUtil_Dev::ResolveRelativeToURL(const Var& base_url,
const Var& relative_string,
- PP_UrlComponents_Dev* components) const {
+ PP_URLComponents_Dev* components) const {
return Var(Var::PassRef(),
- interface_->ResolveRelativeToUrl(base_url.pp_var(),
+ interface_->ResolveRelativeToURL(base_url.pp_var(),
relative_string.pp_var(),
components));
}
-Var UrlUtil_Dev::ResoveRelativeToDocument(
+Var URLUtil_Dev::ResoveRelativeToDocument(
const Instance& instance,
const Var& relative_string,
- PP_UrlComponents_Dev* components) const {
+ PP_URLComponents_Dev* components) const {
return Var(Var::PassRef(),
interface_->ResolveRelativeToDocument(instance.pp_instance(),
relative_string.pp_var(),
components));
}
-bool UrlUtil_Dev::IsSameSecurityOrigin(const Var& url_a,
+bool URLUtil_Dev::IsSameSecurityOrigin(const Var& url_a,
const Var& url_b) const {
return PPBoolToBool(interface_->IsSameSecurityOrigin(url_a.pp_var(),
url_b.pp_var()));
}
-bool UrlUtil_Dev::DocumentCanRequest(const Instance& instance,
+bool URLUtil_Dev::DocumentCanRequest(const Instance& instance,
const Var& url) const {
return PPBoolToBool(interface_->DocumentCanRequest(instance.pp_instance(),
url.pp_var()));
}
-bool UrlUtil_Dev::DocumentCanAccessDocument(const Instance& active,
+bool URLUtil_Dev::DocumentCanAccessDocument(const Instance& active,
const Instance& target) const {
return PPBoolToBool(
interface_->DocumentCanAccessDocument(active.pp_instance(),
target.pp_instance()));
}
+Var URLUtil_Dev::GetDocumentURL(const Instance& instance,
+ PP_URLComponents_Dev* components) const {
+ return Var(Var::PassRef(),
+ interface_->GetDocumentURL(instance.pp_instance(), components));
+}
+
} // namespace pp
diff --git a/ppapi/cpp/dev/url_util_dev.h b/ppapi/cpp/dev/url_util_dev.h
index 3be217e..4d0fa5a 100644
--- a/ppapi/cpp/dev/url_util_dev.h
+++ b/ppapi/cpp/dev/url_util_dev.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -13,39 +13,41 @@ namespace pp {
class Instance;
class Module;
-// Simple wrapper around the PPB_UrlUtil interface.
-class UrlUtil_Dev {
+// Simple wrapper around the PPB_URLUtil interface.
+class URLUtil_Dev {
public:
// This class is just a collection of random functions that aren't
// particularly attached to anything. So this getter returns a cached
// instance of this interface. This may return NULL if the browser doesn't
- // support the UrlUtil inteface. Since this is a singleton, don't delete the
+ // support the URLUtil inteface. Since this is a singleton, don't delete the
// pointer.
- static const UrlUtil_Dev* Get();
+ static const URLUtil_Dev* Get();
Var Canonicalize(const Var& url,
- PP_UrlComponents_Dev* components = NULL) const;
+ PP_URLComponents_Dev* components = NULL) const;
- Var ResolveRelativeToUrl(const Var& base_url,
+ Var ResolveRelativeToURL(const Var& base_url,
const Var& relative_string,
- PP_UrlComponents_Dev* components = NULL) const;
+ PP_URLComponents_Dev* components = NULL) const;
Var ResoveRelativeToDocument(const Instance& instance,
const Var& relative_string,
- PP_UrlComponents_Dev* components = NULL) const;
+ PP_URLComponents_Dev* components = NULL) const;
bool IsSameSecurityOrigin(const Var& url_a, const Var& url_b) const;
bool DocumentCanRequest(const Instance& instance, const Var& url) const;
bool DocumentCanAccessDocument(const Instance& active,
const Instance& target) const;
+ Var GetDocumentURL(const Instance& instance,
+ PP_URLComponents_Dev* components = NULL) const;
private:
- UrlUtil_Dev() : interface_(NULL) {}
+ URLUtil_Dev() : interface_(NULL) {}
// Copy and assignment are disallowed.
- UrlUtil_Dev(const UrlUtil_Dev& other);
- UrlUtil_Dev& operator=(const UrlUtil_Dev& other);
+ URLUtil_Dev(const URLUtil_Dev& other);
+ URLUtil_Dev& operator=(const URLUtil_Dev& other);
- const PPB_UrlUtil_Dev* interface_;
+ const PPB_URLUtil_Dev* interface_;
};
} // namespace pp
diff --git a/ppapi/tests/test_url_util.cc b/ppapi/tests/test_url_util.cc
index 0f4e112..34de996 100644
--- a/ppapi/tests/test_url_util.cc
+++ b/ppapi/tests/test_url_util.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -8,33 +8,34 @@
#include "ppapi/cpp/dev/url_util_dev.h"
#include "ppapi/tests/testing_instance.h"
-REGISTER_TEST_CASE(UrlUtil);
+REGISTER_TEST_CASE(URLUtil);
-static bool ComponentEquals(const PP_UrlComponent_Dev& component,
+static bool ComponentEquals(const PP_URLComponent_Dev& component,
int begin, int len) {
return component.begin == begin && component.len == len;
}
-bool TestUrlUtil::Init() {
- util_ = pp::UrlUtil_Dev::Get();
+bool TestURLUtil::Init() {
+ util_ = pp::URLUtil_Dev::Get();
return !!util_;
}
-void TestUrlUtil::RunTest() {
+void TestURLUtil::RunTest() {
RUN_TEST(Canonicalize);
RUN_TEST(ResolveRelative);
RUN_TEST(IsSameSecurityOrigin);
RUN_TEST(DocumentCanRequest);
RUN_TEST(DocumentCanAccessDocument);
+ RUN_TEST(GetDocumentURL);
}
-std::string TestUrlUtil::TestCanonicalize() {
+std::string TestURLUtil::TestCanonicalize() {
// Test no canonicalize output.
pp::Var result = util_->Canonicalize("http://Google.com");
ASSERT_TRUE(result.AsString() == "http://google.com/");
// Test all the components
- PP_UrlComponents_Dev c;
+ PP_URLComponents_Dev c;
result = util_->Canonicalize(
"http://me:pw@Google.com:1234/path?query#ref ",
&c);
@@ -68,7 +69,7 @@ std::string TestUrlUtil::TestCanonicalize() {
PASS();
}
-std::string TestUrlUtil::TestResolveRelative() {
+std::string TestURLUtil::TestResolveRelative() {
const int kTestCount = 6;
struct TestCase {
const char* base;
@@ -84,7 +85,7 @@ std::string TestUrlUtil::TestResolveRelative() {
};
for (int i = 0; i < kTestCount; i++) {
- pp::Var result = util_->ResolveRelativeToUrl(test_cases[i].base,
+ pp::Var result = util_->ResolveRelativeToURL(test_cases[i].base,
test_cases[i].relative);
if (test_cases[i].expected == NULL) {
ASSERT_TRUE(result.is_null());
@@ -95,7 +96,7 @@ std::string TestUrlUtil::TestResolveRelative() {
PASS();
}
-std::string TestUrlUtil::TestIsSameSecurityOrigin() {
+std::string TestURLUtil::TestIsSameSecurityOrigin() {
ASSERT_FALSE(util_->IsSameSecurityOrigin("http://google.com/",
"http://example.com/"));
ASSERT_TRUE(util_->IsSameSecurityOrigin("http://google.com/foo",
@@ -103,15 +104,26 @@ std::string TestUrlUtil::TestIsSameSecurityOrigin() {
PASS();
}
-std::string TestUrlUtil::TestDocumentCanRequest() {
+std::string TestURLUtil::TestDocumentCanRequest() {
// This is hard to test, but we can at least verify we can't request
// some random domain.
ASSERT_FALSE(util_->DocumentCanRequest(*instance_, "http://evil.com/"));
PASS();
}
-std::string TestUrlUtil::TestDocumentCanAccessDocument() {
+std::string TestURLUtil::TestDocumentCanAccessDocument() {
// This is hard to test, but we can at least verify we can access ourselves.
ASSERT_TRUE(util_->DocumentCanAccessDocument(*instance_, *instance_));
PASS();
}
+
+std::string TestURLUtil::TestGetDocumentURL() {
+ pp::Var url = util_->GetDocumentURL(*instance_);
+ ASSERT_TRUE(url.is_string());
+ pp::Var window = instance_->GetWindowObject();
+ pp::Var href = window.GetProperty("location").GetProperty("href");
+ ASSERT_TRUE(href.is_string());
+ // In the test framework, they should be the same.
+ ASSERT_EQ(url.AsString(), href.AsString());
+ PASS();
+}
diff --git a/ppapi/tests/test_url_util.h b/ppapi/tests/test_url_util.h
index 2d3b2ff..61516d4 100644
--- a/ppapi/tests/test_url_util.h
+++ b/ppapi/tests/test_url_util.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -8,9 +8,9 @@
#include "ppapi/cpp/dev/url_util_dev.h"
#include "ppapi/tests/test_case.h"
-class TestUrlUtil : public TestCase {
+class TestURLUtil : public TestCase {
public:
- TestUrlUtil(TestingInstance* instance) : TestCase(instance), util_(NULL) {}
+ TestURLUtil(TestingInstance* instance) : TestCase(instance), util_(NULL) {}
// TestCase implementation.
virtual bool Init();
@@ -22,8 +22,9 @@ class TestUrlUtil : public TestCase {
std::string TestIsSameSecurityOrigin();
std::string TestDocumentCanRequest();
std::string TestDocumentCanAccessDocument();
+ std::string TestGetDocumentURL();
- const pp::UrlUtil_Dev* util_;
+ const pp::URLUtil_Dev* util_;
};
#endif // PPAPI_TESTS_TEST_URL_UTIL_H_