Import Cobalt 19.master.0.203780

Includes the following patches:
  https://cobalt-review.googlesource.com/c/cobalt/+/5210
    by errong.leng@samsung.com
  https://cobalt-review.googlesource.com/c/cobalt/+/5270
    by linus.wang@samsung.com
diff --git a/src/third_party/web_platform_tests/eventsource/resources/accept.event_stream b/src/third_party/web_platform_tests/eventsource/resources/accept.event_stream
new file mode 100644
index 0000000..24da548
--- /dev/null
+++ b/src/third_party/web_platform_tests/eventsource/resources/accept.event_stream
@@ -0,0 +1,2 @@
+data: {{headers[accept]}}
+
diff --git a/src/third_party/web_platform_tests/eventsource/resources/cache-control.event_stream b/src/third_party/web_platform_tests/eventsource/resources/cache-control.event_stream
new file mode 100644
index 0000000..aa9f2d6
--- /dev/null
+++ b/src/third_party/web_platform_tests/eventsource/resources/cache-control.event_stream
@@ -0,0 +1,2 @@
+data: {{headers[cache-control]}}
+
diff --git a/src/third_party/web_platform_tests/eventsource/resources/cors-cookie.py b/src/third_party/web_platform_tests/eventsource/resources/cors-cookie.py
new file mode 100644
index 0000000..7deaff4
--- /dev/null
+++ b/src/third_party/web_platform_tests/eventsource/resources/cors-cookie.py
@@ -0,0 +1,31 @@
+from datetime import datetime
+
+def main(request, response):
+    last_event_id = request.headers.get("Last-Event-Id", "")
+    ident = request.GET.first('ident', "test")
+    cookie = "COOKIE" if ident in request.cookies else "NO_COOKIE"
+    origin = request.GET.first('origin', request.headers["origin"])
+    credentials = request.GET.first('credentials', 'true')
+
+    headers = []
+
+    if origin != 'none':
+        headers.append(("Access-Control-Allow-Origin", origin));
+
+    if credentials != 'none':
+        headers.append(("Access-Control-Allow-Credentials", credentials));
+
+    if last_event_id == '':
+        headers.append(("Content-Type", "text/event-stream"))
+        response.set_cookie(ident, "COOKIE")
+        data = "id: 1\nretry: 200\ndata: first %s\n\n" % cookie
+    elif last_event_id == '1':
+        headers.append(("Content-Type", "text/event-stream"))
+        long_long_time_ago = datetime.now().replace(year=2001, month=7, day=27)
+        response.set_cookie(ident, "COOKIE", expires=long_long_time_ago)
+        data = "id: 2\ndata: second %s\n\n" % cookie
+    else:
+        headers.append(("Content-Type", "stop"))
+        data = "data: " + last_event_id + cookie + "\n\n";
+
+    return headers, data
diff --git a/src/third_party/web_platform_tests/eventsource/resources/cors.py b/src/third_party/web_platform_tests/eventsource/resources/cors.py
new file mode 100644
index 0000000..8be8052
--- /dev/null
+++ b/src/third_party/web_platform_tests/eventsource/resources/cors.py
@@ -0,0 +1,34 @@
+import os
+from wptserve import pipes
+
+def run_other(request, response, path):
+    #This is a terrible hack
+    environ = {"__file__": path}
+    execfile(path, environ, environ)
+    rv = environ["main"](request, response)
+    return rv
+
+def main(request, response):
+    origin = request.GET.first("origin", request.headers["origin"])
+    credentials = request.GET.first("credentials", "true")
+
+    response.headers.update([("Access-Control-Allow-Origin", origin),
+                             ("Access-Control-Allow-Credentials", credentials)])
+
+    handler = request.GET.first('run')
+    if handler in ["status-reconnect",
+                   "message",
+                   "redirect",
+                   "cache-control"]:
+        if handler == "cache-control":
+            response.headers.set("Content-Type", "text/event-stream")
+            rv = open(os.path.join(request.doc_root, "eventsource", "resources", "cache-control.event_stream")).read()
+            response.content = rv
+            pipes.sub(request, response)
+            return
+        elif handler == "redirect":
+            return run_other(request, response, os.path.join(request.doc_root, "common", "redirect.py"))
+        else:
+            return run_other(request, response, os.path.join(os.path.split(__file__)[0], handler + ".py"))
+    else:
+        return
diff --git a/src/third_party/web_platform_tests/eventsource/resources/init.htm b/src/third_party/web_platform_tests/eventsource/resources/init.htm
new file mode 100644
index 0000000..7c56d88
--- /dev/null
+++ b/src/third_party/web_platform_tests/eventsource/resources/init.htm
@@ -0,0 +1,9 @@
+<!doctype html>
+<html>
+  <head>
+    <title>support init file</title>
+  </head>
+  <body>
+    <script> parent.init() </script>
+  </body>
+</html>
diff --git a/src/third_party/web_platform_tests/eventsource/resources/last-event-id.py b/src/third_party/web_platform_tests/eventsource/resources/last-event-id.py
new file mode 100644
index 0000000..4306fba
--- /dev/null
+++ b/src/third_party/web_platform_tests/eventsource/resources/last-event-id.py
@@ -0,0 +1,11 @@
+ # -*- coding: utf-8 -*-
+
+def main(request, response):
+  response.headers.set("Content-Type", "text/event-stream")
+  last_event_id = request.headers.get('Last-Event-ID', None)
+
+  if(last_event_id):
+      return "data: " + last_event_id + "\n\n"
+  else:
+    return "id: …\nretry: 200\ndata: hello\n\n"
+
diff --git a/src/third_party/web_platform_tests/eventsource/resources/message.py b/src/third_party/web_platform_tests/eventsource/resources/message.py
new file mode 100644
index 0000000..6d04b1f
--- /dev/null
+++ b/src/third_party/web_platform_tests/eventsource/resources/message.py
@@ -0,0 +1,14 @@
+import time
+
+def main(request, response):
+    mime = request.GET.first("mime", "text/event-stream")
+    message = request.GET.first("message", "data: data");
+    newline = "" if request.GET.first("newline", None) == "none" else "\n\n";
+    sleep = int(request.GET.first("sleep", "0"))
+
+    headers = [("Content-Type", mime)]
+    body = message + newline + "\n"
+    if sleep != 0:
+        time.sleep(sleep/1000)
+
+    return headers, body
diff --git a/src/third_party/web_platform_tests/eventsource/resources/message2.py b/src/third_party/web_platform_tests/eventsource/resources/message2.py
new file mode 100644
index 0000000..ce339d9
--- /dev/null
+++ b/src/third_party/web_platform_tests/eventsource/resources/message2.py
@@ -0,0 +1,35 @@
+import time
+
+def main(request, response):
+    response.headers.set('Content-Type', 'text/event-stream')
+    response.headers.set('Cache-Control', 'no-cache')
+
+    response.explicit_flush = True
+    response.write_status_headers()
+
+    while True:
+        response.writer.write("data:msg")
+        response.writer.write("\n")
+        response.writer.write("data: msg")
+        response.writer.write("\n\n")
+
+        response.writer.write(":")
+        response.writer.write("\n")
+
+        response.writer.write("falsefield:msg")
+        response.writer.write("\n\n")
+
+        response.writer.write("falsefield:msg")
+        response.writer.write("\n")
+
+        response.writer.write("Data:data")
+        response.writer.write("\n\n")
+
+        response.writer.write("data")
+        response.writer.write("\n\n")
+
+        response.writer.write("data:end")
+        response.writer.write("\n\n")
+
+        response.writer.flush()
+        time.sleep(2)
diff --git a/src/third_party/web_platform_tests/eventsource/resources/reconnect-fail.py b/src/third_party/web_platform_tests/eventsource/resources/reconnect-fail.py
new file mode 100644
index 0000000..80a247d
--- /dev/null
+++ b/src/third_party/web_platform_tests/eventsource/resources/reconnect-fail.py
@@ -0,0 +1,24 @@
+def main(request, response):
+    name = "recon_fail_" + request.GET.first("id")
+
+    headers = [("Content-Type", "text/event-stream")]
+    cookie = request.cookies.first(name, None)
+    state = cookie.value if cookie is not None else None
+
+    if state == 'opened':
+        status = (200, "RECONNECT")
+        response.set_cookie(name, "reconnected");
+        body = "data: reconnected\n\n";
+
+    elif state == 'reconnected':
+        status = (204, "NO CONTENT (CLOSE)")
+        response.delete_cookie(name);
+        body = "data: closed\n\n" # Will never get through
+
+    else:
+        status = (200, "OPEN");
+        response.set_cookie(name, "opened");
+        body = "retry: 2\ndata: opened\n\n";
+
+    return status, headers, body
+
diff --git a/src/third_party/web_platform_tests/eventsource/resources/status-error.py b/src/third_party/web_platform_tests/eventsource/resources/status-error.py
new file mode 100644
index 0000000..8aa230c
--- /dev/null
+++ b/src/third_party/web_platform_tests/eventsource/resources/status-error.py
@@ -0,0 +1,4 @@
+def main(request, response):
+  status = (request.GET.first("status", "404"), "HAHAHAHA")
+  headers = [("Content-Type", "text/event-stream")]
+  return status, headers, "data: data\n\n"
diff --git a/src/third_party/web_platform_tests/eventsource/resources/status-reconnect.py b/src/third_party/web_platform_tests/eventsource/resources/status-reconnect.py
new file mode 100644
index 0000000..16c6502
--- /dev/null
+++ b/src/third_party/web_platform_tests/eventsource/resources/status-reconnect.py
@@ -0,0 +1,21 @@
+def main(request, response):
+    status_code = request.GET.first("status", "204")
+    name = request.GET.first("id", status_code)
+
+    headers = [("Content-Type", "text/event-stream")]
+
+    cookie_name = "request" + name
+
+    if request.cookies.first(cookie_name, "") == status_code:
+        status = 200
+        response.delete_cookie(cookie_name)
+        body = "data: data\n\n"
+    else:
+        response.set_cookie(cookie_name, status_code);
+        status = (int(status_code), "TEST")
+        body = "retry: 2\n"
+        if "ok_first" in request.GET:
+            body += "data: ok\n\n"
+
+    return status, headers, body
+