Create WebPushSender for sending web-push messages

- Created WebPushSender for sending out web-push messages using VAPID
  (https://developers.google.com/web/ilt/pwa/introduction-to-push-notifications#using_vapid)
- Created WebPushMessage struct to encapsulate message_id into messages
  to make callbacks easier
- Refactored across GCMEncryptionProvider / GCMDriver to use
  WebPushMessage and provide callback mechanism

Bug: 966037
Change-Id: I1e8fe6d418e57660ecfe7e8d493b7ae9e71a68f3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1649165
Commit-Queue: Alex Chau <[email protected]>
Reviewed-by: Max Moroz <[email protected]>
Reviewed-by: Adam Langley <[email protected]>
Reviewed-by: Scott Violet <[email protected]>
Reviewed-by: Daniel Cheng <[email protected]>
Reviewed-by: Peter Beverloo <[email protected]>
Reviewed-by: Richard Knoll <[email protected]>
Auto-Submit: Alex Chau <[email protected]>
Cr-Commit-Position: refs/heads/master@{#672534}
diff --git a/components/gcm_driver/DEPS b/components/gcm_driver/DEPS
index d89782b6..8bc87bd 100644
--- a/components/gcm_driver/DEPS
+++ b/components/gcm_driver/DEPS
@@ -10,6 +10,8 @@
   "+components/timers",  # Only used for Chrome OS builds.
   "+components/version_info",
   "+content/public/browser/browser_context.h",
+  "+content/public/test",  # Only used for tests.
+  "+crypto",  # Only used for tests.
 
   # Whitelist specific headers from //google_apis/gaia. Contact
   # [email protected] if looking to add more.
@@ -22,4 +24,5 @@
   "+services/network/public/mojom",
   "+services/network/test",
   "+third_party/leveldatabase",  # Only used for tests.
+  "+third_party/re2",  # Only used for tests.
 ]