diff options
Diffstat (limited to 'chromium/chrome/browser/extensions/api/cookies')
5 files changed, 90 insertions, 38 deletions
diff --git a/chromium/chrome/browser/extensions/api/cookies/cookies_api.cc b/chromium/chrome/browser/extensions/api/cookies/cookies_api.cc index 8fa3cd840d0..5dbb6f601d9 100644 --- a/chromium/chrome/browser/extensions/api/cookies/cookies_api.cc +++ b/chromium/chrome/browser/extensions/api/cookies/cookies_api.cc @@ -256,16 +256,17 @@ ExtensionFunction::ResponseAction CookiesGetFunction::Run() { } void CookiesGetFunction::GetCookieListCallback( - const net::CookieStatusList& cookie_status_list, - const net::CookieStatusList& excluded_cookies) { + const net::CookieAccessResultList& cookie_list, + const net::CookieAccessResultList& excluded_cookies) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - for (const net::CookieWithStatus& cookie_with_status : cookie_status_list) { + for (const net::CookieWithAccessResult& cookie_with_access_result : + cookie_list) { // Return the first matching cookie. Relies on the fact that the // CookieManager interface returns them in canonical order (longest path, // then earliest creation time). - if (cookie_with_status.cookie.Name() == parsed_args_->details.name) { + if (cookie_with_access_result.cookie.Name() == parsed_args_->details.name) { api::cookies::Cookie api_cookie = cookies_helpers::CreateCookie( - cookie_with_status.cookie, *parsed_args_->details.store_id); + cookie_with_access_result.cookie, *parsed_args_->details.store_id); Respond(ArgumentList(api::cookies::Get::Results::Create(api_cookie))); return; } @@ -336,14 +337,14 @@ void CookiesGetAllFunction::GetAllCookiesCallback( } void CookiesGetAllFunction::GetCookieListCallback( - const net::CookieStatusList& cookie_status_list, - const net::CookieStatusList& excluded_cookies) { + const net::CookieAccessResultList& cookie_list, + const net::CookieAccessResultList& excluded_cookies) { DCHECK_CURRENTLY_ON(BrowserThread::UI); ResponseValue response; if (extension()) { std::vector<api::cookies::Cookie> match_vector; - cookies_helpers::AppendMatchingCookiesFromCookieStatusListToVector( - cookie_status_list, &parsed_args_->details, extension(), &match_vector); + cookies_helpers::AppendMatchingCookiesFromCookieAccessResultListToVector( + cookie_list, &parsed_args_->details, extension(), &match_vector); response = ArgumentList(api::cookies::GetAll::Results::Create(match_vector)); @@ -437,7 +438,8 @@ ExtensionFunction::ResponseAction CookiesSetFunction::Run() { // is generated. success_ = false; state_ = SET_COMPLETED; - GetCookieListCallback(net::CookieStatusList(), net::CookieStatusList()); + GetCookieListCallback(net::CookieAccessResultList(), + net::CookieAccessResultList()); return AlreadyResponded(); } @@ -461,7 +463,7 @@ ExtensionFunction::ResponseAction CookiesSetFunction::Run() { } void CookiesSetFunction::SetCanonicalCookieCallback( - net::CanonicalCookie::CookieInclusionStatus set_cookie_result) { + net::CookieInclusionStatus set_cookie_result) { DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_EQ(NO_RESPONSE, state_); state_ = SET_COMPLETED; @@ -469,8 +471,8 @@ void CookiesSetFunction::SetCanonicalCookieCallback( } void CookiesSetFunction::GetCookieListCallback( - const net::CookieStatusList& cookie_list, - const net::CookieStatusList& excluded_cookies) { + const net::CookieAccessResultList& cookie_list, + const net::CookieAccessResultList& excluded_cookies) { DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_EQ(SET_COMPLETED, state_); state_ = GET_COMPLETED; @@ -485,16 +487,17 @@ void CookiesSetFunction::GetCookieListCallback( } ResponseValue value; - for (const net::CookieWithStatus& cookie_with_status : cookie_list) { + for (const net::CookieWithAccessResult& cookie_with_access_result : + cookie_list) { // Return the first matching cookie. Relies on the fact that the // CookieMonster returns them in canonical order (longest path, then // earliest creation time). std::string name = parsed_args_->details.name.get() ? *parsed_args_->details.name : std::string(); - if (cookie_with_status.cookie.Name() == name) { + if (cookie_with_access_result.cookie.Name() == name) { api::cookies::Cookie api_cookie = cookies_helpers::CreateCookie( - cookie_with_status.cookie, *parsed_args_->details.store_id); + cookie_with_access_result.cookie, *parsed_args_->details.store_id); value = ArgumentList(api::cookies::Set::Results::Create(api_cookie)); break; } diff --git a/chromium/chrome/browser/extensions/api/cookies/cookies_api.h b/chromium/chrome/browser/extensions/api/cookies/cookies_api.h index d6b171b5f04..a506809822a 100644 --- a/chromium/chrome/browser/extensions/api/cookies/cookies_api.h +++ b/chromium/chrome/browser/extensions/api/cookies/cookies_api.h @@ -23,6 +23,7 @@ #include "mojo/public/cpp/bindings/remote.h" #include "net/cookies/canonical_cookie.h" #include "net/cookies/cookie_change_dispatcher.h" +#include "net/cookies/cookie_inclusion_status.h" #include "services/network/public/mojom/cookie_manager.mojom.h" #include "url/gurl.h" @@ -105,8 +106,9 @@ class CookiesGetFunction : public ExtensionFunction { ResponseAction Run() override; private: - void GetCookieListCallback(const net::CookieStatusList& cookie_status_list, - const net::CookieStatusList& excluded_cookies); + void GetCookieListCallback( + const net::CookieAccessResultList& cookie_list, + const net::CookieAccessResultList& excluded_cookies); GURL url_; mojo::Remote<network::mojom::CookieManager> store_browser_cookie_manager_; @@ -130,8 +132,9 @@ class CookiesGetAllFunction : public ExtensionFunction { // For the two different callback signatures for getting cookies for a URL vs // getting all cookies. They do the same thing. void GetAllCookiesCallback(const net::CookieList& cookie_list); - void GetCookieListCallback(const net::CookieStatusList& cookie_status_list, - const net::CookieStatusList& excluded_cookies); + void GetCookieListCallback( + const net::CookieAccessResultList& cookie_list, + const net::CookieAccessResultList& excluded_cookies); GURL url_; mojo::Remote<network::mojom::CookieManager> store_browser_cookie_manager_; @@ -150,10 +153,10 @@ class CookiesSetFunction : public ExtensionFunction { ResponseAction Run() override; private: - void SetCanonicalCookieCallback( - net::CanonicalCookie::CookieInclusionStatus set_cookie_result); - void GetCookieListCallback(const net::CookieStatusList& cookie_list, - const net::CookieStatusList& excluded_cookies); + void SetCanonicalCookieCallback(net::CookieInclusionStatus set_cookie_result); + void GetCookieListCallback( + const net::CookieAccessResultList& cookie_list, + const net::CookieAccessResultList& excluded_cookies); enum { NO_RESPONSE, SET_COMPLETED, GET_COMPLETED } state_; GURL url_; diff --git a/chromium/chrome/browser/extensions/api/cookies/cookies_apitest.cc b/chromium/chrome/browser/extensions/api/cookies/cookies_apitest.cc index bf114b6f2be..e5f22089cac 100644 --- a/chromium/chrome/browser/extensions/api/cookies/cookies_apitest.cc +++ b/chromium/chrome/browser/extensions/api/cookies/cookies_apitest.cc @@ -6,10 +6,16 @@ #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/test/browser_test.h" +#include "extensions/common/scoped_worker_based_extensions_channel.h" #include "net/cookies/cookie_util.h" namespace extensions { +using ContextType = ExtensionApiTest::ContextType; + +// TODO(crbug.com/1093066): This test uses the DOM to set and +// check cookies for one test. Figure out how to isolate that +// test and adapt the rest of it for a SW-based extension. IN_PROC_BROWSER_TEST_F(ExtensionApiTest, Cookies) { ASSERT_TRUE(RunExtensionTestWithArg( "cookies/api", @@ -19,21 +25,60 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, Cookies) { << message_; } -IN_PROC_BROWSER_TEST_F(ExtensionApiTest, CookiesEvents) { - ASSERT_TRUE(RunExtensionTest("cookies/events")) << message_; +class CookiesApiTest : public ExtensionApiTest, + public testing::WithParamInterface<ContextType> { + public: + void SetUp() override { + ExtensionApiTest::SetUp(); + // Service Workers are currently only available on certain channels, so set + // the channel for those tests. + if (GetParam() == ContextType::kServiceWorker) + current_channel_ = std::make_unique<ScopedWorkerBasedExtensionsChannel>(); + } + + protected: + bool RunTest(const std::string& extension_name) { + return RunTestWithFlags(extension_name, kFlagNone); + } + + bool RunTestIncognito(const std::string& extension_name) { + return RunTestWithFlags(extension_name, kFlagEnableIncognito); + } + + bool RunTestWithFlags(const std::string& extension_name, + int browser_test_flags) { + if (GetParam() == ContextType::kServiceWorker) + browser_test_flags |= kFlagRunAsServiceWorkerBasedExtension; + + return RunExtensionTestWithFlags(extension_name, browser_test_flags, + kFlagNone); + } + + std::unique_ptr<ScopedWorkerBasedExtensionsChannel> current_channel_; +}; + +INSTANTIATE_TEST_SUITE_P(EventPage, + CookiesApiTest, + ::testing::Values(ContextType::kEventPage)); +INSTANTIATE_TEST_SUITE_P(ServiceWorker, + CookiesApiTest, + ::testing::Values(ContextType::kServiceWorker)); + +IN_PROC_BROWSER_TEST_P(CookiesApiTest, CookiesEvents) { + ASSERT_TRUE(RunTest("cookies/events")) << message_; } -IN_PROC_BROWSER_TEST_F(ExtensionApiTest, CookiesEventsSpanning) { +IN_PROC_BROWSER_TEST_P(CookiesApiTest, CookiesEventsSpanning) { // We need to initialize an incognito mode window in order have an initialized // incognito cookie store. Otherwise, the chrome.cookies.set operation is just // ignored and we won't be notified about a newly set cookie for which we want // to test whether the storeId is set correctly. OpenURLOffTheRecord(browser()->profile(), GURL("chrome://newtab/")); - ASSERT_TRUE(RunExtensionTestIncognito("cookies/events_spanning")) << message_; + ASSERT_TRUE(RunTestIncognito("cookies/events_spanning")) << message_; } -IN_PROC_BROWSER_TEST_F(ExtensionApiTest, CookiesNoPermission) { - ASSERT_TRUE(RunExtensionTest("cookies/no_permission")) << message_; +IN_PROC_BROWSER_TEST_P(CookiesApiTest, CookiesNoPermission) { + ASSERT_TRUE(RunTest("cookies/no_permission")) << message_; } } // namespace extensions diff --git a/chromium/chrome/browser/extensions/api/cookies/cookies_helpers.cc b/chromium/chrome/browser/extensions/api/cookies/cookies_helpers.cc index 43bb1619bfb..9aee1f6143b 100644 --- a/chromium/chrome/browser/extensions/api/cookies/cookies_helpers.cc +++ b/chromium/chrome/browser/extensions/api/cookies/cookies_helpers.cc @@ -182,14 +182,14 @@ void AppendMatchingCookiesFromCookieListToVector( } } -void AppendMatchingCookiesFromCookieStatusListToVector( - const net::CookieStatusList& all_cookies_with_statuses, +void AppendMatchingCookiesFromCookieAccessResultListToVector( + const net::CookieAccessResultList& all_cookies_with_access_result, const GetAll::Params::Details* details, const Extension* extension, std::vector<Cookie>* match_vector) { - for (const net::CookieWithStatus& cookie_with_status : - all_cookies_with_statuses) { - const net::CanonicalCookie& cookie = cookie_with_status.cookie; + for (const net::CookieWithAccessResult& cookie_with_access_result : + all_cookies_with_access_result) { + const net::CanonicalCookie& cookie = cookie_with_access_result.cookie; AppendCookieToVectorIfMatchAndHasHostPermission(cookie, details, extension, match_vector); } diff --git a/chromium/chrome/browser/extensions/api/cookies/cookies_helpers.h b/chromium/chrome/browser/extensions/api/cookies/cookies_helpers.h index 298b16e49a7..9d5acf0fbc7 100644 --- a/chromium/chrome/browser/extensions/api/cookies/cookies_helpers.h +++ b/chromium/chrome/browser/extensions/api/cookies/cookies_helpers.h @@ -85,9 +85,10 @@ void AppendMatchingCookiesFromCookieListToVector( const Extension* extension, std::vector<api::cookies::Cookie>* match_vector); -// Same as above except takes a CookieStatusList (and ignores the statuses). -void AppendMatchingCookiesFromCookieStatusListToVector( - const net::CookieStatusList& all_cookies_with_statuses, +// Same as above except takes a CookieAccessResultList (and ignores the access +// results). +void AppendMatchingCookiesFromCookieAccessResultListToVector( + const net::CookieAccessResultList& all_cookies_with_access_result, const api::cookies::GetAll::Params::Details* details, const Extension* extension, std::vector<api::cookies::Cookie>* match_vector); |