Store NativeWindow's weak ptr in WebContents
This commit is contained in:
parent
2532318bee
commit
2bfa9da82e
5 changed files with 33 additions and 6 deletions
|
@ -177,8 +177,11 @@ WebContents::WebContents(const mate::Dictionary& options)
|
||||||
|
|
||||||
NativeWindow* owner_window = nullptr;
|
NativeWindow* owner_window = nullptr;
|
||||||
WebContents* embedder = nullptr;
|
WebContents* embedder = nullptr;
|
||||||
if (options.Get("embedder", &embedder) && embedder)
|
if (options.Get("embedder", &embedder) && embedder) {
|
||||||
owner_window = NativeWindow::FromWebContents(embedder->web_contents());
|
auto relay = NativeWindowRelay::FromWebContents(embedder->web_contents());
|
||||||
|
if (relay)
|
||||||
|
owner_window = relay->window.get();
|
||||||
|
}
|
||||||
|
|
||||||
AttachAsUserData(web_contents);
|
AttachAsUserData(web_contents);
|
||||||
InitWithWebContents(web_contents, owner_window);
|
InitWithWebContents(web_contents, owner_window);
|
||||||
|
|
|
@ -65,12 +65,15 @@ void AtomDownloadManagerDelegate::OnDownloadPathGenerated(
|
||||||
if (!item)
|
if (!item)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
NativeWindow* window = nullptr;
|
||||||
|
auto relay = NativeWindowRelay::FromWebContents(item->GetWebContents());
|
||||||
|
if (relay)
|
||||||
|
window = relay->window.get();
|
||||||
|
|
||||||
file_dialog::Filters filters;
|
file_dialog::Filters filters;
|
||||||
base::FilePath path;
|
base::FilePath path;
|
||||||
auto owner_window_ = NativeWindow::FromWebContents(item->GetWebContents());
|
if (!file_dialog::ShowSaveDialog(window, item->GetURL().spec(), default_path,
|
||||||
if (!file_dialog::ShowSaveDialog(
|
filters, &path)) {
|
||||||
owner_window_, item->GetURL().spec(),
|
|
||||||
default_path, filters, &path)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -123,6 +123,9 @@ void CommonWebContentsDelegate::InitWithWebContents(
|
||||||
owner_window_ = owner_window;
|
owner_window_ = owner_window;
|
||||||
web_contents->SetDelegate(this);
|
web_contents->SetDelegate(this);
|
||||||
|
|
||||||
|
NativeWindowRelay* relay = new NativeWindowRelay(owner_window_->GetWeakPtr());
|
||||||
|
web_contents->SetUserData(relay->key, relay);
|
||||||
|
|
||||||
printing::PrintViewManagerBasic::CreateForWebContents(web_contents);
|
printing::PrintViewManagerBasic::CreateForWebContents(web_contents);
|
||||||
printing::PrintPreviewMessageHandler::CreateForWebContents(web_contents);
|
printing::PrintPreviewMessageHandler::CreateForWebContents(web_contents);
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,8 @@ using content::NavigationEntry;
|
||||||
using content::RenderWidgetHostView;
|
using content::RenderWidgetHostView;
|
||||||
using content::RenderWidgetHost;
|
using content::RenderWidgetHost;
|
||||||
|
|
||||||
|
DEFINE_WEB_CONTENTS_USER_DATA_KEY(atom::NativeWindowRelay);
|
||||||
|
|
||||||
namespace atom {
|
namespace atom {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include "base/memory/weak_ptr.h"
|
#include "base/memory/weak_ptr.h"
|
||||||
#include "base/observer_list.h"
|
#include "base/observer_list.h"
|
||||||
#include "content/public/browser/readback_types.h"
|
#include "content/public/browser/readback_types.h"
|
||||||
|
#include "content/public/browser/web_contents_user_data.h"
|
||||||
#include "native_mate/persistent_dictionary.h"
|
#include "native_mate/persistent_dictionary.h"
|
||||||
#include "ui/gfx/image/image.h"
|
#include "ui/gfx/image/image.h"
|
||||||
|
|
||||||
|
@ -304,6 +305,21 @@ class NativeWindow : public CommonWebContentsDelegate,
|
||||||
DISALLOW_COPY_AND_ASSIGN(NativeWindow);
|
DISALLOW_COPY_AND_ASSIGN(NativeWindow);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// This class provides a hook to get a NativeWindow from a WebContents.
|
||||||
|
class NativeWindowRelay :
|
||||||
|
public content::WebContentsUserData<NativeWindowRelay> {
|
||||||
|
public:
|
||||||
|
explicit NativeWindowRelay(base::WeakPtr<NativeWindow> window)
|
||||||
|
: key(UserDataKey()), window(window) {}
|
||||||
|
|
||||||
|
void* key;
|
||||||
|
base::WeakPtr<NativeWindow> window;
|
||||||
|
|
||||||
|
private:
|
||||||
|
friend class content::WebContentsUserData<NativeWindow>;
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace atom
|
} // namespace atom
|
||||||
|
|
||||||
#endif // ATOM_BROWSER_NATIVE_WINDOW_H_
|
#endif // ATOM_BROWSER_NATIVE_WINDOW_H_
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue