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

Unified Diff: chrome/browser/extensions/user_script_master.cc

Issue 282393002: Getting rid of raw pointers to SharedMemory in UserScriptMaster (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: reformat + assigning |handle.Pass()| instead of swapping Created 6 years, 7 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
« no previous file with comments | « chrome/browser/extensions/user_script_master.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/user_script_master.cc
diff --git a/chrome/browser/extensions/user_script_master.cc b/chrome/browser/extensions/user_script_master.cc
index ccf7f1918a2920eedfd0dccc6ebc8bae91419f72..1bcf1347ff5a5cdce54f5177ff21a48e07349e7c 100644
--- a/chrome/browser/extensions/user_script_master.cc
+++ b/chrome/browser/extensions/user_script_master.cc
@@ -7,6 +7,7 @@
#include <string>
#include "base/bind.h"
+#include "base/bind_helpers.h"
#include "base/file_util.h"
#include "base/files/file_path.h"
#include "base/version.h"
@@ -166,12 +167,10 @@ void UserScriptMaster::ScriptReloader::StartLoad(
UserScriptMaster::ScriptReloader::~ScriptReloader() {}
void UserScriptMaster::ScriptReloader::NotifyMaster(
- base::SharedMemory* memory) {
- // The master went away, so these new scripts aren't useful anymore.
- if (!master_)
- delete memory;
- else
- master_->NewScriptsAvailable(memory);
+ scoped_ptr<base::SharedMemory> memory) {
+ // The master could go away
+ if (master_)
+ master_->NewScriptsAvailable(memory.Pass());
// Drop our self-reference.
// Balances StartLoad().
@@ -284,7 +283,7 @@ SubstitutionMap* UserScriptMaster::ScriptReloader::GetLocalizationMessages(
}
// Pickle user scripts and return pointer to the shared memory.
-static base::SharedMemory* Serialize(const UserScriptList& scripts) {
+static scoped_ptr<base::SharedMemory> Serialize(const UserScriptList& scripts) {
Pickle pickle;
pickle.WriteUInt64(scripts.size());
for (size_t i = 0; i < scripts.size(); i++) {
@@ -312,10 +311,10 @@ static base::SharedMemory* Serialize(const UserScriptList& scripts) {
options.size = pickle.size();
options.share_read_only = true;
if (!shared_memory.Create(options))
- return NULL;
+ return scoped_ptr<base::SharedMemory>();
if (!shared_memory.Map(pickle.size()))
- return NULL;
+ return scoped_ptr<base::SharedMemory>();
// Copy the pickle to shared memory.
memcpy(shared_memory.memory(), pickle.data(), pickle.size());
@@ -323,9 +322,10 @@ static base::SharedMemory* Serialize(const UserScriptList& scripts) {
base::SharedMemoryHandle readonly_handle;
if (!shared_memory.ShareReadOnlyToProcess(base::GetCurrentProcessHandle(),
&readonly_handle))
- return NULL;
+ return scoped_ptr<base::SharedMemory>();
- return new base::SharedMemory(readonly_handle, /*read_only=*/true);
+ return make_scoped_ptr(new base::SharedMemory(readonly_handle,
+ /*read_only=*/true));
}
// This method will be called on the file thread.
@@ -336,10 +336,11 @@ void UserScriptMaster::ScriptReloader::RunLoad(
// Scripts now contains list of up-to-date scripts. Load the content in the
// shared memory and let the master know it's ready. We need to post the task
// back even if no scripts ware found to balance the AddRef/Release calls.
- BrowserThread::PostTask(
- master_thread_id_, FROM_HERE,
- base::Bind(
- &ScriptReloader::NotifyMaster, this, Serialize(user_scripts)));
+ BrowserThread::PostTask(master_thread_id_,
+ FROM_HERE,
+ base::Bind(&ScriptReloader::NotifyMaster,
+ this,
+ base::Passed(Serialize(user_scripts))));
}
UserScriptMaster::UserScriptMaster(Profile* profile)
@@ -359,10 +360,8 @@ UserScriptMaster::~UserScriptMaster() {
script_reloader_->DisownMaster();
}
-void UserScriptMaster::NewScriptsAvailable(base::SharedMemory* handle) {
- // Ensure handle is deleted or released.
- scoped_ptr<base::SharedMemory> handle_deleter(handle);
-
+void UserScriptMaster::NewScriptsAvailable(
+ scoped_ptr<base::SharedMemory> handle) {
if (pending_load_) {
// While we were loading, there were further changes. Don't bother
// notifying about these scripts and instead just immediately reload.
@@ -385,18 +384,18 @@ void UserScriptMaster::NewScriptsAvailable(base::SharedMemory* handle) {
}
// We've got scripts ready to go.
- shared_memory_.swap(handle_deleter);
+ shared_memory_ = handle.Pass();
for (content::RenderProcessHost::iterator i(
content::RenderProcessHost::AllHostsIterator());
!i.IsAtEnd(); i.Advance()) {
- SendUpdate(i.GetCurrentValue(), handle);
+ SendUpdate(i.GetCurrentValue(), shared_memory_.get());
}
content::NotificationService::current()->Notify(
chrome::NOTIFICATION_USER_SCRIPTS_UPDATED,
content::Source<Profile>(profile_),
- content::Details<base::SharedMemory>(handle));
+ content::Details<base::SharedMemory>(shared_memory_.get()));
}
}
« no previous file with comments | « chrome/browser/extensions/user_script_master.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698