diff options
Diffstat (limited to 'chrome_frame/infobars/internal/infobar_window.cc')
-rw-r--r-- | chrome_frame/infobars/internal/infobar_window.cc | 33 |
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() { |