diff options
| author | piman@google.com <piman@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-02 21:04:28 +0000 |
|---|---|---|
| committer | piman@google.com <piman@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-02 21:04:28 +0000 |
| commit | b45c651999ef987ad88e314b90b39996b5c6d632 (patch) | |
| tree | 40908ac7f69ec68233bbfe3445aa284c7105442a | |
| parent | a5ae58faedf27b7964eae66ee14839ec53e9ec2d (diff) | |
| download | chromium_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
| -rw-r--r-- | chrome/test/ui/ppapi_uitest.cc | 4 | ||||
| -rw-r--r-- | ppapi/c/dev/ppb_url_util_dev.h | 50 | ||||
| -rw-r--r-- | ppapi/cpp/dev/url_util_dev.cc | 34 | ||||
| -rw-r--r-- | ppapi/cpp/dev/url_util_dev.h | 28 | ||||
| -rw-r--r-- | ppapi/tests/test_url_util.cc | 38 | ||||
| -rw-r--r-- | ppapi/tests/test_url_util.h | 9 | ||||
| -rw-r--r-- | webkit/plugins/ppapi/plugin_module.cc | 2 | ||||
| -rw-r--r-- | webkit/plugins/ppapi/ppb_url_util_impl.cc | 48 | ||||
| -rw-r--r-- | webkit/plugins/ppapi/ppb_url_util_impl.h | 8 |
9 files changed, 132 insertions, 89 deletions
diff --git a/chrome/test/ui/ppapi_uitest.cc b/chrome/test/ui/ppapi_uitest.cc index db0e94d..4bfaace 100644 --- a/chrome/test/ui/ppapi_uitest.cc +++ b/chrome/test/ui/ppapi_uitest.cc @@ -142,8 +142,8 @@ TEST_F(PPAPITest, FLAKY_Scrollbar) { RunTest("Scrollbar"); } -TEST_F(PPAPITest, UrlUtil) { - RunTest("UrlUtil"); +TEST_F(PPAPITest, URLUtil) { + RunTest("URLUtil"); } TEST_F(PPAPITest, CharSet) { 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_ diff --git a/webkit/plugins/ppapi/plugin_module.cc b/webkit/plugins/ppapi/plugin_module.cc index 8faa492..1d7c091 100644 --- a/webkit/plugins/ppapi/plugin_module.cc +++ b/webkit/plugins/ppapi/plugin_module.cc @@ -285,7 +285,7 @@ const void* GetInterface(const char* name) { if (strcmp(name, PPB_URLRESPONSEINFO_INTERFACE) == 0) return PPB_URLResponseInfo_Impl::GetInterface(); if (strcmp(name, PPB_URLUTIL_DEV_INTERFACE) == 0) - return PPB_UrlUtil_Impl::GetInterface(); + return PPB_URLUtil_Impl::GetInterface(); if (strcmp(name, PPB_VAR_DEPRECATED_INTERFACE) == 0) return Var::GetDeprecatedInterface(); if (strcmp(name, PPB_VAR_INTERFACE) == 0) diff --git a/webkit/plugins/ppapi/ppb_url_util_impl.cc b/webkit/plugins/ppapi/ppb_url_util_impl.cc index dee2218..4faf30f 100644 --- a/webkit/plugins/ppapi/ppb_url_util_impl.cc +++ b/webkit/plugins/ppapi/ppb_url_util_impl.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. @@ -25,7 +25,7 @@ namespace ppapi { namespace { void ConvertComponent(const url_parse::Component& input, - PP_UrlComponent_Dev* output) { + PP_URLComponent_Dev* output) { output->begin = input.begin; output->len = input.len; } @@ -33,7 +33,7 @@ void ConvertComponent(const url_parse::Component& input, // Output can be NULL to specify "do nothing." This rule is followed by all the // url util functions, so we implement it once here. void ConvertComponents(const url_parse::Parsed& input, - PP_UrlComponents_Dev* output) { + PP_URLComponents_Dev* output) { if (!output) return; @@ -49,8 +49,8 @@ void ConvertComponents(const url_parse::Parsed& input, // Used for returning the given GURL from a PPAPI function, with an optional // out param indicating the components. -PP_Var GenerateUrlReturn(PluginModule* module, const GURL& url, - PP_UrlComponents_Dev* components) { +PP_Var GenerateURLReturn(PluginModule* module, const GURL& url, + PP_URLComponents_Dev* components) { if (!url.is_valid()) return PP_MakeNull(); ConvertComponents(url.parsed_for_possibly_invalid_spec(), components); @@ -76,17 +76,17 @@ bool SecurityOriginForInstance(PP_Instance instance_id, return true; } -PP_Var Canonicalize(PP_Var url, PP_UrlComponents_Dev* components) { +PP_Var Canonicalize(PP_Var url, PP_URLComponents_Dev* components) { scoped_refptr<StringVar> url_string(StringVar::FromPPVar(url)); if (!url_string) return PP_MakeNull(); - return GenerateUrlReturn(url_string->module(), + return GenerateURLReturn(url_string->module(), GURL(url_string->value()), components); } -PP_Var ResolveRelativeToUrl(PP_Var base_url, +PP_Var ResolveRelativeToURL(PP_Var base_url, PP_Var relative, - PP_UrlComponents_Dev* components) { + PP_URLComponents_Dev* components) { scoped_refptr<StringVar> base_url_string(StringVar::FromPPVar(base_url)); scoped_refptr<StringVar> relative_string(StringVar::FromPPVar(relative)); if (!base_url_string || !relative_string) @@ -95,14 +95,14 @@ PP_Var ResolveRelativeToUrl(PP_Var base_url, GURL base_gurl(base_url_string->value()); if (!base_gurl.is_valid()) return PP_MakeNull(); - return GenerateUrlReturn(base_url_string->module(), + return GenerateURLReturn(base_url_string->module(), base_gurl.Resolve(relative_string->value()), components); } PP_Var ResolveRelativeToDocument(PP_Instance instance_id, PP_Var relative, - PP_UrlComponents_Dev* components) { + PP_URLComponents_Dev* components) { PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); if (!instance) return PP_MakeNull(); @@ -113,7 +113,7 @@ PP_Var ResolveRelativeToDocument(PP_Instance instance_id, WebKit::WebElement plugin_element = instance->container()->element(); GURL document_url = plugin_element.document().baseURL(); - return GenerateUrlReturn(instance->module(), + return GenerateURLReturn(instance->module(), document_url.Resolve(relative_string->value()), components); } @@ -160,19 +160,33 @@ PP_Bool DocumentCanAccessDocument(PP_Instance active, PP_Instance target) { return BoolToPPBool(active_origin.canAccess(target_origin)); } -} // namespace +PP_Var GetDocumentURL(PP_Instance instance_id, + PP_URLComponents_Dev* components) { + PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); + if (!instance) + return PP_MakeNull(); + + WebKit::WebFrame* frame = instance->container()->element().document().frame(); + if (!frame) + return PP_MakeNull(); + + return GenerateURLReturn(instance->module(), frame->url(), components); +} -const PPB_UrlUtil_Dev ppb_url_util = { +const PPB_URLUtil_Dev ppb_url_util = { &Canonicalize, - &ResolveRelativeToUrl, + &ResolveRelativeToURL, &ResolveRelativeToDocument, &IsSameSecurityOrigin, &DocumentCanRequest, - &DocumentCanAccessDocument + &DocumentCanAccessDocument, + &GetDocumentURL }; +} // namespace + // static -const PPB_UrlUtil_Dev* PPB_UrlUtil_Impl::GetInterface() { +const PPB_URLUtil_Dev* PPB_URLUtil_Impl::GetInterface() { return &ppb_url_util; } diff --git a/webkit/plugins/ppapi/ppb_url_util_impl.h b/webkit/plugins/ppapi/ppb_url_util_impl.h index 8cba6a9..921dd2b 100644 --- a/webkit/plugins/ppapi/ppb_url_util_impl.h +++ b/webkit/plugins/ppapi/ppb_url_util_impl.h @@ -1,18 +1,18 @@ -// 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. #ifndef WEBKIT_PLUGINS_PPAPI_PPB_URL_UTIL_IMPL_H_ #define WEBKIT_PLUGINS_PPAPI_PPB_URL_UTIL_IMPL_H_ -struct PPB_UrlUtil_Dev; +struct PPB_URLUtil_Dev; namespace webkit { namespace ppapi { -class PPB_UrlUtil_Impl { +class PPB_URLUtil_Impl { public: - static const PPB_UrlUtil_Dev* GetInterface(); + static const PPB_URLUtil_Dev* GetInterface(); }; } // namespace ppapi |
