| 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 |