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

Side by Side Diff: content/browser/loader/content_size_resource_handler_manager.cc

Issue 2180933002: Add experimental code behind a flag for Content Size Policy (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: while -> for Created 4 years, 4 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
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/loader/content_size_resource_handler_manager.h"
6
7 #include "base/bind.h"
8 #include "base/stl_util.h"
9 #include "content/browser/loader/content_size_frame_counter.h"
10 #include "content/browser/loader/content_size_resource_handler.h"
11 #include "content/browser/loader/resource_request_info_impl.h"
12 #include "content/public/browser/browser_thread.h"
13 #include "net/url_request/url_request.h"
14
15 namespace content {
16
17 ContentSizeResourceHandlerManager::ContentSizeResourceHandlerManager()
18 : pending_updates_(new std::map<GlobalFrameRoutingId, uint64_t>) {}
19 ContentSizeResourceHandlerManager::~ContentSizeResourceHandlerManager() {}
20
21 std::unique_ptr<ResourceHandler>
22 ContentSizeResourceHandlerManager::MaybeAddHandler(
23 std::unique_ptr<ResourceHandler> next_handler,
24 net::URLRequest* request) {
25 ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest(request);
26 DCHECK(info);
27 if (info->IsMainFrame())
28 return next_handler;
29
30 if (ContainsKey(frame_limits_, info->GetGlobalFrameRoutingId())) {
31 next_handler.reset(
32 new ContentSizeResourceHandler(std::move(next_handler), request, this));
33 }
34 return next_handler;
35 }
36
37 bool ContentSizeResourceHandlerManager::ShouldCancelRequest(
38 ResourceRequestInfoImpl* request_info,
39 uint64_t bytes_read) {
40 const GlobalFrameRoutingId& id = request_info->GetGlobalFrameRoutingId();
41 (*pending_updates_)[id] += bytes_read;
42
43 auto it = frame_limits_.find(id);
44 if (it == frame_limits_.end()) {
45 return false;
46 } else if (it->second > bytes_read) {
47 it->second -= bytes_read;
48 return false;
49 } else {
50 it->second = 0;
51 return true;
52 }
53 }
54
55 void ContentSizeResourceHandlerManager::NotifyUIThreadReadUpdates() {
56 BrowserThread::PostTask(
57 BrowserThread::UI, FROM_HERE,
58 base::Bind(&ContentSizeFrameCounter::UpdateGlobalDataAccounting,
59 base::Passed(std::move(pending_updates_))));
60 pending_updates_.reset(new std::map<GlobalFrameRoutingId, uint64_t>);
61 }
62
63 void ContentSizeResourceHandlerManager::FrameHasSizeLimit(
64 const GlobalFrameRoutingId& id,
65 uint64_t limit) {
66 frame_limits_[id] = limit;
67 }
68
69 void ContentSizeResourceHandlerManager::FramesWentOverSizeLimits(
70 std::unique_ptr<std::set<GlobalFrameRoutingId>> ids) {
71 for (const auto& it : *ids) {
72 FrameHasSizeLimit(it, 0);
73 }
74 }
75
76 void ContentSizeResourceHandlerManager::FrameDeleted(
77 const GlobalFrameRoutingId& id) {
78 frame_limits_.erase(id);
79 }
80
81 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/loader/content_size_resource_handler_manager.h ('k') | content/browser/loader/resource_dispatcher_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698