Index: chrome/browser/chromeos/login/webui_login_view.cc |
diff --git a/chrome/browser/chromeos/login/webui_login_view.cc b/chrome/browser/chromeos/login/webui_login_view.cc |
index 6445ea63b92eeadd69511c404af590b690ab6ca1..0fa0ffb5e02d2fa515325e349dc2f21cadf1ef13 100644 |
--- a/chrome/browser/chromeos/login/webui_login_view.cc |
+++ b/chrome/browser/chromeos/login/webui_login_view.cc |
@@ -4,6 +4,8 @@ |
#include "chrome/browser/chromeos/login/webui_login_view.h" |
+#include "base/utf_string_conversions.h" |
+#include "base/values.h" |
#include "chrome/browser/chromeos/accessibility_util.h" |
#include "chrome/browser/chromeos/login/proxy_settings_dialog.h" |
#include "chrome/browser/chromeos/login/webui_login_display.h" |
@@ -14,7 +16,9 @@ |
#include "chrome/browser/chromeos/wm_ipc.h" |
#include "chrome/browser/profiles/profile_manager.h" |
#include "chrome/browser/ui/views/dom_view.h" |
+#include "content/browser/renderer_host/render_view_host_observer.h" |
#include "content/browser/tab_contents/tab_contents.h" |
+#include "content/common/view_messages.h" |
#include "ui/gfx/rect.h" |
#include "ui/gfx/size.h" |
#include "views/widget/native_widget_gtk.h" |
@@ -32,6 +36,39 @@ const char kViewClassName[] = "browser/chromeos/login/WebUILoginView"; |
const char kAccelNameAccessibility[] = "accessibility"; |
const char kAccelNameEnrollment[] = "enrollment"; |
+// Observes IPC messages from the FrameSniffer and notifies JS if error |
+// appears. |
+class SnifferObserver : public RenderViewHostObserver { |
+ public: |
+ SnifferObserver(RenderViewHost* host, WebUI* webui) |
+ : RenderViewHostObserver(host), webui_(webui) { |
+ DCHECK(webui_); |
+ Send(new ViewMsg_StartFrameSniffer(routing_id(), |
+ UTF8ToUTF16("gaia-frame"))); |
+ } |
+ |
+ virtual ~SnifferObserver() {} |
+ |
+ // IPC::Channel::Listener implementation. |
+ virtual bool OnMessageReceived(const IPC::Message& message) { |
+ bool handled = true; |
+ IPC_BEGIN_MESSAGE_MAP(SnifferObserver, message) |
+ IPC_MESSAGE_HANDLER(ViewHostMsg_FrameLoadingError, OnError) |
+ IPC_MESSAGE_UNHANDLED(handled = false) |
+ IPC_END_MESSAGE_MAP() |
+ return handled; |
+ } |
+ |
+ private: |
+ void OnError(int error) { |
+ base::FundamentalValue error_value(error); |
+ webui_->CallJavascriptFunction("login.OfflineMessageScreen.onFrameError", |
+ error_value); |
+ } |
+ |
+ WebUI* webui_; |
+}; |
+ |
} // namespace |
namespace chromeos { |
@@ -204,6 +241,10 @@ void WebUILoginView::OnLocaleChanged() { |
SchedulePaint(); |
} |
+void WebUILoginView::OnRenderHostCreated(RenderViewHost* host) { |
+ new SnifferObserver(host, GetWebUI()); |
+} |
+ |
void WebUILoginView::OnTabMainFrameLoaded() { |
} |