summaryrefslogtreecommitdiffstats
path: root/chrome_frame/infobars/internal/infobar_window.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome_frame/infobars/internal/infobar_window.cc')
-rw-r--r--chrome_frame/infobars/internal/infobar_window.cc33
1 files changed, 27 insertions, 6 deletions
diff --git a/chrome_frame/infobars/internal/infobar_window.cc b/chrome_frame/infobars/internal/infobar_window.cc
index 92c332a..c2964f1 100644
--- a/chrome_frame/infobars/internal/infobar_window.cc
+++ b/chrome_frame/infobars/internal/infobar_window.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
@@ -23,7 +23,8 @@ const int kInfobarSlideCloseStep = 6;
} // namespace
void OnSliderTimer(InfobarWindow::Host* host) {
- host->UpdateLayout();
+ if (host)
+ host->UpdateLayout();
}
InfobarWindow::InfobarWindow(InfobarType type)
@@ -41,9 +42,10 @@ InfobarWindow::InfobarWindow(InfobarType type)
}
InfobarWindow::~InfobarWindow() {
- StopTimer();
- if (timer_stub_ != NULL)
+ if (StopTimer() && timer_stub_ != NULL)
FunctionStub::Destroy(timer_stub_);
+ else if (timer_stub_ != NULL)
+ timer_stub_->set_argument(NULL); // Couldn't stop it, so orphan and disable
}
void InfobarWindow::SetHost(Host* host) {
@@ -137,6 +139,15 @@ void InfobarWindow::StartSlidingTowards(int target_height) {
}
bool InfobarWindow::StartTimer() {
+ return false; // TODO(erikwright): Diagnose and fix crashes on IE.
+#if 0
+ if (timer_id_ != 0)
+ return true;
+
+ DCHECK(timer_stub_ != NULL);
+ if (timer_stub_ == NULL)
+ return false;
+
timer_id_ = ::SetTimer(NULL,
timer_id_,
kInfobarSlidingTimerIntervalMs,
@@ -145,10 +156,20 @@ bool InfobarWindow::StartTimer() {
DPLOG_IF(ERROR, timer_id_ == 0) << "Failure in SetTimer.";
return timer_id_ != 0;
+#endif
}
-void InfobarWindow::StopTimer() {
- ::KillTimer(NULL, timer_id_);
+bool InfobarWindow::StopTimer() {
+ if (timer_id_ == 0)
+ return true;
+
+ if (::KillTimer(NULL, timer_id_)) {
+ timer_id_ = 0;
+ return true;
+ }
+
+ DPLOG(ERROR) << "Failure in KillTimer.";
+ return false;
}
int InfobarWindow::CalculateHeight() {