Update the PushEvent to have a nullable PushMessageData

The specification now allows a PushMessage to have valid non-empty data,
valid empty data, and null data. To support that, the content layer now uses
a PushEventPayload which can be null.

This also adds and updates relevant unit tests for each of the layers.

BUG=578036

Review URL: https://codereview.chromium.org/1636483002

Cr-Commit-Position: refs/heads/master@{#371839}
diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc
index fc3f644..32681ae 100644
--- a/content/browser/browser_context.cc
+++ b/content/browser/browser_context.cc
@@ -255,11 +255,12 @@
     BrowserContext* browser_context,
     const GURL& origin,
     int64_t service_worker_registration_id,
-    const std::string& data,
+    const PushEventPayload& payload,
     const base::Callback<void(PushDeliveryStatus)>& callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  PushMessagingRouter::DeliverMessage(
-      browser_context, origin, service_worker_registration_id, data, callback);
+  PushMessagingRouter::DeliverMessage(browser_context, origin,
+                                      service_worker_registration_id, payload,
+                                      callback);
 }
 
 // static