[DevTools] Support multiple cookie blocked reasons

Bug: 993843
Change-Id: I6a65f74d8de10e05abf0a9d56d120f47f43f7c7a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1795576
Commit-Queue: Joey Arhar <[email protected]>
Reviewed-by: Andrey Kosyakov <[email protected]>
Cr-Original-Commit-Position: refs/heads/master@{#696550}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 8a8d484654bf7cba22df22a9dc072e49bcb73327
diff --git a/front_end/network/RequestCookiesView.js b/front_end/network/RequestCookiesView.js
index 0bbcfef..82cb299 100644
--- a/front_end/network/RequestCookiesView.js
+++ b/front_end/network/RequestCookiesView.js
@@ -106,11 +106,12 @@
       if (this._showFilteredOutCookiesSetting.get()) {
         const blockedRequestCookies = this._request.blockedRequestCookies().slice();
         for (const blockedCookie of blockedRequestCookies) {
-          requestCookieToBlockedReasons.set(
-              blockedCookie.cookie, [{
-                attribute: SDK.NetworkRequest.cookieBlockedReasonToAttribute(blockedCookie.blockedReason),
-                uiString: SDK.NetworkRequest.cookieBlockedReasonToUiString(blockedCookie.blockedReason)
-              }]);
+          requestCookieToBlockedReasons.set(blockedCookie.cookie, blockedCookie.blockedReasons.map(blockedReason => {
+            return {
+              attribute: SDK.NetworkRequest.cookieBlockedReasonToAttribute(blockedReason),
+              uiString: SDK.NetworkRequest.cookieBlockedReasonToUiString(blockedReason)
+            };
+          }));
           requestCookies.push(blockedCookie.cookie);
         }
       }
@@ -157,17 +158,18 @@
       for (const blockedCookie of this._request.blockedResponseCookies()) {
         const parsedCookies = SDK.CookieParser.parseSetCookie(blockedCookie.cookieLine);
         if (!parsedCookies.length ||
-            blockedCookie.blockedReason === Protocol.Network.SetCookieBlockedReason.SyntaxError) {
+            blockedCookie.blockedReasons.includes(Protocol.Network.SetCookieBlockedReason.SyntaxError)) {
           malformedResponseCookies.push(blockedCookie);
           continue;
         }
 
         const cookie = parsedCookies[0];
-        responseCookieToBlockedReasons.set(
-            cookie, [{
-              attribute: SDK.NetworkRequest.setCookieBlockedReasonToAttribute(blockedCookie.blockedReason),
-              uiString: SDK.NetworkRequest.setCookieBlockedReasonToUiString(blockedCookie.blockedReason)
-            }]);
+        responseCookieToBlockedReasons.set(cookie, blockedCookie.blockedReasons.map(blockedReason => {
+          return {
+            attribute: SDK.NetworkRequest.setCookieBlockedReasonToAttribute(blockedReason),
+            uiString: SDK.NetworkRequest.setCookieBlockedReasonToUiString(blockedReason)
+          };
+        }));
         responseCookies.push(cookie);
       }
     }
@@ -210,7 +212,8 @@
         const icon = UI.Icon.create('smallicon-error', '');
         listItem.appendChild(icon);
         listItem.createTextChild(malformedCookie.cookieLine);
-        listItem.title = SDK.NetworkRequest.setCookieBlockedReasonToUiString(malformedCookie.blockedReason);
+        listItem.title =
+            SDK.NetworkRequest.setCookieBlockedReasonToUiString(Protocol.Network.SetCookieBlockedReason.SyntaxError);
       }
     } else {
       this._malformedResponseCookiesTitle.classList.add('hidden');
diff --git a/front_end/network/RequestHeadersView.js b/front_end/network/RequestHeadersView.js
index cb00245..7500f86 100644
--- a/front_end/network/RequestHeadersView.js
+++ b/front_end/network/RequestHeadersView.js
@@ -457,11 +457,11 @@
       headersTreeElement.appendChild(cautionTreeElement);
     }
 
-    /** @type {!Map<string, !Protocol.Network.SetCookieBlockedReason>} */
-    const blockedCookieLineToReason = new Map();
+    /** @type {!Map<string, !Array<!Protocol.Network.SetCookieBlockedReason>>} */
+    const blockedCookieLineToReasons = new Map();
     if (blockedResponseCookies) {
       blockedResponseCookies.forEach(blockedCookie => {
-        blockedCookieLineToReason.set(blockedCookie.cookieLine, blockedCookie.blockedReason);
+        blockedCookieLineToReasons.set(blockedCookie.cookieLine, blockedCookie.blockedReasons);
       });
     }
 
@@ -472,11 +472,18 @@
       headerTreeElement[Network.RequestHeadersView._headerNameSymbol] = headers[i].name;
 
       if (headers[i].name.toLowerCase() === 'set-cookie') {
-        const matchingBlockedReason = blockedCookieLineToReason.get(headers[i].value);
-        if (matchingBlockedReason) {
+        const matchingBlockedReasons = blockedCookieLineToReasons.get(headers[i].value);
+        if (matchingBlockedReasons) {
           const icon = UI.Icon.create('smallicon-warning', '');
           headerTreeElement.listItemElement.appendChild(icon);
-          icon.title = SDK.NetworkRequest.setCookieBlockedReasonToUiString(matchingBlockedReason);
+
+          let titleText = '';
+          for (const blockedReason of matchingBlockedReasons) {
+            if (titleText)
+              titleText += '\n';
+            titleText += SDK.NetworkRequest.setCookieBlockedReasonToUiString(blockedReason);
+          }
+          icon.title = titleText;
         }
       }