summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorivankr@chromium.org <ivankr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-20 17:26:28 +0000
committerivankr@chromium.org <ivankr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-20 17:26:28 +0000
commitede3378dd4740e0896150fc13e765dcff24f72e1 (patch)
tree69e3215053969463ae09fdc405aa68e316db1002
parent3e2cb40f6c65a77d6ee2f2a9ba014f32a15d79af (diff)
downloadchromium_src-ede3378dd4740e0896150fc13e765dcff24f72e1.zip
chromium_src-ede3378dd4740e0896150fc13e765dcff24f72e1.tar.gz
chromium_src-ede3378dd4740e0896150fc13e765dcff24f72e1.tar.bz2
[cros] In-Chrome camera presence check for avatar picker.
BUG=157387 TBR=sky Review URL: https://chromiumcodereview.appspot.com/11416097 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@168824 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/camera_detector.cc (renamed from chrome/browser/chromeos/login/camera_detector.cc)19
-rw-r--r--chrome/browser/chromeos/camera_detector.h (renamed from chrome/browser/chromeos/login/camera_detector.h)10
-rw-r--r--chrome/browser/resources/chromeos/login/oobe_screen_user_image.js34
-rw-r--r--chrome/browser/resources/chromeos/user_images_grid.js85
-rw-r--r--chrome/browser/resources/options/chromeos/change_picture_options.js19
-rw-r--r--chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.cc15
-rw-r--r--chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.h3
-rw-r--r--chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.cc34
-rw-r--r--chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.h3
-rw-r--r--chrome/chrome_browser_chromeos.gypi4
10 files changed, 97 insertions, 129 deletions
diff --git a/chrome/browser/chromeos/login/camera_detector.cc b/chrome/browser/chromeos/camera_detector.cc
index 4156c8e..f40acbf 100644
--- a/chrome/browser/chromeos/login/camera_detector.cc
+++ b/chrome/browser/chromeos/camera_detector.cc
@@ -2,16 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/chromeos/login/camera_detector.h"
+#include "chrome/browser/chromeos/camera_detector.h"
#include "base/bind.h"
#include "base/file_util.h"
+#include "base/location.h"
#include "base/string_split.h"
#include "base/string_util.h"
+#include "base/threading/worker_pool.h"
#include "chrome/browser/chromeos/system/udev_info_provider.h"
-#include "content/public/browser/browser_thread.h"
-
-using content::BrowserThread;
namespace chromeos {
@@ -34,22 +33,18 @@ CameraDetector::CameraPresence CameraDetector::camera_presence_ =
bool CameraDetector::presence_check_in_progress_ = false;
void CameraDetector::StartPresenceCheck(const base::Closure& check_done) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
DVLOG(1) << "Starting camera presence check";
-
if (!presence_check_in_progress_) {
presence_check_in_progress_ = true;
- BrowserThread::PostTaskAndReply(
- BrowserThread::FILE, FROM_HERE,
+ base::WorkerPool::PostTaskAndReply(
+ FROM_HERE,
base::Bind(&CameraDetector::CheckPresence),
- check_done);
+ check_done,
+ /* task_is_slow= */ false);
}
}
void CameraDetector::CheckPresence() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
-
bool present = false;
system::UdevInfoProvider* udev_info = system::UdevInfoProvider::GetInstance();
diff --git a/chrome/browser/chromeos/login/camera_detector.h b/chrome/browser/chromeos/camera_detector.h
index e4ad563..6c1955b 100644
--- a/chrome/browser/chromeos/login/camera_detector.h
+++ b/chrome/browser/chromeos/camera_detector.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_CAMERA_DETECTOR_H_
-#define CHROME_BROWSER_CHROMEOS_LOGIN_CAMERA_DETECTOR_H_
+#ifndef CHROME_BROWSER_CHROMEOS_CAMERA_DETECTOR_H_
+#define CHROME_BROWSER_CHROMEOS_CAMERA_DETECTOR_H_
#include "base/callback.h"
@@ -26,11 +26,11 @@ class CameraDetector {
// Checks asynchronously for camera device presence. Only one
// presence check can be running at a time. Calls |check_done|
- // on UI thread when the check has been completed.
+ // on current thread when the check has been completed.
static void StartPresenceCheck(const base::Closure& check_done);
private:
- // Checks for camera presence. Runs of the FILE thread.
+ // Checks for camera presence. Runs on a worker pool.
static void CheckPresence();
// Result of the last presence check.
@@ -43,4 +43,4 @@ class CameraDetector {
} // namespace chromeos
-#endif // CHROME_BROWSER_CHROMEOS_LOGIN_CAMERA_DETECTOR_H_
+#endif // CHROME_BROWSER_CHROMEOS_CAMERA_DETECTOR_H_
diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_user_image.js b/chrome/browser/resources/chromeos/login/oobe_screen_user_image.js
index 603911b..7bb3596 100644
--- a/chrome/browser/resources/chromeos/login/oobe_screen_user_image.js
+++ b/chrome/browser/resources/chromeos/login/oobe_screen_user_image.js
@@ -98,9 +98,6 @@ cr.define('oobe', function() {
this.profileImage_.type = 'profile';
this.profileImageLoading = true;
- // Add camera stream element.
- imageGrid.cameraImage = null;
-
$('take-photo').addEventListener(
'click', this.handleTakePhoto_.bind(this));
$('discard-photo').addEventListener(
@@ -202,14 +199,11 @@ cr.define('oobe', function() {
imageGrid.selectionType != e.oldSelectionType) {
if (imageGrid.selectionType == 'camera') {
// Programmatic selection of camera item is done in
- // checkCameraPresence callback where streaming is started by itself.
- imageGrid.checkCameraPresence(
- function() { // When present.
+ // startCamera callback where streaming is started by itself.
+ imageGrid.startCamera(
+ function() {
// Start capture if camera is still the selected item.
return imageGrid.selectedItem == imageGrid.cameraImage;
- },
- function() { // When absent.
- return true; // Check again after some time.
});
} else {
imageGrid.stopCamera();
@@ -242,21 +236,6 @@ cr.define('oobe', function() {
Oobe.getInstance().headerHidden = true;
var imageGrid = $('user-image-grid');
imageGrid.updateAndFocus();
- if (PRESELECT_CAMERA) {
- // Check for camera presence and select it, if present.
- imageGrid.checkCameraPresence(
- function() { // When present.
- imageGrid.selectedItem = imageGrid.cameraImage;
- return true; // Start capture if ready.
- },
- function() { // When absent.
- return true; // Check again after some time.
- });
- } else {
- // Check continuously for camera presence but don't select it.
- imageGrid.checkCameraPresence(function() { return false; },
- function() { return true; });
- }
chrome.send('onUserImageScreenShown');
},
@@ -296,6 +275,13 @@ cr.define('oobe', function() {
},
/**
+ * @param {boolean} present Whether camera is detected.
+ */
+ setCameraPresent_: function(present) {
+ $('user-image-grid').cameraPresent = present;
+ },
+
+ /**
* Appends default images to the image grid. Should only be called once.
* @param {Array.<{url: string, author: string, website: string}>} images
* An array of default images data, including URL, author and website.
diff --git a/chrome/browser/resources/chromeos/user_images_grid.js b/chrome/browser/resources/chromeos/user_images_grid.js
index 30d103d..a36bc61 100644
--- a/chrome/browser/resources/chromeos/user_images_grid.js
+++ b/chrome/browser/resources/chromeos/user_images_grid.js
@@ -10,8 +10,7 @@ cr.define('options', function() {
/** @const */ var ListSingleSelectionModel = cr.ui.ListSingleSelectionModel;
/**
- * Interval between consecutive camera presence checks in msec while camera is
- * not present.
+ * Interval between consecutive camera presence checks in msec.
* @const
*/
var CAMERA_CHECK_INTERVAL_MS = 3000;
@@ -208,6 +207,20 @@ cr.define('options', function() {
},
/**
+ * Start camera presence check.
+ * @private
+ */
+ checkCameraPresence_: function() {
+ if (this.cameraPresentCheckTimer_) {
+ window.clearTimeout(this.cameraPresentCheckTimer_);
+ this.cameraPresentCheckTimer_ = null;
+ }
+ if (!this.cameraVideo_)
+ return;
+ chrome.send('checkCameraPresence');
+ },
+
+ /**
* Whether a camera is present or not.
* @type {boolean}
*/
@@ -218,6 +231,10 @@ cr.define('options', function() {
this.cameraPresent_ = value;
if (this.cameraLive)
this.cameraImage = null;
+ // Repeat the check after some time.
+ this.cameraPresentCheckTimer_ = window.setTimeout(
+ this.checkCameraPresence_.bind(this),
+ CAMERA_CHECK_INTERVAL_MS);
},
/**
@@ -231,37 +248,27 @@ cr.define('options', function() {
set cameraOnline(value) {
this.previewElement.classList[value ? 'add' : 'remove']('online');
if (value) {
- this.cameraLiveCheckTimer_ = setInterval(
+ this.cameraLiveCheckTimer_ = window.setInterval(
this.checkCameraLive_.bind(this), CAMERA_LIVENESS_CHECK_MS);
} else if (this.cameraLiveCheckTimer_) {
- clearInterval(this.cameraLiveCheckTimer_);
+ window.clearInterval(this.cameraLiveCheckTimer_);
this.cameraLiveCheckTimer_ = null;
}
},
/**
- * Start camera presence check.
+ * Tries to starts camera stream capture.
* @param {function(): boolean} onAvailable Callback that is called if
* camera is available. If it returns |true|, capture is started
* immediately.
- * @param {function(): boolean} onAbsent Callback that is called if camera
- * is absent. If it returns |true|, camera is checked again after some
- * delay.
*/
- checkCameraPresence: function(onAvailable, onAbsent) {
- this.cameraOnline = false;
- if (this.cameraPresentCheckTimer_) {
- clearTimeout(this.cameraPresentCheckTimer_);
- this.cameraPresentCheckTimer_ = null;
- }
- if (!this.cameraVideo_)
- return;
- this.cameraCheckInProgress_ = true;
+ startCamera: function(onAvailable, onAbsent) {
+ this.stopCamera();
+ this.cameraStartInProgress_ = true;
navigator.webkitGetUserMedia(
{video: true},
this.handleCameraAvailable_.bind(this, onAvailable),
- // Needs both arguments since it may call checkCameraPresence again.
- this.handleCameraAbsent_.bind(this, onAvailable, onAbsent));
+ this.handleCameraAbsent_.bind(this));
},
/**
@@ -274,7 +281,7 @@ cr.define('options', function() {
if (this.cameraStream_)
this.cameraStream_.stop();
// Cancel any pending getUserMedia() checks.
- this.cameraCheckInProgress_ = false;
+ this.cameraStartInProgress_ = false;
},
/**
@@ -285,36 +292,24 @@ cr.define('options', function() {
* @private
*/
handleCameraAvailable_: function(onAvailable, stream) {
- this.cameraPresent = true;
- if (this.cameraCheckInProgress_ && onAvailable()) {
+ if (this.cameraStartInProgress_ && onAvailable()) {
this.cameraVideo_.src = window.webkitURL.createObjectURL(stream);
this.cameraStream_ = stream;
} else {
stream.stop();
}
- this.cameraCheckInProgress_ = false;
+ this.cameraStartInProgress_ = false;
},
/**
* Handles camera check failure.
- * @param {function(): boolean} onAvailable Callback that is called if
- * camera is available in future re-checks. If it returns |true|,
- * capture is started immediately.
- * @param {function(): boolean} onAbsent Callback to call. If it returns
- * |true|, camera is checked again after some delay.
* @param {NavigatorUserMediaError=} err Error object.
* @private
*/
- handleCameraAbsent_: function(onAvailable, onAbsent, err) {
+ handleCameraAbsent_: function(err) {
this.cameraPresent = false;
this.cameraOnline = false;
- if (onAbsent()) {
- // Repeat the check.
- this.cameraPresentCheckTimer_ = setTimeout(
- this.checkCameraPresence.bind(this, onAvailable, onAbsent),
- CAMERA_CHECK_INTERVAL_MS);
- }
- this.cameraCheckInProgress_ = false;
+ this.cameraStartInProgress_ = false;
},
/**
@@ -343,9 +338,7 @@ cr.define('options', function() {
checkCameraLive_: function() {
if (new Date().getTime() - this.lastFrameTime_ >
CAMERA_LIVENESS_CHECK_MS) {
- // Continue checking for camera presence but don't start capture.
- this.handleCameraAbsent_(function() { return false; },
- function() { return true; });
+ this.cameraPresent = false;
}
},
@@ -480,13 +473,9 @@ cr.define('options', function() {
this.cameraVideo_.addEventListener('timeupdate',
this.handleVideoUpdate_.bind(this));
this.updatePreview_();
- this.checkCameraPresence(
- function() {
- return false; // Don't start streaming if camera is present.
- },
- function() {
- return false; // Don't retry if camera is absent.
- });
+ // Initialize camera state and check for its presence.
+ this.cameraLive = true;
+ this.cameraPresent = false;
},
/**
@@ -548,7 +537,7 @@ cr.define('options', function() {
frameNo: 0,
lastTimestamp: new Date().getTime()
};
- captureData.timer = setInterval(
+ captureData.timer = window.setInterval(
this.captureVideoFrame_.bind(this, captureData), 1000 / RECORD_FPS);
},
@@ -613,7 +602,7 @@ cr.define('options', function() {
data.ctx.translate(0, CAPTURE_SIZE.height);
if (++data.frameNo == RECORD_FRAMES) {
- clearTimeout(data.timer);
+ window.clearTimeout(data.timer);
if (data.callback && typeof data.callback == 'function')
data.callback(data.canvas.toDataURL('image/png'));
}
diff --git a/chrome/browser/resources/options/chromeos/change_picture_options.js b/chrome/browser/resources/options/chromeos/change_picture_options.js
index 0287ab5..c788589 100644
--- a/chrome/browser/resources/options/chromeos/change_picture_options.js
+++ b/chrome/browser/resources/options/chromeos/change_picture_options.js
@@ -103,12 +103,9 @@ cr.define('options', function() {
*/
didShowPage: function() {
var imageGrid = $('user-image-grid');
- imageGrid.updateAndFocus();
// Reset camera element.
imageGrid.cameraImage = null;
- // Check continuously for camera presence but don't select it.
- imageGrid.checkCameraPresence(function() { return false; },
- function() { return true; });
+ imageGrid.updateAndFocus();
chrome.send('onChangePicturePageShown');
},
@@ -179,13 +176,10 @@ cr.define('options', function() {
if (!imageGrid.inProgramSelection &&
imageGrid.selectionType != e.oldSelectionType) {
if (imageGrid.selectionType == 'camera') {
- imageGrid.checkCameraPresence(
- function() { // When present.
+ imageGrid.startCamera(
+ function() {
// Start capture if camera is still the selected item.
return imageGrid.selectedItem == imageGrid.cameraImage;
- },
- function() { // When absent.
- return true; // Check again after some time.
});
} else {
imageGrid.stopCamera();
@@ -260,6 +254,13 @@ cr.define('options', function() {
},
/**
+ * @param {boolean} present Whether camera is detected.
+ */
+ setCameraPresent_: function(present) {
+ $('user-image-grid').cameraPresent = present;
+ },
+
+ /**
* Appends default images to the image grid. Should only be called once.
* @param {Array.<{url: string, author: string, website: string}>}
* imagesData An array of default images data, including URL, author and
diff --git a/chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.cc
index 29d9c5c..c9906f8 100644
--- a/chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.cc
@@ -10,7 +10,7 @@
#include "base/logging.h"
#include "base/metrics/histogram.h"
#include "base/values.h"
-#include "chrome/browser/chromeos/login/camera_detector.h"
+#include "chrome/browser/chromeos/camera_detector.h"
#include "chrome/browser/chromeos/login/default_user_images.h"
#include "chrome/browser/chromeos/login/user.h"
#include "chrome/browser/chromeos/login/webui_login_display.h"
@@ -117,13 +117,9 @@ void UserImageScreenHandler::SelectImage(int index) {
}
void UserImageScreenHandler::CheckCameraPresence() {
- // For WebRTC, camera presence checked is done on JS side.
-#if 0
- // TODO(ivankr): restore check on Chrome side.
CameraDetector::StartPresenceCheck(
base::Bind(&UserImageScreenHandler::OnCameraPresenceCheckDone,
weak_factory_.GetWeakPtr()));
-#endif
}
void UserImageScreenHandler::RegisterMessages() {
@@ -136,6 +132,9 @@ void UserImageScreenHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback("selectImage",
base::Bind(&UserImageScreenHandler::HandleSelectImage,
base::Unretained(this)));
+ web_ui()->RegisterMessageCallback("checkCameraPresence",
+ base::Bind(&UserImageScreenHandler::HandleCheckCameraPresence,
+ base::Unretained(this)));
web_ui()->RegisterMessageCallback("onUserImageAccepted",
base::Bind(&UserImageScreenHandler::HandleImageAccepted,
base::Unretained(this)));
@@ -213,6 +212,12 @@ void UserImageScreenHandler::HandlePhotoTaken(const base::ListValue* args) {
image_decoder_->Start();
}
+void UserImageScreenHandler::HandleCheckCameraPresence(
+ const base::ListValue* args) {
+ DCHECK(args->empty());
+ CheckCameraPresence();
+}
+
void UserImageScreenHandler::HandleSelectImage(const base::ListValue* args) {
std::string image_url;
if (!args || args->GetSize() != 1 || !args->GetString(0, &image_url))
diff --git a/chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.h
index 64f497f..e23ad003 100644
--- a/chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.h
@@ -59,6 +59,9 @@ class UserImageScreenHandler : public UserImageScreenActor,
// Handles photo taken with WebRTC UI.
void HandlePhotoTaken(const base::ListValue* args);
+ // Handles camera presence check request.
+ void HandleCheckCameraPresence(const base::ListValue* args);
+
// Handles clicking on default user image.
void HandleSelectImage(const base::ListValue* args);
diff --git a/chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.cc
index ac1be7e..b087b82 100644
--- a/chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.cc
+++ b/chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.cc
@@ -12,7 +12,7 @@
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
-#include "chrome/browser/chromeos/login/camera_detector.h"
+#include "chrome/browser/chromeos/camera_detector.h"
#include "chrome/browser/chromeos/login/default_user_images.h"
#include "chrome/browser/chromeos/login/user_image.h"
#include "chrome/browser/chromeos/login/user_image_manager.h"
@@ -115,6 +115,9 @@ void ChangePictureOptionsHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback("photoTaken",
base::Bind(&ChangePictureOptionsHandler::HandlePhotoTaken,
base::Unretained(this)));
+ web_ui()->RegisterMessageCallback("checkCameraPresence",
+ base::Bind(&ChangePictureOptionsHandler::HandleCheckCameraPresence,
+ base::Unretained(this)));
web_ui()->RegisterMessageCallback("onChangePicturePageShown",
base::Bind(&ChangePictureOptionsHandler::HandlePageShown,
base::Unretained(this)));
@@ -189,33 +192,20 @@ void ChangePictureOptionsHandler::HandlePhotoTaken(
image_decoder_->Start();
}
+void ChangePictureOptionsHandler::HandleCheckCameraPresence(
+ const base::ListValue* args) {
+ DCHECK(args->empty());
+ CheckCameraPresence();
+}
+
void ChangePictureOptionsHandler::HandlePageInitialized(
const base::ListValue* args) {
DCHECK(args && args->empty());
-
-#if 0
- // TODO(ivankr): restore check on Chrome side.
- // If no camera presence check has been performed in this session,
- // start one now.
- if (CameraDetector::camera_presence() ==
- CameraDetector::kCameraPresenceUnknown) {
- CheckCameraPresence();
- }
-
- // While the check is in progress, use previous camera presence state and
- // presume it is present if no check has been performed yet.
- SetCameraPresent(CameraDetector::camera_presence() !=
- CameraDetector::kCameraAbsent);
-#endif
-
SendDefaultImages();
}
void ChangePictureOptionsHandler::HandlePageShown(const base::ListValue* args) {
DCHECK(args && args->empty());
- // TODO(ivankr): If user opens settings and goes to Change Picture page right
- // after the check started |HandlePageInitialized| has been completed,
- // |CheckCameraPresence| will be called twice, should be throttled.
CheckCameraPresence();
SendSelectedImage();
UpdateProfileImage();
@@ -381,13 +371,9 @@ void ChangePictureOptionsHandler::SetImageFromCamera(
}
void ChangePictureOptionsHandler::CheckCameraPresence() {
- // For WebRTC, camera presence checked is done on JS side.
-#if 0
- // TODO(ivankr): restore check on Chrome side.
CameraDetector::StartPresenceCheck(
base::Bind(&ChangePictureOptionsHandler::OnCameraPresenceCheckDone,
weak_factory_.GetWeakPtr()));
-#endif
}
void ChangePictureOptionsHandler::SetCameraPresent(bool present) {
diff --git a/chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.h b/chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.h
index e0dcde2..cec25ea 100644
--- a/chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.h
+++ b/chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.h
@@ -66,6 +66,9 @@ class ChangePictureOptionsHandler : public ::options::OptionsPageUIHandler,
// Handles photo taken with WebRTC UI.
void HandlePhotoTaken(const base::ListValue* args);
+ // Handles camera presence check request.
+ void HandleCheckCameraPresence(const base::ListValue* args);
+
// Gets the list of available user images and sends it to the page.
void HandleGetAvailableImages(const base::ListValue* args);
diff --git a/chrome/chrome_browser_chromeos.gypi b/chrome/chrome_browser_chromeos.gypi
index 992e1a5..593127b 100644
--- a/chrome/chrome_browser_chromeos.gypi
+++ b/chrome/chrome_browser_chromeos.gypi
@@ -123,6 +123,8 @@
'browser/chromeos/background/ash_user_wallpaper_delegate.h',
'browser/chromeos/boot_times_loader.cc',
'browser/chromeos/boot_times_loader.h',
+ 'browser/chromeos/camera_detector.cc',
+ 'browser/chromeos/camera_detector.h',
'browser/chromeos/choose_mobile_network_dialog.cc',
'browser/chromeos/choose_mobile_network_dialog.h',
'browser/chromeos/chrome_browser_main_chromeos.cc',
@@ -357,8 +359,6 @@
'browser/chromeos/login/base_login_display_host.cc',
'browser/chromeos/login/base_login_display_host.h',
'browser/chromeos/login/base_login_display_host.h',
- 'browser/chromeos/login/camera_detector.cc',
- 'browser/chromeos/login/camera_detector.h',
'browser/chromeos/login/captive_portal_view.cc',
'browser/chromeos/login/captive_portal_view.h',
'browser/chromeos/login/captive_portal_window_proxy.cc',