WebUI Tab Strip: Remove placeholder tab on dragleave

Fixed: 1056293
Change-Id: I988cd0d273bd8d5a2e771181f3da7f186b013acf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2075545
Commit-Queue: John Lee <[email protected]>
Reviewed-by: Demetrios Papadopoulos <[email protected]>
Cr-Commit-Position: refs/heads/master@{#744904}
diff --git a/chrome/browser/resources/tab_strip/drag_manager.js b/chrome/browser/resources/tab_strip/drag_manager.js
index 362062f..e995086 100644
--- a/chrome/browser/resources/tab_strip/drag_manager.js
+++ b/chrome/browser/resources/tab_strip/drag_manager.js
@@ -182,8 +182,7 @@
   }
 
   cancel() {
-    if (isTabElement(this.element_) &&
-        this.element_.tab.id === PLACEHOLDER_TAB_ID) {
+    if (this.isDraggingPlaceholder()) {
       this.element_.remove();
       return;
     }
@@ -200,10 +199,15 @@
     this.element_.setDragging(false);
   }
 
+  /** @return {boolean} */
+  isDraggingPlaceholder() {
+    return isTabElement(this.element_) &&
+        this.element_.tab.id == PLACEHOLDER_TAB_ID;
+  }
+
   /** @param {!DragEvent} event */
   finish(event) {
-    if (isTabElement(this.element_) &&
-        this.element_.tab.id === PLACEHOLDER_TAB_ID) {
+    if (this.isDraggingPlaceholder()) {
       const id = Number(event.dataTransfer.getData(getTabIdDataType()));
       this.element_.tab = Object.assign({}, this.element_.tab, {id});
     }
@@ -351,6 +355,11 @@
 
   /** @private */
   onDragLeave_() {
+    if (this.dragSession_ && this.dragSession_.isDraggingPlaceholder()) {
+      this.dragSession_.cancel();
+      this.dragSession_ = null;
+    }
+
     // TODO(johntlee): Handle drag and drop groups from other windows with
     // DragSession.
     this.dropPlaceholder_.remove();