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();