[Picture-in-Picture] Add leavepictureinpicture video event

Bug: 806249
Change-Id: I443cedc0b6d0d72f98a61dd8bf5bb8c79da0d490
Reviewed-on: https://chromium-review.googlesource.com/895309
Reviewed-by: Mounir Lamouri (slow) <mlamouri@chromium.org>
Reviewed-by: Mike West <mkwst@chromium.org>
Reviewed-by: apacible <apacible@chromium.org>
Commit-Queue: Mounir Lamouri (slow) <mlamouri@chromium.org>
Cr-Commit-Position: refs/heads/master@{#534388}
diff --git a/picture-in-picture/enter-picture-in-picture.html b/picture-in-picture/enter-picture-in-picture.html
index e44087c..8830ab0 100644
--- a/picture-in-picture/enter-picture-in-picture.html
+++ b/picture-in-picture/enter-picture-in-picture.html
@@ -7,7 +7,7 @@
 <script src="resources/picture-in-picture-helpers.js"></script>
 <body></body>
 <script>
-async_test(t => {
+promise_test(t => {
   const video = document.createElement('video');
 
   video.addEventListener('enterpictureinpicture', t.step_func_done(event => {
diff --git a/picture-in-picture/leave-picture-in-picture.html b/picture-in-picture/leave-picture-in-picture.html
new file mode 100644
index 0000000..a0d4cc2
--- /dev/null
+++ b/picture-in-picture/leave-picture-in-picture.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<title>Test leavepictureinpicture event</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/picture-in-picture-helpers.js"></script>
+<body></body>
+<script>
+promise_test(t => {
+  const video = document.createElement('video');
+
+  video.addEventListener('leavepictureinpicture', t.step_func_done(event => {
+    assert_equals(event.target, video);
+    assert_equals(event.bubbles, true);
+    assert_equals(event.cancelable, false);
+    assert_equals(event.composed, false);
+    assert_equals(document.pictureInPictureElement, null);
+  }));
+
+  return requestPictureInPictureWithTrustedClick(video)
+  .then(() => document.exitPictureInPicture())
+}, 'leavepictureinpicture event is fired if document.exitPictureInPicture');
+
+promise_test(t => {
+  const video = document.createElement('video');
+
+  video.addEventListener('leavepictureinpicture', t.step_func_done(event => {
+    assert_equals(event.target, video);
+    assert_equals(event.bubbles, true);
+    assert_equals(event.cancelable, false);
+    assert_equals(event.composed, false);
+    assert_equals(document.pictureInPictureElement, null);
+  }));
+
+  return requestPictureInPictureWithTrustedClick(video)
+  .then(() => {
+    video.disablePictureInPicture = true;
+  });
+}, 'leavepictureinpicture event is fired if video.disablePictureInPicture is set to true');
+</script>