OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |