| Index: chrome/browser/greasemonkey_master.cc
|
| ===================================================================
|
| --- chrome/browser/greasemonkey_master.cc (revision 0)
|
| +++ chrome/browser/greasemonkey_master.cc (revision 0)
|
| @@ -0,0 +1,73 @@
|
| +// Copyright (c) 2008 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/greasemonkey_master.h"
|
| +
|
| +#include "base/file_util.h"
|
| +#include "base/logging.h"
|
| +#include "base/path_service.h"
|
| +#include "base/pickle.h"
|
| +#include "base/string_util.h"
|
| +#include "chrome/common/chrome_paths.h"
|
| +
|
| +bool GreasemonkeyMaster::UpdateScripts() {
|
| + std::vector<std::string> scripts;
|
| + std::wstring path;
|
| +
|
| + PathService::Get(chrome::DIR_USER_SCRIPTS, &path);
|
| + file_util::FileEnumerator enumerator(path, false,
|
| + file_util::FileEnumerator::FILES,
|
| + L"*.user.js");
|
| + for (std::wstring file = enumerator.Next(); !file.empty();
|
| + file = enumerator.Next()) {
|
| + // TODO(aa): Support unicode script files.
|
| + std::string contents;
|
| + file_util::ReadFileToString(file, &contents);
|
| + scripts.push_back(contents);
|
| + }
|
| +
|
| + // Pickle scripts data.
|
| + Pickle pickle;
|
| + pickle.WriteSize(scripts.size());
|
| + for (std::vector<std::string>::iterator script = scripts.begin();
|
| + script != scripts.end(); ++script) {
|
| + // Write script body as 'data' so that we can read it out in the slave
|
| + // without allocating a new string.
|
| + pickle.WriteData(script->c_str(), script->size());
|
| + }
|
| +
|
| + // Create the shared memory object.
|
| + scoped_ptr<SharedMemory> temp_shared_memory(new SharedMemory());
|
| + if (!temp_shared_memory.get()) {
|
| + return false;
|
| + }
|
| +
|
| + shared_memory_serial_++;
|
| + if (!temp_shared_memory->Create(std::wstring(), // anonymous
|
| + false, // read-only
|
| + false, // open existing
|
| + pickle.size())) {
|
| + return false;
|
| + }
|
| +
|
| + // Map into our process.
|
| + if (!temp_shared_memory->Map(pickle.size())) {
|
| + return false;
|
| + }
|
| +
|
| + // Copy the pickle to shared memory.
|
| + memcpy(temp_shared_memory->memory(), pickle.data(), pickle.size());
|
| +
|
| + shared_memory_.reset(temp_shared_memory.release());
|
| + return true;
|
| +}
|
| +
|
| +bool GreasemonkeyMaster::ShareToProcess(ProcessHandle process,
|
| + SharedMemoryHandle* new_handle) {
|
| + if (shared_memory_.get())
|
| + return shared_memory_->ShareToProcess(process, new_handle);
|
| +
|
| + NOTREACHED();
|
| + return false;
|
| +}
|
|
|