Index: chrome/browser/extensions/api/log_private/log_private_api_chromeos.cc |
diff --git a/chrome/browser/extensions/api/log_private/log_private_api_chromeos.cc b/chrome/browser/extensions/api/log_private/log_private_api_chromeos.cc |
index b767c1bad7aec6c704fac84b57389f30112cef21..a3ee129773327fc5dded4b90171f348e2f5f8320 100644 |
--- a/chrome/browser/extensions/api/log_private/log_private_api_chromeos.cc |
+++ b/chrome/browser/extensions/api/log_private/log_private_api_chromeos.cc |
@@ -61,11 +61,16 @@ scoped_refptr<base::SequencedTaskRunner> GetSequencedTaskRunner() { |
base::SequencedWorkerPool::BLOCK_SHUTDOWN); |
} |
+#if DCHECK_IS_ON() |
+base::LazyInstance<base::SequenceChecker>::Leaky |
+ g_file_resource_sequence_checker = LAZY_INSTANCE_INITIALIZER; |
+#endif |
+ |
// Checks if we are running on sequenced task runner thread. |
-bool IsRunningOnSequenceThread() { |
- base::SequencedWorkerPool* pool = content::BrowserThread::GetBlockingPool(); |
- return pool->IsRunningSequenceOnCurrentThread( |
- pool->GetNamedSequenceToken(FileResource::kSequenceToken)); |
+void AssertCurrentlyOnFileResourceSequence() { |
+#if DCHECK_IS_ON() |
+ DCHECK(g_file_resource_sequence_checker.Get().CalledOnValidSequence()); |
+#endif |
} |
std::unique_ptr<LogParser> CreateLogParser(const std::string& log_type) { |
@@ -114,7 +119,7 @@ void CleanUpLeftoverLogs(bool is_primary_profile, |
LOG(WARNING) << "Deleting " << app_logs_dir.value(); |
LOG(WARNING) << "Deleting " << logs_dumps.value(); |
- DCHECK(IsRunningOnSequenceThread()); |
+ AssertCurrentlyOnFileResourceSequence(); |
base::DeleteFile(logs_dumps, true); |
// App-specific logs are stored in /home/chronos/user/log/apps directory that |
@@ -193,17 +198,10 @@ void LogPrivateAPI::StopAllWatches(const std::string& extension_id, |
void LogPrivateAPI::RegisterTempFile(const std::string& owner_extension_id, |
const base::FilePath& file_path) { |
- if (!IsRunningOnSequenceThread()) { |
- GetSequencedTaskRunner()->PostTask( |
- FROM_HERE, |
- base::Bind(&LogPrivateAPI::RegisterTempFile, |
- base::Unretained(this), |
- owner_extension_id, |
- file_path)); |
- return; |
- } |
- |
- log_file_resources_.Add(new FileResource(owner_extension_id, file_path)); |
+ GetSequencedTaskRunner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&LogPrivateAPI::RegisterTempFileOnFileResourceSequence, |
+ base::Unretained(this), owner_extension_id, file_path)); |
} |
static base::LazyInstance<BrowserContextKeyedAPIFactory<LogPrivateAPI> > |
@@ -259,7 +257,7 @@ void LogPrivateAPI::AddEntriesOnUI(std::unique_ptr<base::ListValue> value) { |
void LogPrivateAPI::CreateTempNetLogFile(const std::string& owner_extension_id, |
base::ScopedFILE* file) { |
- DCHECK(IsRunningOnSequenceThread()); |
+ AssertCurrentlyOnFileResourceSequence(); |
// Create app-specific subdirectory in session logs folder. |
base::FilePath app_log_dir = GetAppLogDirectory().Append(owner_extension_id); |
@@ -278,7 +276,7 @@ void LogPrivateAPI::CreateTempNetLogFile(const std::string& owner_extension_id, |
return; |
} |
- RegisterTempFile(owner_extension_id, file_path); |
+ RegisterTempFileOnFileResourceSequence(owner_extension_id, file_path); |
return file->reset(file_ptr); |
} |
@@ -388,6 +386,13 @@ void LogPrivateAPI::Initialize() { |
GetLogDumpDirectory(browser_context_))); |
} |
+void LogPrivateAPI::RegisterTempFileOnFileResourceSequence( |
+ const std::string& owner_extension_id, |
+ const base::FilePath& file_path) { |
+ AssertCurrentlyOnFileResourceSequence(); |
+ log_file_resources_.Add(new FileResource(owner_extension_id, file_path)); |
+} |
+ |
void LogPrivateAPI::OnExtensionUnloaded( |
content::BrowserContext* browser_context, |
const Extension* extension, |