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

Side by Side Diff: chrome/browser/extensions/user_script_master.cc

Issue 407043002: Content Verification: Don't access UI-thread objects on the IO thread (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/user_script_master.h" 5 #include "chrome/browser/extensions/user_script_master.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 21 matching lines...) Expand all
32 using extensions::ExtensionsBrowserClient; 32 using extensions::ExtensionsBrowserClient;
33 33
34 namespace extensions { 34 namespace extensions {
35 35
36 namespace { 36 namespace {
37 37
38 typedef base::Callback<void(scoped_ptr<UserScriptList>, 38 typedef base::Callback<void(scoped_ptr<UserScriptList>,
39 scoped_ptr<base::SharedMemory>)> 39 scoped_ptr<base::SharedMemory>)>
40 LoadScriptsCallback; 40 LoadScriptsCallback;
41 41
42 void VerifyContent(scoped_refptr<ContentVerifier> verifier, 42 void VerifyContent(scoped_refptr<ContentVerifier> verifier,
Ken Rockot(use gerrit already) 2014/07/22 16:44:22 Could you DCHECK that you're on the IO thread here
asargent_no_longer_on_chrome 2014/07/22 20:27:28 Done.
43 const std::string& extension_id, 43 const std::string& extension_id,
44 const base::FilePath& extension_root, 44 const base::FilePath& extension_root,
45 const base::FilePath& relative_path, 45 const base::FilePath& relative_path,
46 const std::string& content) { 46 const std::string& content) {
47 scoped_refptr<ContentVerifyJob> job( 47 scoped_refptr<ContentVerifyJob> job(
48 verifier->CreateJobFor(extension_id, extension_root, relative_path)); 48 verifier->CreateJobFor(extension_id, extension_root, relative_path));
49 if (job.get()) { 49 if (job.get()) {
50 job->Start(); 50 job->Start();
51 job->BytesRead(content.size(), content.data()); 51 job->BytesRead(content.size(), content.data());
52 job->DoneReading(); 52 job->DoneReading();
(...skipping 21 matching lines...) Expand all
74 << script_file->relative_path().value() << " from " 74 << script_file->relative_path().value() << " from "
75 << script_file->extension_root().value(); 75 << script_file->extension_root().value();
76 return false; 76 return false;
77 } 77 }
78 } else { 78 } else {
79 if (!base::ReadFileToString(path, &content)) { 79 if (!base::ReadFileToString(path, &content)) {
80 LOG(WARNING) << "Failed to load user script file: " << path.value(); 80 LOG(WARNING) << "Failed to load user script file: " << path.value();
81 return false; 81 return false;
82 } 82 }
83 if (verifier) { 83 if (verifier) {
84 VerifyContent(verifier, 84 content::BrowserThread::PostTask(content::BrowserThread::IO,
85 extension_id, 85 FROM_HERE,
86 script_file->extension_root(), 86 base::Bind(&VerifyContent,
87 script_file->relative_path(), 87 verifier,
88 content); 88 extension_id,
89 script_file->extension_root(),
90 script_file->relative_path(),
91 content));
89 } 92 }
90 } 93 }
91 94
92 // Localize the content. 95 // Localize the content.
93 if (localization_messages) { 96 if (localization_messages) {
94 std::string error; 97 std::string error;
95 MessageBundle::ReplaceMessagesWithExternalDictionary( 98 MessageBundle::ReplaceMessagesWithExternalDictionary(
96 *localization_messages, &content, &error); 99 *localization_messages, &content, &error);
97 if (!error.empty()) { 100 if (!error.empty()) {
98 LOG(WARNING) << "Failed to replace messages in script: " << error; 101 LOG(WARNING) << "Failed to replace messages in script: " << error;
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 if (!shared_memory->ShareToProcess(handle, &handle_for_process)) 542 if (!shared_memory->ShareToProcess(handle, &handle_for_process))
540 return; // This can legitimately fail if the renderer asserts at startup. 543 return; // This can legitimately fail if the renderer asserts at startup.
541 544
542 if (base::SharedMemory::IsHandleValid(handle_for_process)) { 545 if (base::SharedMemory::IsHandleValid(handle_for_process)) {
543 process->Send(new ExtensionMsg_UpdateUserScripts(handle_for_process, 546 process->Send(new ExtensionMsg_UpdateUserScripts(handle_for_process,
544 changed_extensions)); 547 changed_extensions));
545 } 548 }
546 } 549 }
547 550
548 } // namespace extensions 551 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_system_impl.cc ('k') | extensions/browser/content_hash_fetcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698