Hook up NetLog for CookieStore on iOS
This is to help with investigating cookies bugs.
This is based on rdsmith@'s CL at
https://chromium-review.googlesource.com/c/chromium/src/+/925181
Bug: 801910
Cq-Include-Trybots: luci.chromium.try:ios-simulator-full-configs;master.tryserver.chromium.mac:ios-simulator-cronet
Change-Id: Ia0fbfca17a8a8ad76cbcc4e1ae46330b3f706ea0
Reviewed-on: https://chromium-review.googlesource.com/1175921
Commit-Queue: Helen Li <[email protected]>
Reviewed-by: Rohit Rao <[email protected]>
Cr-Commit-Position: refs/heads/master@{#584737}
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm b/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm
index 2b5ca1e2..91d10cc 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm
@@ -230,7 +230,8 @@
cookie_util::CookieStoreConfig::COOKIE_STORE_IOS,
cookie_config::GetCookieCryptoDelegate());
main_cookie_store_ = cookie_util::CreateCookieStore(
- ios_cookie_config, std::move(profile_params->system_cookie_store));
+ ios_cookie_config, std::move(profile_params->system_cookie_store),
+ io_thread->net_log());
if (profile_params->path.BaseName().value() ==
kIOSChromeInitialBrowserState) {
@@ -310,7 +311,8 @@
// TODO(crbug.com/779106): Check if cookiestore type should be changed.
std::unique_ptr<net::CookieStore> cookie_store =
cookie_util::CreateCookieStore(
- ios_cookie_config, std::make_unique<net::NSHTTPSystemCookieStore>());
+ ios_cookie_config, std::make_unique<net::NSHTTPSystemCookieStore>(),
+ main_context->net_log());
// Transfer ownership of the ChannelIDStore, HttpNetworkSession, cookies, and
// cache to AppRequestContext.
diff --git a/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.mm b/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.mm
index 47d5f1ef0..79808613 100644
--- a/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.mm
+++ b/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.mm
@@ -195,7 +195,7 @@
cookie_path_,
cookie_util::CookieStoreConfig::RESTORED_SESSION_COOKIES,
cookie_util::CookieStoreConfig::COOKIE_STORE_IOS, nullptr),
- std::move(profile_params->system_cookie_store));
+ std::move(profile_params->system_cookie_store), io_thread->net_log());
main_context->set_cookie_store(main_cookie_store_.get());
main_cookie_store_->SetChannelIDServiceID(channel_id_service->GetUniqueID());
diff --git a/ios/chrome/browser/net/cookie_util.h b/ios/chrome/browser/net/cookie_util.h
index 7bd577fcb8..bb167f5f 100644
--- a/ios/chrome/browser/net/cookie_util.h
+++ b/ios/chrome/browser/net/cookie_util.h
@@ -19,6 +19,7 @@
class CookieCryptoDelegate;
class CookieStore;
class SystemCookieStore;
+class NetLog;
}
namespace cookie_util {
@@ -75,7 +76,8 @@
// CookieStoreIOS.
std::unique_ptr<net::CookieStore> CreateCookieStore(
const CookieStoreConfig& config,
- std::unique_ptr<net::SystemCookieStore> system_cookie_store);
+ std::unique_ptr<net::SystemCookieStore> system_cookie_store,
+ net::NetLog* net_log);
// Returns true if the cookies should be cleared.
// Current implementation returns true if the device has rebooted since the
diff --git a/ios/chrome/browser/net/cookie_util.mm b/ios/chrome/browser/net/cookie_util.mm
index e267cb0..3afb6a59 100644
--- a/ios/chrome/browser/net/cookie_util.mm
+++ b/ios/chrome/browser/net/cookie_util.mm
@@ -21,6 +21,7 @@
#include "net/cookies/cookie_monster.h"
#include "net/cookies/cookie_store.h"
#include "net/extras/sqlite/sqlite_persistent_cookie_store.h"
+#include "net/log/net_log.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_getter.h"
@@ -50,13 +51,12 @@
// Creates a CookieMonster configured by |config|.
std::unique_ptr<net::CookieMonster> CreateCookieMonster(
- const CookieStoreConfig& config) {
- // TODO(crbug.com/801910): Hook up logging by passing in a non-null netlog.
+ const CookieStoreConfig& config,
+ net::NetLog* net_log) {
if (config.path.empty()) {
// Empty path means in-memory store.
return std::make_unique<net::CookieMonster>(
- nullptr /* store */, nullptr /* channel_id_service */,
- nullptr /* netlog */);
+ nullptr /* store */, nullptr /* channel_id_service */, net_log);
}
const bool restore_old_session_cookies =
@@ -65,8 +65,7 @@
CreatePersistentCookieStore(config.path, restore_old_session_cookies,
config.crypto_delegate);
std::unique_ptr<net::CookieMonster> cookie_monster(new net::CookieMonster(
- persistent_store.get(), nullptr /* channel_id_service */,
- nullptr /* netlog */));
+ persistent_store.get(), nullptr /* channel_id_service */, net_log));
if (restore_old_session_cookies)
cookie_monster->SetPersistSessionCookies(true);
return cookie_monster;
@@ -89,9 +88,10 @@
std::unique_ptr<net::CookieStore> CreateCookieStore(
const CookieStoreConfig& config,
- std::unique_ptr<net::SystemCookieStore> system_cookie_store) {
+ std::unique_ptr<net::SystemCookieStore> system_cookie_store,
+ net::NetLog* net_log) {
if (config.cookie_store_type == CookieStoreConfig::COOKIE_MONSTER)
- return CreateCookieMonster(config);
+ return CreateCookieMonster(config, net_log);
// On iOS 11, there is no need to use PersistentCookieStore or CookieMonster
// because there is a way to access cookies in WKHTTPCookieStore. This will
@@ -100,7 +100,7 @@
if (@available(iOS 11, *)) {
if (base::FeatureList::IsEnabled(web::features::kWKHTTPSystemCookieStore)) {
return std::make_unique<net::CookieStoreIOS>(
- std::move(system_cookie_store));
+ std::move(system_cookie_store), net_log);
}
}
@@ -113,7 +113,7 @@
config.crypto_delegate);
}
return std::make_unique<net::CookieStoreIOSPersistent>(
- persistent_store.get(), std::move(system_cookie_store));
+ persistent_store.get(), std::move(system_cookie_store), net_log);
}
bool ShouldClearSessionCookies() {
diff --git a/ios/chrome/browser/net/cookie_util_unittest.mm b/ios/chrome/browser/net/cookie_util_unittest.mm
index 7f155f01..d28fdd6f 100644
--- a/ios/chrome/browser/net/cookie_util_unittest.mm
+++ b/ios/chrome/browser/net/cookie_util_unittest.mm
@@ -94,7 +94,8 @@
cookie_util::CookieStoreConfig::CookieStoreType::COOKIE_STORE_IOS,
nullptr);
std::unique_ptr<net::CookieStore> cookie_store =
- cookie_util::CreateCookieStore(config, std::move(system_cookie_store));
+ cookie_util::CreateCookieStore(config, std::move(system_cookie_store),
+ nullptr /* net_log */);
net::CookieOptions options;
options.set_include_httponly();
diff --git a/ios/net/cookies/cookie_store_ios.h b/ios/net/cookies/cookie_store_ios.h
index 5f0ccd9..93db008 100644
--- a/ios/net/cookies/cookie_store_ios.h
+++ b/ios/net/cookies/cookie_store_ios.h
@@ -31,6 +31,8 @@
namespace net {
+class NetLog;
+
// Observer for changes on |NSHTTPCookieStorge sharedHTTPCookieStorage|.
class CookieNotificationObserver {
public:
@@ -58,12 +60,17 @@
// as its default backend and is initially synchronized with it.
// Apple does not persist the cookies' creation dates in NSHTTPCookieStorage,
// so callers should not expect these values to be populated.
- explicit CookieStoreIOS(std::unique_ptr<SystemCookieStore> system_store);
+ CookieStoreIOS(std::unique_ptr<SystemCookieStore> system_store,
+ NetLog* net_log);
- // Used by ChromeSigninCookieManager/Cronet
+ // Used by ChromeSigninCookieManager/Cronet.
+ // TODO(crbug.com/801910): Remove this constructor once the internal
+ // chrome_signin_cookie_manager.mm is converted to using the one with NetLog.
+ explicit CookieStoreIOS(NSHTTPCookieStorage* ns_cookie_store);
+
// TODO(crbug.com/759226): Remove once the migration to use SystemCookieStore
// is finished.
- explicit CookieStoreIOS(NSHTTPCookieStorage* ns_cookie_store);
+ CookieStoreIOS(NSHTTPCookieStorage* ns_cookie_store, NetLog* net_log);
~CookieStoreIOS() override;
@@ -108,7 +115,8 @@
protected:
CookieStoreIOS(net::CookieMonster::PersistentCookieStore* persistent_store,
- std::unique_ptr<SystemCookieStore> system_store);
+ std::unique_ptr<SystemCookieStore> system_store,
+ NetLog* net_log);
// These three functions are used for wrapping user-supplied callbacks given
// to CookieStoreIOS mutator methods. Given a callback, they return a new
diff --git a/ios/net/cookies/cookie_store_ios.mm b/ios/net/cookies/cookie_store_ios.mm
index 3b9f6996..d13730d 100644
--- a/ios/net/cookies/cookie_store_ios.mm
+++ b/ios/net/cookies/cookie_store_ios.mm
@@ -30,6 +30,7 @@
#import "net/base/mac/url_conversions.h"
#include "net/cookies/cookie_util.h"
#include "net/cookies/parsed_cookie.h"
+#include "net/log/net_log.h"
#include "url/gurl.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -222,13 +223,20 @@
#pragma mark CookieStoreIOS
CookieStoreIOS::CookieStoreIOS(
- std::unique_ptr<SystemCookieStore> system_cookie_store)
+ std::unique_ptr<SystemCookieStore> system_cookie_store,
+ NetLog* net_log)
: CookieStoreIOS(/*persistent_store=*/nullptr,
- std::move(system_cookie_store)) {}
+ std::move(system_cookie_store),
+ net_log) {}
CookieStoreIOS::CookieStoreIOS(NSHTTPCookieStorage* ns_cookie_store)
- : CookieStoreIOS(
- std::make_unique<NSHTTPSystemCookieStore>(ns_cookie_store)) {}
+ : CookieStoreIOS(std::make_unique<NSHTTPSystemCookieStore>(ns_cookie_store),
+ nullptr /* net_log */) {}
+
+CookieStoreIOS::CookieStoreIOS(NSHTTPCookieStorage* ns_cookie_store,
+ NetLog* net_log)
+ : CookieStoreIOS(std::make_unique<NSHTTPSystemCookieStore>(ns_cookie_store),
+ net_log) {}
CookieStoreIOS::~CookieStoreIOS() {
NotificationTrampoline::GetInstance()->RemoveObserver(this);
@@ -476,11 +484,11 @@
CookieStoreIOS::CookieStoreIOS(
net::CookieMonster::PersistentCookieStore* persistent_store,
- std::unique_ptr<SystemCookieStore> system_store)
- : // TODO(crbug.com/801910): hook up logging by using a non-null netlog.
- cookie_monster_(new net::CookieMonster(persistent_store,
+ std::unique_ptr<SystemCookieStore> system_store,
+ NetLog* net_log)
+ : cookie_monster_(new net::CookieMonster(persistent_store,
nullptr /* channel_id_service */,
- nullptr /* netlog */)),
+ net_log)),
system_store_(std::move(system_store)),
metrics_enabled_(false),
cookie_cache_(new CookieCache()),
diff --git a/ios/net/cookies/cookie_store_ios_persistent.h b/ios/net/cookies/cookie_store_ios_persistent.h
index 6e7b14c..617b951 100644
--- a/ios/net/cookies/cookie_store_ios_persistent.h
+++ b/ios/net/cookies/cookie_store_ios_persistent.h
@@ -15,6 +15,8 @@
namespace net {
+class NetLog;
+
// The CookieStoreIOSPersistent is an implementation of CookieStore relying on
// on backing CookieStore.
// CookieStoreIOSPersistent is not thread safe.
@@ -27,13 +29,15 @@
class CookieStoreIOSPersistent : public CookieStoreIOS {
public:
// Constructs a CookieStoreIOS with a default SystemCookieStore.
- explicit CookieStoreIOSPersistent(
- net::CookieMonster::PersistentCookieStore* persistent_store);
+ CookieStoreIOSPersistent(
+ net::CookieMonster::PersistentCookieStore* persistent_store,
+ NetLog* net_log);
// Constructs a CookieStoreIOS backed by |system_store|.
CookieStoreIOSPersistent(
net::CookieMonster::PersistentCookieStore* persistent_store,
- std::unique_ptr<SystemCookieStore> system_store);
+ std::unique_ptr<SystemCookieStore> system_store,
+ NetLog* net_log);
~CookieStoreIOSPersistent() override;
diff --git a/ios/net/cookies/cookie_store_ios_persistent.mm b/ios/net/cookies/cookie_store_ios_persistent.mm
index 9817467..b3cde0c 100644
--- a/ios/net/cookies/cookie_store_ios_persistent.mm
+++ b/ios/net/cookies/cookie_store_ios_persistent.mm
@@ -13,6 +13,7 @@
#import "ios/net/cookies/ns_http_system_cookie_store.h"
#import "ios/net/cookies/system_cookie_util.h"
#include "net/cookies/cookie_monster.h"
+#include "net/log/net_log.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
@@ -38,14 +39,17 @@
#pragma mark CookieStoreIOSPersistent
CookieStoreIOSPersistent::CookieStoreIOSPersistent(
- net::CookieMonster::PersistentCookieStore* persistent_store)
+ net::CookieMonster::PersistentCookieStore* persistent_store,
+ NetLog* net_log)
: CookieStoreIOS(persistent_store,
- std::make_unique<net::NSHTTPSystemCookieStore>()) {}
+ std::make_unique<net::NSHTTPSystemCookieStore>(),
+ net_log) {}
CookieStoreIOSPersistent::CookieStoreIOSPersistent(
net::CookieMonster::PersistentCookieStore* persistent_store,
- std::unique_ptr<SystemCookieStore> system_store)
- : CookieStoreIOS(persistent_store, std::move(system_store)) {}
+ std::unique_ptr<SystemCookieStore> system_store,
+ NetLog* net_log)
+ : CookieStoreIOS(persistent_store, std::move(system_store), net_log) {}
CookieStoreIOSPersistent::~CookieStoreIOSPersistent() {}
diff --git a/ios/net/cookies/cookie_store_ios_persistent_unittest.mm b/ios/net/cookies/cookie_store_ios_persistent_unittest.mm
index 27ed4c1..c5de03b 100644
--- a/ios/net/cookies/cookie_store_ios_persistent_unittest.mm
+++ b/ios/net/cookies/cookie_store_ios_persistent_unittest.mm
@@ -28,7 +28,8 @@
struct PersistentCookieStoreIOSTestTraits {
static std::unique_ptr<net::CookieStore> Create() {
- return std::make_unique<CookieStoreIOSPersistent>(nullptr);
+ return std::make_unique<CookieStoreIOSPersistent>(nullptr,
+ nullptr /* net_log */);
}
static void DeliverChangeNotifications() { base::RunLoop().RunUntilIdle(); }
@@ -79,8 +80,9 @@
scoped_cookie_store_ios_client_(
std::make_unique<TestCookieStoreIOSClient>()),
backend_(new net::TestPersistentCookieStore),
- store_(
- std::make_unique<net::CookieStoreIOSPersistent>(backend_.get())) {
+ store_(std::make_unique<net::CookieStoreIOSPersistent>(
+ backend_.get(),
+ nullptr /* net_log */)) {
cookie_change_subscription_ =
store_->GetChangeDispatcher().AddCallbackForCookie(
kTestCookieURL, "abc",
diff --git a/ios/net/cookies/cookie_store_ios_unittest.mm b/ios/net/cookies/cookie_store_ios_unittest.mm
index cc58c00e..afeb624c 100644
--- a/ios/net/cookies/cookie_store_ios_unittest.mm
+++ b/ios/net/cookies/cookie_store_ios_unittest.mm
@@ -32,7 +32,7 @@
class TestingCookieStoreIOS : public CookieStoreIOS {
public:
TestingCookieStoreIOS(std::unique_ptr<SystemCookieStore> system_store)
- : CookieStoreIOS(std::move(system_store)),
+ : CookieStoreIOS(std::move(system_store), nullptr /* net_log */),
scoped_cookie_store_ios_client_(
std::make_unique<TestCookieStoreIOSClient>()) {}
@@ -132,7 +132,8 @@
// object is owned by store_, this will work as we will not use
// |system_store_| after |store_| is deleted.
system_store_ = system_store.get();
- store_ = std::make_unique<net::CookieStoreIOS>(std::move(system_store));
+ store_ = std::make_unique<net::CookieStoreIOS>(std::move(system_store),
+ nullptr /* net_log */);
cookie_change_subscription_ =
store_->GetChangeDispatcher().AddCallbackForCookie(
kTestCookieURLFooBar, "abc",
@@ -254,8 +255,8 @@
ScopedTestingCookieStoreIOSClient scoped_cookie_store_ios_client(
std::make_unique<TestCookieStoreIOSClient>());
ClearCookies();
- std::unique_ptr<CookieStoreIOS> cookie_store(std::make_unique<CookieStoreIOS>(
- std::make_unique<NSHTTPSystemCookieStore>()));
+ auto cookie_store = std::make_unique<CookieStoreIOS>(
+ std::make_unique<NSHTTPSystemCookieStore>(), nullptr /* net_log */);
// Add a cookie.
net::CookieOptions options;
diff --git a/ios/web/shell/shell_url_request_context_getter.mm b/ios/web/shell/shell_url_request_context_getter.mm
index 018c498..11e29eb 100644
--- a/ios/web/shell/shell_url_request_context_getter.mm
+++ b/ios/web/shell/shell_url_request_context_getter.mm
@@ -84,7 +84,8 @@
{base::MayBlock(), base::TaskPriority::BEST_EFFORT}),
true, nullptr);
std::unique_ptr<net::CookieStoreIOS> cookie_store(
- new net::CookieStoreIOSPersistent(persistent_store.get()));
+ new net::CookieStoreIOSPersistent(persistent_store.get(),
+ net_log_.get()));
storage_->set_cookie_store(std::move(cookie_store));
std::string user_agent =
diff --git a/ios/web_view/internal/web_view_url_request_context_getter.mm b/ios/web_view/internal/web_view_url_request_context_getter.mm
index 6046457..3685b09 100644
--- a/ios/web_view/internal/web_view_url_request_context_getter.mm
+++ b/ios/web_view/internal/web_view_url_request_context_getter.mm
@@ -84,7 +84,8 @@
{base::MayBlock(), base::TaskPriority::BEST_EFFORT}),
true, nullptr);
std::unique_ptr<net::CookieStoreIOS> cookie_store(
- new net::CookieStoreIOSPersistent(persistent_store.get()));
+ new net::CookieStoreIOSPersistent(persistent_store.get(),
+ net_log_.get()));
storage_->set_cookie_store(std::move(cookie_store));
web::WebClient* web_client = web::GetWebClient();