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

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

Issue 589153002: Remove void* in WebRequestEventRouterDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase. Created 6 years, 3 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 "chrome/browser/extensions/api/web_request/web_request_api.h" 5 #include "chrome/browser/extensions/api/web_request/web_request_api.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
11 #include "base/json/json_writer.h" 11 #include "base/json/json_writer.h"
12 #include "base/lazy_instance.h" 12 #include "base/lazy_instance.h"
13 #include "base/metrics/histogram.h" 13 #include "base/metrics/histogram.h"
14 #include "base/strings/string_number_conversions.h" 14 #include "base/strings/string_number_conversions.h"
15 #include "base/strings/string_util.h" 15 #include "base/strings/string_util.h"
16 #include "base/strings/utf_string_conversions.h" 16 #include "base/strings/utf_string_conversions.h"
17 #include "base/time/time.h" 17 #include "base/time/time.h"
18 #include "base/values.h" 18 #include "base/values.h"
19 #include "chrome/browser/extensions/api/web_request/upload_data_presenter.h" 19 #include "chrome/browser/extensions/api/web_request/upload_data_presenter.h"
20 #include "chrome/browser/extensions/api/web_request/web_request_time_tracker.h" 20 #include "chrome/browser/extensions/api/web_request/web_request_time_tracker.h"
21 #include "chrome/common/extensions/api/web_request.h" 21 #include "chrome/common/extensions/api/web_request.h"
22 #include "content/public/browser/browser_message_filter.h" 22 #include "content/public/browser/browser_message_filter.h"
23 #include "content/public/browser/browser_thread.h" 23 #include "content/public/browser/browser_thread.h"
24 #include "content/public/browser/render_frame_host.h" 24 #include "content/public/browser/render_frame_host.h"
25 #include "content/public/browser/render_process_host.h" 25 #include "content/public/browser/render_process_host.h"
26 #include "content/public/browser/resource_request_info.h" 26 #include "content/public/browser/resource_request_info.h"
27 #include "content/public/browser/user_metrics.h" 27 #include "content/public/browser/user_metrics.h"
28 #include "extensions/browser/api/activity_log/web_request_constants.h"
28 #include "extensions/browser/api/declarative_webrequest/request_stage.h" 29 #include "extensions/browser/api/declarative_webrequest/request_stage.h"
29 #include "extensions/browser/api/declarative_webrequest/webrequest_constants.h" 30 #include "extensions/browser/api/declarative_webrequest/webrequest_constants.h"
30 #include "extensions/browser/api/declarative_webrequest/webrequest_rules_registr y.h" 31 #include "extensions/browser/api/declarative_webrequest/webrequest_rules_registr y.h"
31 #include "extensions/browser/api/extensions_api_client.h" 32 #include "extensions/browser/api/extensions_api_client.h"
32 #include "extensions/browser/api/web_request/web_request_api_constants.h" 33 #include "extensions/browser/api/web_request/web_request_api_constants.h"
33 #include "extensions/browser/api/web_request/web_request_api_helpers.h" 34 #include "extensions/browser/api/web_request/web_request_api_helpers.h"
34 #include "extensions/browser/api/web_request/web_request_api_utils.h" 35 #include "extensions/browser/api/web_request/web_request_api_utils.h"
35 #include "extensions/browser/api/web_request/web_request_api_utils.h" 36 #include "extensions/browser/api/web_request/web_request_api_utils.h"
36 #include "extensions/browser/api/web_request/web_request_event_router_delegate.h " 37 #include "extensions/browser/api/web_request/web_request_event_router_delegate.h "
37 #include "extensions/browser/event_router.h" 38 #include "extensions/browser/event_router.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 using content::ResourceType; 72 using content::ResourceType;
72 using extensions::ErrorUtils; 73 using extensions::ErrorUtils;
73 using extensions::Extension; 74 using extensions::Extension;
74 using extensions::InfoMap; 75 using extensions::InfoMap;
75 using extensions::Feature; 76 using extensions::Feature;
76 using extensions::RulesRegistryService; 77 using extensions::RulesRegistryService;
77 using extensions::Warning; 78 using extensions::Warning;
78 using extensions::WarningService; 79 using extensions::WarningService;
79 using extensions::WarningSet; 80 using extensions::WarningSet;
80 81
82 namespace activitylog = activity_log_web_request_constants;
81 namespace helpers = extension_web_request_api_helpers; 83 namespace helpers = extension_web_request_api_helpers;
82 namespace utils = extension_web_request_api_utils; 84 namespace utils = extension_web_request_api_utils;
83 namespace keys = extension_web_request_api_constants; 85 namespace keys = extension_web_request_api_constants;
84 namespace web_request = extensions::api::web_request; 86 namespace web_request = extensions::api::web_request;
85 namespace declarative_keys = extensions::declarative_webrequest_constants; 87 namespace declarative_keys = extensions::declarative_webrequest_constants;
86 88
87 namespace { 89 namespace {
88 90
89 const char kWebRequestEventPrefix[] = "webRequest."; 91 const char kWebRequestEventPrefix[] = "webRequest.";
90 92
(...skipping 1518 matching lines...) Expand 10 before | Expand all | Expand 10 after
1609 return helpers::CalculateOnAuthRequiredDelta( 1611 return helpers::CalculateOnAuthRequiredDelta(
1610 response->extension_id, response->extension_install_time, 1612 response->extension_id, response->extension_install_time,
1611 response->cancel, &response->auth_credentials); 1613 response->cancel, &response->auth_credentials);
1612 default: 1614 default:
1613 NOTREACHED(); 1615 NOTREACHED();
1614 break; 1616 break;
1615 } 1617 }
1616 return NULL; 1618 return NULL;
1617 } 1619 }
1618 1620
1621 base::Value* SerializeResponseHeaders(const helpers::ResponseHeaders& headers) {
1622 scoped_ptr<base::ListValue> serialized_headers(new base::ListValue());
1623 for (helpers::ResponseHeaders::const_iterator i = headers.begin();
1624 i != headers.end(); ++i) {
1625 serialized_headers->Append(
1626 helpers::CreateHeaderDictionary(i->first, i->second));
1627 }
1628 return serialized_headers.release();
1629 }
1630
1631 // Convert a RequestCookieModifications/ResponseCookieModifications object to a
1632 // base::ListValue which summarizes the changes made. This is templated since
1633 // the two types (request/response) are different but contain essentially the
1634 // same fields.
1635 template<typename CookieType>
1636 base::ListValue* SummarizeCookieModifications(
1637 const std::vector<linked_ptr<CookieType> >& modifications) {
1638 scoped_ptr<base::ListValue> cookie_modifications(new base::ListValue());
1639 for (typename std::vector<linked_ptr<CookieType> >::const_iterator i =
1640 modifications.begin();
1641 i != modifications.end(); ++i) {
1642 scoped_ptr<base::DictionaryValue> summary(new base::DictionaryValue());
1643 const CookieType& mod = *i->get();
1644 switch (mod.type) {
1645 case helpers::ADD:
1646 summary->SetString(activitylog::kCookieModificationTypeKey,
1647 activitylog::kCookieModificationAdd);
1648 break;
1649 case helpers::EDIT:
1650 summary->SetString(activitylog::kCookieModificationTypeKey,
1651 activitylog::kCookieModificationEdit);
1652 break;
1653 case helpers::REMOVE:
1654 summary->SetString(activitylog::kCookieModificationTypeKey,
1655 activitylog::kCookieModificationRemove);
1656 break;
1657 }
1658 if (mod.filter) {
1659 if (mod.filter->name)
1660 summary->SetString(activitylog::kCookieFilterNameKey,
1661 *mod.modification->name);
1662 if (mod.filter->domain)
1663 summary->SetString(activitylog::kCookieFilterDomainKey,
1664 *mod.modification->name);
1665 }
1666 if (mod.modification) {
1667 if (mod.modification->name)
1668 summary->SetString(activitylog::kCookieModDomainKey,
1669 *mod.modification->name);
1670 if (mod.modification->domain)
1671 summary->SetString(activitylog::kCookieModDomainKey,
1672 *mod.modification->name);
1673 }
1674 cookie_modifications->Append(summary.release());
1675 }
1676 return cookie_modifications.release();
1677 }
1678
1679 // Converts an EventResponseDelta object to a dictionary value suitable for the
1680 // activity log.
1681 scoped_ptr<base::DictionaryValue> SummarizeResponseDelta(
1682 const std::string& event_name,
1683 const helpers::EventResponseDelta& delta) {
1684 scoped_ptr<base::DictionaryValue> details(new base::DictionaryValue());
1685 if (delta.cancel) {
1686 details->SetBoolean(activitylog::kCancelKey, true);
1687 }
1688 if (!delta.new_url.is_empty()) {
1689 details->SetString(activitylog::kNewUrlKey, delta.new_url.spec());
1690 }
1691
1692 scoped_ptr<base::ListValue> modified_headers(new base::ListValue());
1693 net::HttpRequestHeaders::Iterator iter(delta.modified_request_headers);
1694 while (iter.GetNext()) {
1695 modified_headers->Append(
1696 helpers::CreateHeaderDictionary(iter.name(), iter.value()));
1697 }
1698 if (!modified_headers->empty()) {
1699 details->Set(activitylog::kModifiedRequestHeadersKey,
1700 modified_headers.release());
1701 }
1702
1703 scoped_ptr<base::ListValue> deleted_headers(new base::ListValue());
1704 deleted_headers->AppendStrings(delta.deleted_request_headers);
1705 if (!deleted_headers->empty()) {
1706 details->Set(activitylog::kDeletedRequestHeadersKey,
1707 deleted_headers.release());
1708 }
1709
1710 if (!delta.added_response_headers.empty()) {
1711 details->Set(activitylog::kAddedRequestHeadersKey,
1712 SerializeResponseHeaders(delta.added_response_headers));
1713 }
1714 if (!delta.deleted_response_headers.empty()) {
1715 details->Set(activitylog::kDeletedResponseHeadersKey,
1716 SerializeResponseHeaders(delta.deleted_response_headers));
1717 }
1718 if (delta.auth_credentials) {
1719 details->SetString(activitylog::kAuthCredentialsKey,
1720 base::UTF16ToUTF8(
1721 delta.auth_credentials->username()) + ":*");
1722 }
1723
1724 if (!delta.response_cookie_modifications.empty()) {
1725 details->Set(
1726 activitylog::kResponseCookieModificationsKey,
1727 SummarizeCookieModifications(delta.response_cookie_modifications));
1728 }
1729
1730 return details.Pass();
1731 }
1732
1619 } // namespace 1733 } // namespace
1620 1734
1735 void ExtensionWebRequestEventRouter::LogExtensionActivity(
1736 void* browser_context_id,
1737 bool is_incognito,
1738 const std::string& extension_id,
1739 const GURL& url,
1740 const std::string& api_call,
1741 scoped_ptr<base::DictionaryValue> details) {
1742 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
1743 BrowserThread::PostTask(
1744 BrowserThread::UI,
1745 FROM_HERE,
1746 base::Bind(&ExtensionWebRequestEventRouter::LogExtensionActivity,
1747 base::Unretained(this),
1748 browser_context_id,
1749 is_incognito,
1750 extension_id,
1751 url,
1752 api_call,
1753 base::Passed(&details)));
1754 } else {
1755 if (web_request_event_router_delegate_) {
1756 web_request_event_router_delegate_->LogExtensionActivity(
1757 reinterpret_cast<content::BrowserContext*>(browser_context_id),
1758 is_incognito, extension_id, url, api_call, details.Pass());
1759 }
1760 }
1761 }
1762
1621 void ExtensionWebRequestEventRouter::DecrementBlockCount( 1763 void ExtensionWebRequestEventRouter::DecrementBlockCount(
1622 void* browser_context, 1764 void* browser_context,
1623 const std::string& extension_id, 1765 const std::string& extension_id,
1624 const std::string& event_name, 1766 const std::string& event_name,
1625 uint64 request_id, 1767 uint64 request_id,
1626 EventResponse* response) { 1768 EventResponse* response) {
1627 scoped_ptr<EventResponse> response_scoped(response); 1769 scoped_ptr<EventResponse> response_scoped(response);
1628 1770
1629 // It's possible that this request was deleted, or cancelled by a previous 1771 // It's possible that this request was deleted, or cancelled by a previous
1630 // event handler. If so, ignore this response. 1772 // event handler. If so, ignore this response.
1631 if (blocked_requests_.find(request_id) == blocked_requests_.end()) 1773 if (blocked_requests_.find(request_id) == blocked_requests_.end())
1632 return; 1774 return;
1633 1775
1634 BlockedRequest& blocked_request = blocked_requests_[request_id]; 1776 BlockedRequest& blocked_request = blocked_requests_[request_id];
1635 int num_handlers_blocking = --blocked_request.num_handlers_blocking; 1777 int num_handlers_blocking = --blocked_request.num_handlers_blocking;
1636 CHECK_GE(num_handlers_blocking, 0); 1778 CHECK_GE(num_handlers_blocking, 0);
1637 1779
1638 if (response) { 1780 if (response) {
1639 helpers::EventResponseDelta* delta = 1781 helpers::EventResponseDelta* delta =
1640 CalculateDelta(&blocked_request, response); 1782 CalculateDelta(&blocked_request, response);
1641 1783
1642 if (web_request_event_router_delegate_) { 1784 LogExtensionActivity(browser_context,
1643 web_request_event_router_delegate_->LogExtensionActivity( 1785 blocked_request.is_incognito,
1644 browser_context, 1786 extension_id,
1645 blocked_request.is_incognito, 1787 blocked_request.request->url(),
1646 extension_id, 1788 event_name,
1647 blocked_request.request->url(), 1789 SummarizeResponseDelta(event_name, *delta));
1648 event_name,
1649 *delta);
1650 }
1651 1790
1652 blocked_request.response_deltas.push_back( 1791 blocked_request.response_deltas.push_back(
1653 linked_ptr<helpers::EventResponseDelta>(delta)); 1792 linked_ptr<helpers::EventResponseDelta>(delta));
1654 } 1793 }
1655 1794
1656 base::TimeDelta block_time = 1795 base::TimeDelta block_time =
1657 base::Time::Now() - blocked_request.blocking_time; 1796 base::Time::Now() - blocked_request.blocking_time;
1658 if (!extension_id.empty()) { 1797 if (!extension_id.empty()) {
1659 request_time_tracker_->IncrementExtensionBlockTime( 1798 request_time_tracker_->IncrementExtensionBlockTime(
1660 extension_id, request_id, block_time); 1799 extension_id, request_id, block_time);
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
2315 base::Bind(&WarningService::NotifyWarningsOnUI, profile_id(), warnings)); 2454 base::Bind(&WarningService::NotifyWarningsOnUI, profile_id(), warnings));
2316 2455
2317 // Continue gracefully. 2456 // Continue gracefully.
2318 RunSync(); 2457 RunSync();
2319 } 2458 }
2320 2459
2321 bool WebRequestHandlerBehaviorChangedFunction::RunSync() { 2460 bool WebRequestHandlerBehaviorChangedFunction::RunSync() {
2322 helpers::ClearCacheOnNavigation(); 2461 helpers::ClearCacheOnNavigation();
2323 return true; 2462 return true;
2324 } 2463 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/web_request/web_request_api.h ('k') | chrome/chrome_browser_extensions.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698