|
@@ -755,6 +755,14 @@ void BaseWindow::AddBrowserView(v8::Local<v8::Value> value) {
|
|
|
auto get_that_view = browser_views_.find(browser_view->ID());
|
|
|
if (get_that_view == browser_views_.end()) {
|
|
|
if (browser_view->web_contents()) {
|
|
|
+ // If we're reparenting a BrowserView, ensure that it's detached from
|
|
|
+ // its previous owner window.
|
|
|
+ auto* owner_window = browser_view->web_contents()->owner_window();
|
|
|
+ if (owner_window && owner_window != window_.get()) {
|
|
|
+ owner_window->RemoveBrowserView(browser_view->view());
|
|
|
+ browser_view->web_contents()->SetOwnerWindow(nullptr);
|
|
|
+ }
|
|
|
+
|
|
|
window_->AddBrowserView(browser_view->view());
|
|
|
browser_view->web_contents()->SetOwnerWindow(window_.get());
|
|
|
}
|
|
@@ -1067,9 +1075,14 @@ void BaseWindow::ResetBrowserViews() {
|
|
|
v8::Local<v8::Value>::New(isolate(), item.second),
|
|
|
&browser_view) &&
|
|
|
!browser_view.IsEmpty()) {
|
|
|
+ // There's a chance that the BrowserView may have been reparented - only
|
|
|
+ // reset if the owner window is *this* window.
|
|
|
if (browser_view->web_contents()) {
|
|
|
- browser_view->web_contents()->SetOwnerWindow(nullptr);
|
|
|
- window_->RemoveBrowserView(browser_view->view());
|
|
|
+ auto* owner_window = browser_view->web_contents()->owner_window();
|
|
|
+ if (owner_window == window_.get()) {
|
|
|
+ browser_view->web_contents()->SetOwnerWindow(nullptr);
|
|
|
+ owner_window->RemoveBrowserView(browser_view->view());
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|