Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1132)

Unified Diff: chrome/browser/renderer_host/pepper/device_id_fetcher.cc

Issue 23903051: Eliminate CHECK from CryptohomeLibrary::LoadSystemSalt (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/renderer_host/pepper/device_id_fetcher.cc
diff --git a/chrome/browser/renderer_host/pepper/device_id_fetcher.cc b/chrome/browser/renderer_host/pepper/device_id_fetcher.cc
index 585d62d19867b1f376748584d5f65a52931cc22b..49a7dda007cc4f73c5455fb24af4a24fcf4aa1a8 100644
--- a/chrome/browser/renderer_host/pepper/device_id_fetcher.cc
+++ b/chrome/browser/renderer_host/pepper/device_id_fetcher.cc
@@ -36,11 +36,34 @@ const char kDRMIdentifierFile[] = "Pepper DRM ID.0";
const uint32_t kSaltLength = 32;
+void GetMachineIdAsync(const DeviceIDFetcher::IDCallback& callback) {
+ std::string result;
+#if defined(OS_WIN) && defined(ENABLE_RLZ)
+ rlz_lib::GetMachineId(&result);
+#elif defined(OS_CHROMEOS)
+ result = chromeos::CryptohomeLibrary::Get()->GetSystemSalt();
+ if (result.empty()) {
+ // cryptohome must not be running; re-request after a delay.
+ const int64 kRequestStstemSaltDelayMs = 500;
raymes 2013/09/16 22:13:38 -Ststem -> System -Seems ok to retry but how did y
stevenjb 2013/09/16 22:32:48 The delay is designed to be long enough not to spa
+ base::MessageLoop::current()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&GetMachineIdAsync, callback),
+ base::TimeDelta::FromMilliseconds(kRequestStstemSaltDelayMs));
+ return;
+ }
+#else
+ // Not implemented for other platforms.
+ NOTREACHED();
+#endif
+ callback.Run(result);
+}
+
} // namespace
DeviceIDFetcher::DeviceIDFetcher(int render_process_id)
: in_progress_(false),
- render_process_id_(render_process_id) {
+ render_process_id_(render_process_id),
+ weak_ptr_factory_(this) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
}
@@ -74,14 +97,6 @@ void DeviceIDFetcher::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
}
-// static
-base::FilePath DeviceIDFetcher::GetLegacyDeviceIDPath(
- const base::FilePath& profile_path) {
- return profile_path.AppendASCII(kDRMIdentifierFile);
-}
-
-// TODO(raymes): Change this to just return the device id salt and call it with
-// PostTaskAndReply once the legacy ChromeOS codepath is removed.
void DeviceIDFetcher::CheckPrefsOnUIThread() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -110,34 +125,33 @@ void DeviceIDFetcher::CheckPrefsOnUIThread() {
profile->GetPrefs()->SetString(prefs::kDRMSalt, salt);
}
-#if defined(OS_CHROMEOS)
- // Try the legacy path first for ChromeOS. We pass the new salt in as well
- // in case the legacy id doesn't exist.
stevenjb 2013/09/16 21:54:12 Since Chrome and ChromeOS are synced, I believe th
raymes 2013/09/16 22:13:38 Unfortunately I think we have to keep this. If som
stevenjb 2013/09/16 22:32:48 Ugh, you man this isn't something we can automatic
raymes 2013/09/18 23:21:20 Not easily. There's a bug filed at https://code.go
- BrowserThread::PostBlockingPoolTask(FROM_HERE,
- base::Bind(&DeviceIDFetcher::ComputeOnBlockingPool, this,
- profile->GetPath(), salt));
-#else
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(&DeviceIDFetcher::ComputeOnIOThread, this, salt));
-#endif
-}
-
-
-void DeviceIDFetcher::ComputeOnIOThread(const std::string& salt) {
std::vector<uint8> salt_bytes;
if (!base::HexStringToBytes(salt, &salt_bytes))
salt_bytes.clear();
+ if (salt_bytes.size() != kSaltLength) {
+ LOG(ERROR) << "Unexpected salt bytes length: " << salt_bytes.size();
+ RunCallbackOnIOThread(std::string());
+ return;
+ }
- // Build the identifier as follows:
- // SHA256(machine-id||service||SHA256(machine-id||service||salt))
- std::string machine_id = GetMachineID();
stevenjb 2013/09/16 21:54:12 Calling this on the IO thread was actually incorre
raymes 2013/09/16 22:13:38 Thanks for catching this. That makes sense :)
- if (machine_id.empty() || salt_bytes.size() != kSaltLength) {
- NOTREACHED();
+ GetMachineIdAsync(
+ base::Bind(&DeviceIDFetcher::ComputeOnUIThread,
+ weak_ptr_factory_.GetWeakPtr(),
+ salt_bytes));
+}
+
+void DeviceIDFetcher::ComputeOnUIThread(const std::vector<uint8>& salt_bytes,
+ const std::string& machine_id) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ if (machine_id.empty()) {
+ LOG(ERROR) << "Empty machine id";
RunCallbackOnIOThread(std::string());
return;
}
+ // Build the identifier as follows:
+ // SHA256(machine-id||service||SHA256(machine-id||service||salt))
char id_buf[256 / 8]; // 256-bits for SHA256
std::string input = machine_id;
input.append(kDRMIdentifierFile);
@@ -156,28 +170,6 @@ void DeviceIDFetcher::ComputeOnIOThread(const std::string& salt) {
RunCallbackOnIOThread(id);
}
-// TODO(raymes): This is temporary code to migrate ChromeOS devices to the new
-// scheme for generating device IDs. Delete this once we are sure most ChromeOS
-// devices have been migrated.
-void DeviceIDFetcher::ComputeOnBlockingPool(const base::FilePath& profile_path,
- const std::string& salt) {
- std::string id;
- // First check if the legacy device ID file exists on ChromeOS. If it does, we
- // should just return that.
- base::FilePath id_path = GetLegacyDeviceIDPath(profile_path);
- if (base::PathExists(id_path)) {
- if (base::ReadFileToString(id_path, &id) && !id.empty()) {
- RunCallbackOnIOThread(id);
- return;
- }
- }
- // If we didn't find an ID, go back to the new code path to generate an ID.
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(&DeviceIDFetcher::ComputeOnIOThread, this, salt));
-}
-
-
void DeviceIDFetcher::RunCallbackOnIOThread(const std::string& id) {
if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
BrowserThread::PostTask(
@@ -189,19 +181,4 @@ void DeviceIDFetcher::RunCallbackOnIOThread(const std::string& id) {
callback_.Run(id);
}
-std::string DeviceIDFetcher::GetMachineID() {
-#if defined(OS_WIN) && defined(ENABLE_RLZ)
- std::string result;
- rlz_lib::GetMachineId(&result);
- return result;
-#elif defined(OS_CHROMEOS)
- chromeos::CryptohomeLibrary* c_home = chromeos::CryptohomeLibrary::Get();
- return c_home->GetSystemSalt();
-#else
- // Not implemented for other platforms.
- NOTREACHED();
- return "";
-#endif
-}
-
} // namespace chrome

Powered by Google App Engine
This is Rietveld 408576698