#include <string>
+#include "base/message_loop.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
#include "brightray/browser/inspectable_web_contents.h"
base::DictionaryValue* options)
: content::WebContentsObserver(web_contents),
is_closed_(false),
+ not_responding_(false),
inspectable_web_contents_(
brightray::InspectableWebContents::Create(web_contents)) {
web_contents->SetDelegate(this);
}
void NativeWindow::RendererUnresponsive(content::WebContents* source) {
- FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnRendererUnresponsive());
+ not_responding_ = true;
+ base::MessageLoop::current()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&NativeWindow::RendererUnresponsiveDelayed,
+ base::Unretained(this)),
+ base::TimeDelta::FromSeconds(1));
}
void NativeWindow::RendererResponsive(content::WebContents* source) {
+ not_responding_ = false;
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnRendererResponsive());
}
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnRendererCrashed());
}
+void NativeWindow::RendererUnresponsiveDelayed() {
+ if (not_responding_)
+ FOR_EACH_OBSERVER(NativeWindowObserver,
+ observers_,
+ OnRendererUnresponsive());
+}
+
void NativeWindow::Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) {
const content::NotificationDetails& details) OVERRIDE;
private:
+ void RendererUnresponsiveDelayed();
+
void OnRendererMessage(const std::string& channel,
const base::ListValue& args);
// Observers of this window.
ObserverList<NativeWindowObserver> observers_;
+ // The windows has been closed.
bool is_closed_;
+ // The window is not responding.
+ bool not_responding_;
+
scoped_ptr<AtomJavaScriptDialogManager> dialog_manager_;
scoped_ptr<brightray::InspectableWebContents> inspectable_web_contents_;