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

Side by Side Diff: extensions/browser/api/web_request/web_request_api.cc

Issue 2077723002: [Extensions] Short-circuit activity logging if not enabled (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add Test Created 4 years, 6 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "extensions/browser/api/web_request/web_request_api.h" 5 #include "extensions/browser/api/web_request/web_request_api.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 19 matching lines...) Expand all
30 #include "extensions/browser/api/declarative/rules_registry_service.h" 30 #include "extensions/browser/api/declarative/rules_registry_service.h"
31 #include "extensions/browser/api/declarative_webrequest/request_stage.h" 31 #include "extensions/browser/api/declarative_webrequest/request_stage.h"
32 #include "extensions/browser/api/declarative_webrequest/webrequest_constants.h" 32 #include "extensions/browser/api/declarative_webrequest/webrequest_constants.h"
33 #include "extensions/browser/api/declarative_webrequest/webrequest_rules_registr y.h" 33 #include "extensions/browser/api/declarative_webrequest/webrequest_rules_registr y.h"
34 #include "extensions/browser/api/extensions_api_client.h" 34 #include "extensions/browser/api/extensions_api_client.h"
35 #include "extensions/browser/api/web_request/web_request_api_constants.h" 35 #include "extensions/browser/api/web_request/web_request_api_constants.h"
36 #include "extensions/browser/api/web_request/web_request_api_helpers.h" 36 #include "extensions/browser/api/web_request/web_request_api_helpers.h"
37 #include "extensions/browser/api/web_request/web_request_event_details.h" 37 #include "extensions/browser/api/web_request/web_request_event_details.h"
38 #include "extensions/browser/api/web_request/web_request_event_router_delegate.h " 38 #include "extensions/browser/api/web_request/web_request_event_router_delegate.h "
39 #include "extensions/browser/api/web_request/web_request_time_tracker.h" 39 #include "extensions/browser/api/web_request/web_request_time_tracker.h"
40 #include "extensions/browser/api_activity_monitor.h"
40 #include "extensions/browser/event_router.h" 41 #include "extensions/browser/event_router.h"
41 #include "extensions/browser/extension_prefs.h" 42 #include "extensions/browser/extension_prefs.h"
42 #include "extensions/browser/extension_registry.h" 43 #include "extensions/browser/extension_registry.h"
43 #include "extensions/browser/extension_system.h" 44 #include "extensions/browser/extension_system.h"
44 #include "extensions/browser/extensions_browser_client.h" 45 #include "extensions/browser/extensions_browser_client.h"
45 #include "extensions/browser/guest_view/guest_view_events.h" 46 #include "extensions/browser/guest_view/guest_view_events.h"
46 #include "extensions/browser/guest_view/web_view/web_view_constants.h" 47 #include "extensions/browser/guest_view/web_view/web_view_constants.h"
47 #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" 48 #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h"
48 #include "extensions/browser/info_map.h" 49 #include "extensions/browser/info_map.h"
49 #include "extensions/browser/io_thread_extension_message_filter.h" 50 #include "extensions/browser/io_thread_extension_message_filter.h"
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 // 569 //
569 // ExtensionWebRequestEventRouter 570 // ExtensionWebRequestEventRouter
570 // 571 //
571 572
572 // static 573 // static
573 ExtensionWebRequestEventRouter* ExtensionWebRequestEventRouter::GetInstance() { 574 ExtensionWebRequestEventRouter* ExtensionWebRequestEventRouter::GetInstance() {
574 return base::Singleton<ExtensionWebRequestEventRouter>::get(); 575 return base::Singleton<ExtensionWebRequestEventRouter>::get();
575 } 576 }
576 577
577 ExtensionWebRequestEventRouter::ExtensionWebRequestEventRouter() 578 ExtensionWebRequestEventRouter::ExtensionWebRequestEventRouter()
578 : request_time_tracker_(new ExtensionWebRequestTimeTracker) { 579 : request_time_tracker_(new ExtensionWebRequestTimeTracker),
579 web_request_event_router_delegate_.reset( 580 web_request_event_router_delegate_(
580 ExtensionsAPIClient::Get()->CreateWebRequestEventRouterDelegate()); 581 ExtensionsAPIClient::Get()->CreateWebRequestEventRouterDelegate()) {}
581 }
582 582
583 ExtensionWebRequestEventRouter::~ExtensionWebRequestEventRouter() { 583 ExtensionWebRequestEventRouter::~ExtensionWebRequestEventRouter() {
584 } 584 }
585 585
586 void ExtensionWebRequestEventRouter::RegisterRulesRegistry( 586 void ExtensionWebRequestEventRouter::RegisterRulesRegistry(
587 void* browser_context, 587 void* browser_context,
588 int rules_registry_id, 588 int rules_registry_id,
589 scoped_refptr<WebRequestRulesRegistry> rules_registry) { 589 scoped_refptr<WebRequestRulesRegistry> rules_registry) {
590 RulesRegistryKey key(browser_context, rules_registry_id); 590 RulesRegistryKey key(browser_context, rules_registry_id);
591 if (rules_registry.get()) 591 if (rules_registry.get())
(...skipping 772 matching lines...) Expand 10 before | Expand all | Expand 10 after
1364 continue; 1364 continue;
1365 } 1365 }
1366 1366
1367 if (!is_web_view_guest) { 1367 if (!is_web_view_guest) {
1368 PermissionsData::AccessType access = 1368 PermissionsData::AccessType access =
1369 WebRequestPermissions::CanExtensionAccessURL( 1369 WebRequestPermissions::CanExtensionAccessURL(
1370 extension_info_map, listener.extension_id, url, frame_data.tab_id, 1370 extension_info_map, listener.extension_id, url, frame_data.tab_id,
1371 crosses_incognito, 1371 crosses_incognito,
1372 WebRequestPermissions::REQUIRE_HOST_PERMISSION); 1372 WebRequestPermissions::REQUIRE_HOST_PERMISSION);
1373 if (access != PermissionsData::ACCESS_ALLOWED) { 1373 if (access != PermissionsData::ACCESS_ALLOWED) {
1374 if (access == PermissionsData::ACCESS_WITHHELD) { 1374 if (access == PermissionsData::ACCESS_WITHHELD &&
1375 web_request_event_router_delegate_) {
1375 web_request_event_router_delegate_->NotifyWebRequestWithheld( 1376 web_request_event_router_delegate_->NotifyWebRequestWithheld(
1376 render_process_id, render_frame_id, listener.extension_id); 1377 render_process_id, render_frame_id, listener.extension_id);
1377 } 1378 }
1378 continue; 1379 continue;
1379 } 1380 }
1380 } 1381 }
1381 1382
1382 bool blocking_listener = 1383 bool blocking_listener =
1383 (listener.extra_info_spec & 1384 (listener.extra_info_spec &
1384 (ExtraInfoSpec::BLOCKING | ExtraInfoSpec::ASYNC_BLOCKING)) != 0; 1385 (ExtraInfoSpec::BLOCKING | ExtraInfoSpec::ASYNC_BLOCKING)) != 0;
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
1596 details->Set( 1597 details->Set(
1597 activity_log::kResponseCookieModificationsKey, 1598 activity_log::kResponseCookieModificationsKey,
1598 SummarizeCookieModifications(delta.response_cookie_modifications)); 1599 SummarizeCookieModifications(delta.response_cookie_modifications));
1599 } 1600 }
1600 1601
1601 return details; 1602 return details;
1602 } 1603 }
1603 1604
1604 } // namespace 1605 } // namespace
1605 1606
1606 void ExtensionWebRequestEventRouter::LogExtensionActivity(
1607 void* browser_context_id,
1608 bool is_incognito,
1609 const std::string& extension_id,
1610 const GURL& url,
1611 const std::string& api_call,
1612 std::unique_ptr<base::DictionaryValue> details) {
1613 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
1614 BrowserThread::PostTask(
1615 BrowserThread::UI,
1616 FROM_HERE,
1617 base::Bind(&ExtensionWebRequestEventRouter::LogExtensionActivity,
1618 base::Unretained(this),
1619 browser_context_id,
1620 is_incognito,
1621 extension_id,
1622 url,
1623 api_call,
1624 base::Passed(&details)));
1625 } else {
1626 if (web_request_event_router_delegate_) {
1627 web_request_event_router_delegate_->LogExtensionActivity(
1628 reinterpret_cast<content::BrowserContext*>(browser_context_id),
1629 is_incognito, extension_id, url, api_call, std::move(details));
1630 }
1631 }
1632 }
1633
1634 void ExtensionWebRequestEventRouter::DecrementBlockCount( 1607 void ExtensionWebRequestEventRouter::DecrementBlockCount(
1635 void* browser_context, 1608 void* browser_context,
1636 const std::string& extension_id, 1609 const std::string& extension_id,
1637 const std::string& event_name, 1610 const std::string& event_name,
1638 uint64_t request_id, 1611 uint64_t request_id,
1639 EventResponse* response) { 1612 EventResponse* response) {
1640 std::unique_ptr<EventResponse> response_scoped(response); 1613 std::unique_ptr<EventResponse> response_scoped(response);
1641 1614
1642 // It's possible that this request was deleted, or cancelled by a previous 1615 // It's possible that this request was deleted, or cancelled by a previous
1643 // event handler. If so, ignore this response. 1616 // event handler. If so, ignore this response.
1644 auto it = blocked_requests_.find(request_id); 1617 auto it = blocked_requests_.find(request_id);
1645 if (it == blocked_requests_.end()) 1618 if (it == blocked_requests_.end())
1646 return; 1619 return;
1647 1620
1648 BlockedRequest& blocked_request = it->second; 1621 BlockedRequest& blocked_request = it->second;
1649 int num_handlers_blocking = --blocked_request.num_handlers_blocking; 1622 int num_handlers_blocking = --blocked_request.num_handlers_blocking;
1650 CHECK_GE(num_handlers_blocking, 0); 1623 CHECK_GE(num_handlers_blocking, 0);
1651 1624
1652 if (response) { 1625 if (response) {
1653 helpers::EventResponseDelta* delta = 1626 helpers::EventResponseDelta* delta =
1654 CalculateDelta(&blocked_request, response); 1627 CalculateDelta(&blocked_request, response);
1655 1628
1656 LogExtensionActivity(browser_context, 1629 activity_monitor::OnWebRequestApiUsed(
1657 blocked_request.is_incognito, 1630 static_cast<content::BrowserContext*>(browser_context), extension_id,
1658 extension_id, 1631 blocked_request.request->url(), blocked_request.is_incognito,
1659 blocked_request.request->url(), 1632 event_name, SummarizeResponseDelta(event_name, *delta));
1660 event_name,
1661 SummarizeResponseDelta(event_name, *delta));
1662 1633
1663 blocked_request.response_deltas.push_back( 1634 blocked_request.response_deltas.push_back(
1664 linked_ptr<helpers::EventResponseDelta>(delta)); 1635 linked_ptr<helpers::EventResponseDelta>(delta));
1665 } 1636 }
1666 1637
1667 base::TimeDelta block_time = 1638 base::TimeDelta block_time =
1668 base::Time::Now() - blocked_request.blocking_time; 1639 base::Time::Now() - blocked_request.blocking_time;
1669 if (!extension_id.empty()) { 1640 if (!extension_id.empty()) {
1670 request_time_tracker_->IncrementExtensionBlockTime( 1641 request_time_tracker_->IncrementExtensionBlockTime(
1671 extension_id, request_id, block_time); 1642 extension_id, request_id, block_time);
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after
2294 // Continue gracefully. 2265 // Continue gracefully.
2295 RunSync(); 2266 RunSync();
2296 } 2267 }
2297 2268
2298 bool WebRequestHandlerBehaviorChangedFunction::RunSync() { 2269 bool WebRequestHandlerBehaviorChangedFunction::RunSync() {
2299 helpers::ClearCacheOnNavigation(); 2270 helpers::ClearCacheOnNavigation();
2300 return true; 2271 return true;
2301 } 2272 }
2302 2273
2303 } // namespace extensions 2274 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698