summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/login/user_image_screen.cc15
-rw-r--r--chrome/browser/chromeos/login/user_image_screen.h3
2 files changed, 13 insertions, 5 deletions
diff --git a/chrome/browser/chromeos/login/user_image_screen.cc b/chrome/browser/chromeos/login/user_image_screen.cc
index 1bd761f..5180a37 100644
--- a/chrome/browser/chromeos/login/user_image_screen.cc
+++ b/chrome/browser/chromeos/login/user_image_screen.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/chromeos/login/user_image_screen.h"
#include "base/compiler_specific.h"
+#include "base/threading/thread_restrictions.h"
#include "base/time.h"
#include "chrome/browser/chromeos/login/login_utils.h"
#include "chrome/browser/chromeos/login/screen_observer.h"
@@ -39,8 +40,8 @@ const char kCameraThreadName[] = "Chrome_CameraThread";
UserImageScreen::UserImageScreen(WizardScreenDelegate* delegate)
: ViewScreen<UserImageView>(delegate),
capture_failure_counter_(0),
- camera_init_failure_counter_(0),
- camera_thread_(kCameraThreadName) {
+ camera_init_failure_counter_(0) {
+ camera_thread_.reset(new base::Thread(kCameraThreadName));
registrar_.Add(
this,
NotificationType::SCREEN_LOCK_STATE_CHANGED,
@@ -50,11 +51,17 @@ UserImageScreen::UserImageScreen(WizardScreenDelegate* delegate)
UserImageScreen::~UserImageScreen() {
if (camera_.get())
camera_->set_delegate(NULL);
+ {
+ // A ScopedAllowIO object is required to join the thread when calling Stop.
+ // See http://crosbug.com/11392.
+ base::ThreadRestrictions::ScopedAllowIO allow_io_for_thread_join;
+ camera_thread_.reset();
+ }
}
void UserImageScreen::Refresh() {
- camera_thread_.Start();
- camera_ = new Camera(this, &camera_thread_, true);
+ camera_thread_->Start();
+ camera_ = new Camera(this, camera_thread_.get(), true);
InitCamera();
}
diff --git a/chrome/browser/chromeos/login/user_image_screen.h b/chrome/browser/chromeos/login/user_image_screen.h
index 9a3fef8..20702f4 100644
--- a/chrome/browser/chromeos/login/user_image_screen.h
+++ b/chrome/browser/chromeos/login/user_image_screen.h
@@ -7,6 +7,7 @@
#pragma once
#include "base/threading/thread.h"
+#include "base/scoped_ptr.h"
#include "chrome/browser/chromeos/login/camera.h"
#include "chrome/browser/chromeos/login/user_image_view.h"
#include "chrome/browser/chromeos/login/view_screen.h"
@@ -64,7 +65,7 @@ class UserImageScreen: public ViewScreen<UserImageView>,
int camera_init_failure_counter_;
// Thread for camera to work on.
- base::Thread camera_thread_;
+ scoped_ptr<base::Thread> camera_thread_;
NotificationRegistrar registrar_;