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 33c549cdfb4d5dbdc07be36fbdaa0099289890fb..97f74297c305b2e90c9caed6d1c08a4a08d4775e 100644 |
--- a/chrome/browser/chromeos/login/webui_login_view.cc |
+++ b/chrome/browser/chromeos/login/webui_login_view.cc |
@@ -5,6 +5,8 @@ |
#include "chrome/browser/chromeos/login/webui_login_view.h" |
#include "base/i18n/rtl.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" |
@@ -15,6 +17,8 @@ |
#include "chrome/browser/chromeos/wm_ipc.h" |
#include "chrome/browser/profiles/profile_manager.h" |
#include "chrome/browser/ui/views/dom_view.h" |
+#include "chrome/common/render_messages.h" |
+#include "content/browser/renderer_host/render_view_host_observer.h" |
#include "content/browser/tab_contents/tab_contents.h" |
#include "ui/gfx/rect.h" |
#include "ui/gfx/size.h" |
@@ -33,6 +37,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 ChromeViewMsg_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(ChromeViewHostMsg_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_; |
+}; |
+ |
// A View class which places its first child at the right most position. |
class RightAlignedView : public views::View { |
public: |
@@ -53,7 +90,6 @@ void RightAlignedView::ChildPreferredSizeChanged(View* child) { |
Layout(); |
} |
- |
} // namespace |
namespace chromeos { |
@@ -226,6 +262,10 @@ void WebUILoginView::OnLocaleChanged() { |
SchedulePaint(); |
} |
+void WebUILoginView::OnRenderHostCreated(RenderViewHost* host) { |
+ new SnifferObserver(host, GetWebUI()); |
+} |
+ |
void WebUILoginView::OnTabMainFrameLoaded() { |
} |