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

Side by Side Diff: content/renderer/mojo_context_state.cc

Issue 2705073003: Remove ScopedVector from content/renderer/. (Closed)
Patch Set: Fix win trybots Created 3 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/renderer/mojo_context_state.h" 5 #include "content/renderer/mojo_context_state.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <map> 9 #include <map>
10 #include <string> 10 #include <string>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/lazy_instance.h" 13 #include "base/lazy_instance.h"
14 #include "base/memory/ptr_util.h"
14 #include "base/memory/ref_counted.h" 15 #include "base/memory/ref_counted.h"
15 #include "base/memory/ref_counted_memory.h" 16 #include "base/memory/ref_counted_memory.h"
16 #include "base/stl_util.h" 17 #include "base/stl_util.h"
17 #include "content/grit/content_resources.h" 18 #include "content/grit/content_resources.h"
18 #include "content/public/common/content_client.h" 19 #include "content/public/common/content_client.h"
19 #include "content/public/renderer/render_frame.h" 20 #include "content/public/renderer/render_frame.h"
20 #include "content/public/renderer/resource_fetcher.h" 21 #include "content/public/renderer/resource_fetcher.h"
21 #include "content/renderer/mojo_bindings_controller.h" 22 #include "content/renderer/mojo_bindings_controller.h"
22 #include "content/renderer/mojo_main_runner.h" 23 #include "content/renderer/mojo_main_runner.h"
23 #include "gin/converter.h" 24 #include "gin/converter.h"
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 } 176 }
176 } 177 }
177 178
178 void MojoContextState::FetchModule(const std::string& id) { 179 void MojoContextState::FetchModule(const std::string& id) {
179 const GURL url(module_prefix_ + id); 180 const GURL url(module_prefix_ + id);
180 // TODO(sky): better error checks here? 181 // TODO(sky): better error checks here?
181 DCHECK(url.is_valid() && !url.is_empty()); 182 DCHECK(url.is_valid() && !url.is_empty());
182 DCHECK(fetched_modules_.find(id) == fetched_modules_.end()); 183 DCHECK(fetched_modules_.find(id) == fetched_modules_.end());
183 fetched_modules_.insert(id); 184 fetched_modules_.insert(id);
184 ResourceFetcher* fetcher = ResourceFetcher::Create(url); 185 ResourceFetcher* fetcher = ResourceFetcher::Create(url);
185 module_fetchers_.push_back(fetcher); 186 module_fetchers_.push_back(base::WrapUnique(fetcher));
186 fetcher->Start(frame_, 187 fetcher->Start(frame_,
187 blink::WebURLRequest::RequestContextScript, 188 blink::WebURLRequest::RequestContextScript,
188 blink::WebURLRequest::FrameTypeNone, 189 blink::WebURLRequest::FrameTypeNone,
189 base::Bind(&MojoContextState::OnFetchModuleComplete, 190 base::Bind(&MojoContextState::OnFetchModuleComplete,
190 base::Unretained(this), fetcher, id)); 191 base::Unretained(this), fetcher, id));
191 } 192 }
192 193
193 void MojoContextState::OnFetchModuleComplete( 194 void MojoContextState::OnFetchModuleComplete(
194 ResourceFetcher* fetcher, 195 ResourceFetcher* fetcher,
195 const std::string& id, 196 const std::string& id,
196 const blink::WebURLResponse& response, 197 const blink::WebURLResponse& response,
197 const std::string& data) { 198 const std::string& data) {
198 if (response.isNull()) { 199 if (response.isNull()) {
199 LOG(ERROR) << "Failed to fetch source for module \"" << id << "\""; 200 LOG(ERROR) << "Failed to fetch source for module \"" << id << "\"";
200 return; 201 return;
201 } 202 }
202 DCHECK_EQ(module_prefix_ + id, response.url().string().utf8()); 203 DCHECK_EQ(module_prefix_ + id, response.url().string().utf8());
203 // We can't delete fetch right now as the arguments to this function come from 204 // We can't delete fetch right now as the arguments to this function come from
204 // it and are used below. Instead use a scope_ptr to cleanup. 205 // it and are used below. Instead use a scope_ptr to cleanup.
205 std::unique_ptr<ResourceFetcher> deleter(fetcher); 206 auto iter =
206 module_fetchers_.weak_erase( 207 std::find_if(module_fetchers_.begin(), module_fetchers_.end(),
207 std::find(module_fetchers_.begin(), module_fetchers_.end(), fetcher)); 208 [fetcher](const std::unique_ptr<ResourceFetcher>& item) {
209 return item.get() == fetcher;
210 });
211 std::unique_ptr<ResourceFetcher> deleter = std::move(*iter);
212 module_fetchers_.erase(iter);
213
208 if (data.empty()) { 214 if (data.empty()) {
209 LOG(ERROR) << "Fetched empty source for module \"" << id << "\""; 215 LOG(ERROR) << "Fetched empty source for module \"" << id << "\"";
210 return; 216 return;
211 } 217 }
212 218
213 runner_->Run(data, id); 219 runner_->Run(data, id);
214 } 220 }
215 221
216 void MojoContextState::OnDidAddPendingModule( 222 void MojoContextState::OnDidAddPendingModule(
217 const std::string& id, 223 const std::string& id,
218 const std::vector<std::string>& dependencies) { 224 const std::vector<std::string>& dependencies) {
219 FetchModules(dependencies); 225 FetchModules(dependencies);
220 226
221 gin::ContextHolder* context_holder = runner_->GetContextHolder(); 227 gin::ContextHolder* context_holder = runner_->GetContextHolder();
222 gin::ModuleRegistry* registry = gin::ModuleRegistry::From( 228 gin::ModuleRegistry* registry = gin::ModuleRegistry::From(
223 context_holder->context()); 229 context_holder->context());
224 registry->AttemptToLoadMoreModules(context_holder->isolate()); 230 registry->AttemptToLoadMoreModules(context_holder->isolate());
225 } 231 }
226 232
227 } // namespace content 233 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698