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

Side by Side Diff: chrome/renderer/user_script_slave.cc

Issue 567037: Initial work on making extensions work in incognito mode. (Closed)
Patch Set: added experimental requirement Created 10 years, 10 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
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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/renderer/user_script_slave.h" 5 #include "chrome/renderer/user_script_slave.h"
6 6
7 #include "app/resource_bundle.h" 7 #include "app/resource_bundle.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/histogram.h" 9 #include "base/histogram.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 IDR_GREASEMONKEY_API_JS); 61 IDR_GREASEMONKEY_API_JS);
62 } 62 }
63 63
64 void UserScriptSlave::GetActiveExtensions(std::set<std::string>* extension_ids) { 64 void UserScriptSlave::GetActiveExtensions(std::set<std::string>* extension_ids) {
65 for (size_t i = 0; i < scripts_.size(); ++i) { 65 for (size_t i = 0; i < scripts_.size(); ++i) {
66 DCHECK(!scripts_[i]->extension_id().empty()); 66 DCHECK(!scripts_[i]->extension_id().empty());
67 extension_ids->insert(scripts_[i]->extension_id()); 67 extension_ids->insert(scripts_[i]->extension_id());
68 } 68 }
69 } 69 }
70 70
71 bool UserScriptSlave::UpdateScripts(base::SharedMemoryHandle shared_memory) { 71 bool UserScriptSlave::UpdateScripts(base::SharedMemoryHandle shared_memory,
72 bool only_inject_incognito) {
72 scripts_.clear(); 73 scripts_.clear();
73 74
74 // Create the shared memory object (read only). 75 // Create the shared memory object (read only).
75 shared_memory_.reset(new base::SharedMemory(shared_memory, true)); 76 shared_memory_.reset(new base::SharedMemory(shared_memory, true));
76 if (!shared_memory_.get()) 77 if (!shared_memory_.get())
77 return false; 78 return false;
78 79
79 // First get the size of the memory block. 80 // First get the size of the memory block.
80 if (!shared_memory_->Map(sizeof(Pickle::Header))) 81 if (!shared_memory_->Map(sizeof(Pickle::Header)))
81 return false; 82 return false;
(...skipping 12 matching lines...) Expand all
94 Pickle pickle(reinterpret_cast<char*>(shared_memory_->memory()), 95 Pickle pickle(reinterpret_cast<char*>(shared_memory_->memory()),
95 pickle_size); 96 pickle_size);
96 pickle.ReadSize(&iter, &num_scripts); 97 pickle.ReadSize(&iter, &num_scripts);
97 98
98 scripts_.reserve(num_scripts); 99 scripts_.reserve(num_scripts);
99 for (size_t i = 0; i < num_scripts; ++i) { 100 for (size_t i = 0; i < num_scripts; ++i) {
100 scripts_.push_back(new UserScript()); 101 scripts_.push_back(new UserScript());
101 UserScript* script = scripts_.back(); 102 UserScript* script = scripts_.back();
102 script->Unpickle(pickle, &iter); 103 script->Unpickle(pickle, &iter);
103 104
105 if (only_inject_incognito && !script->is_incognito_enabled()) {
106 // This script shouldn't run in an incognito tab.
107 delete script;
108 scripts_.pop_back();
109 continue;
110 }
111
104 // Note that this is a pointer into shared memory. We don't own it. It gets 112 // Note that this is a pointer into shared memory. We don't own it. It gets
105 // cleared up when the last renderer or browser process drops their 113 // cleared up when the last renderer or browser process drops their
106 // reference to the shared memory. 114 // reference to the shared memory.
107 for (size_t j = 0; j < script->js_scripts().size(); ++j) { 115 for (size_t j = 0; j < script->js_scripts().size(); ++j) {
108 const char* body = NULL; 116 const char* body = NULL;
109 int body_length = 0; 117 int body_length = 0;
110 CHECK(pickle.ReadData(&iter, &body, &body_length)); 118 CHECK(pickle.ReadData(&iter, &body, &body_length));
111 script->js_scripts()[j].set_external_content( 119 script->js_scripts()[j].set_external_content(
112 base::StringPiece(body, body_length)); 120 base::StringPiece(body, body_length));
113 } 121 }
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 if (num_scripts) 234 if (num_scripts)
227 UMA_HISTOGRAM_TIMES("Extensions.InjectIdle_Time", timer.Elapsed()); 235 UMA_HISTOGRAM_TIMES("Extensions.InjectIdle_Time", timer.Elapsed());
228 } else { 236 } else {
229 NOTREACHED(); 237 NOTREACHED();
230 } 238 }
231 239
232 LOG(INFO) << "Injected " << num_scripts << " scripts and " << num_css << 240 LOG(INFO) << "Injected " << num_scripts << " scripts and " << num_css <<
233 "css files into " << frame->url().spec().data(); 241 "css files into " << frame->url().spec().data();
234 return true; 242 return true;
235 } 243 }
OLDNEW
« no previous file with comments | « chrome/renderer/user_script_slave.h ('k') | chrome/test/data/extensions/api_test/browser_action/add_popup/manifest.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698