Correctly handle window's lifetime when it's closed.
This commit is contained in:
parent
9e489cae0c
commit
afe07521c5
7 changed files with 23 additions and 8 deletions
|
@ -44,13 +44,24 @@ Window::Window(v8::Handle<v8::Object> wrapper, base::DictionaryValue* options)
|
||||||
}
|
}
|
||||||
|
|
||||||
Window::~Window() {
|
Window::~Window() {
|
||||||
|
window_->RemoveObserver(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window::OnPageTitleUpdated(bool* prevent_default,
|
void Window::OnPageTitleUpdated(bool* prevent_default,
|
||||||
const std::string& title) {
|
const std::string& title) {
|
||||||
scoped_ptr<base::ListValue> args(new base::ListValue);
|
base::ListValue args;
|
||||||
args->AppendString(title);
|
args.AppendString(title);
|
||||||
*prevent_default = Emit("page-title-updated", args.get());
|
*prevent_default = Emit("page-title-updated", &args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window::WillCloseWindow(bool* prevent_default) {
|
||||||
|
base::ListValue args;
|
||||||
|
*prevent_default = Emit("close", &args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window::OnWindowClosed() {
|
||||||
|
// Free memory immediately when window is closed.
|
||||||
|
delete this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
|
|
|
@ -35,6 +35,8 @@ class Window : public EventEmitter,
|
||||||
// Implementations of NativeWindowObserver.
|
// Implementations of NativeWindowObserver.
|
||||||
virtual void OnPageTitleUpdated(bool* prevent_default,
|
virtual void OnPageTitleUpdated(bool* prevent_default,
|
||||||
const std::string& title) OVERRIDE;
|
const std::string& title) OVERRIDE;
|
||||||
|
virtual void WillCloseWindow(bool* prevent_default) OVERRIDE;
|
||||||
|
virtual void OnWindowClosed() OVERRIDE;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static v8::Handle<v8::Value> New(const v8::Arguments &args);
|
static v8::Handle<v8::Value> New(const v8::Arguments &args);
|
||||||
|
|
|
@ -183,7 +183,7 @@ void NativeWindow::CloseContents(content::WebContents* source) {
|
||||||
// memory will not be freed until you call delete.
|
// memory will not be freed until you call delete.
|
||||||
// In this way, it would be safe to manage windows via smart pointers. If you
|
// In this way, it would be safe to manage windows via smart pointers. If you
|
||||||
// want to free memory when the window is closed, you can do deleting by
|
// want to free memory when the window is closed, you can do deleting by
|
||||||
// overriding WillCloseWindow method in the observer.
|
// overriding the WillCloseWindow method in the observer.
|
||||||
CloseImmediately();
|
CloseImmediately();
|
||||||
|
|
||||||
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowClosed());
|
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowClosed());
|
||||||
|
|
|
@ -157,8 +157,6 @@ class NativeWindow : public content::WebContentsDelegate,
|
||||||
|
|
||||||
scoped_ptr<brightray::InspectableWebContents> inspectable_web_contents_;
|
scoped_ptr<brightray::InspectableWebContents> inspectable_web_contents_;
|
||||||
|
|
||||||
bool window_going_to_destroy_;
|
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(NativeWindow);
|
DISALLOW_COPY_AND_ASSIGN(NativeWindow);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ class NativeWindowMac : public NativeWindow {
|
||||||
virtual void SetKiosk(bool kiosk) OVERRIDE;
|
virtual void SetKiosk(bool kiosk) OVERRIDE;
|
||||||
virtual bool IsKiosk() OVERRIDE;
|
virtual bool IsKiosk() OVERRIDE;
|
||||||
|
|
||||||
NSWindow* window() const { return window_; }
|
NSWindow*& window() { return window_; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void SetNonLionFullscreen(bool fullscreen);
|
void SetNonLionFullscreen(bool fullscreen);
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)windowWillClose:(NSNotification *)notification {
|
- (void)windowWillClose:(NSNotification *)notification {
|
||||||
|
shell_->window() = nil;
|
||||||
[self autorelease];
|
[self autorelease];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,6 +115,8 @@ NativeWindowMac::NativeWindowMac(content::WebContents* web_contents,
|
||||||
}
|
}
|
||||||
|
|
||||||
NativeWindowMac::~NativeWindowMac() {
|
NativeWindowMac::~NativeWindowMac() {
|
||||||
|
if (window())
|
||||||
|
[window() release];
|
||||||
}
|
}
|
||||||
|
|
||||||
void NativeWindowMac::Close() {
|
void NativeWindowMac::Close() {
|
||||||
|
@ -121,6 +124,7 @@ void NativeWindowMac::Close() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void NativeWindowMac::CloseImmediately() {
|
void NativeWindowMac::CloseImmediately() {
|
||||||
|
[window() orderOut:nil];
|
||||||
[window() close];
|
[window() close];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
vendor/brightray
vendored
2
vendor/brightray
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 65af4131fc8d5b3450f89950dddc08be8a720860
|
Subproject commit a51999007ff325562a7c5a73a76c198a080b37a8
|
Loading…
Reference in a new issue