| 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 "chrome/browser/renderer_host/chrome_render_message_filter.h" | 5 #include "chrome/browser/renderer_host/chrome_render_message_filter.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 #include "chrome/browser/browser_about_handler.h" | 50 #include "chrome/browser/browser_about_handler.h" |
| 51 #endif | 51 #endif |
| 52 | 52 |
| 53 using content::BrowserThread; | 53 using content::BrowserThread; |
| 54 using extensions::APIPermission; | 54 using extensions::APIPermission; |
| 55 using WebKit::WebCache; | 55 using WebKit::WebCache; |
| 56 using WebKit::WebSecurityOrigin; | 56 using WebKit::WebSecurityOrigin; |
| 57 | 57 |
| 58 namespace { | 58 namespace { |
| 59 | 59 |
| 60 enum ActivityLogCallType { |
| 61 kApiCall, |
| 62 kEvent |
| 63 }; |
| 64 |
| 60 void AddAPIActionToExtensionActivityLog( | 65 void AddAPIActionToExtensionActivityLog( |
| 61 Profile* profile, | 66 Profile* profile, |
| 67 const ActivityLogCallType call_type, |
| 62 const extensions::Extension* extension, | 68 const extensions::Extension* extension, |
| 63 const std::string& api_call, | 69 const std::string& api_call, |
| 64 scoped_ptr<ListValue> args, | 70 scoped_ptr<ListValue> args, |
| 65 const std::string& extra) { | 71 const std::string& extra) { |
| 66 // The ActivityLog can only be accessed from the main (UI) thread. If we're | 72 // The ActivityLog can only be accessed from the main (UI) thread. If we're |
| 67 // running on the wrong thread, re-dispatch from the main thread. | 73 // running on the wrong thread, re-dispatch from the main thread. |
| 68 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { | 74 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
| 69 BrowserThread::PostTask(BrowserThread::UI, | 75 BrowserThread::PostTask(BrowserThread::UI, |
| 70 FROM_HERE, | 76 FROM_HERE, |
| 71 base::Bind(&AddAPIActionToExtensionActivityLog, | 77 base::Bind(&AddAPIActionToExtensionActivityLog, |
| 72 profile, | 78 profile, |
| 79 call_type, |
| 73 extension, | 80 extension, |
| 74 api_call, | 81 api_call, |
| 75 base::Passed(&args), | 82 base::Passed(&args), |
| 76 extra)); | 83 extra)); |
| 77 } else { | 84 } else { |
| 78 extensions::ActivityLog* activity_log = | 85 extensions::ActivityLog* activity_log = |
| 79 extensions::ActivityLog::GetInstance(profile); | 86 extensions::ActivityLog::GetInstance(profile); |
| 80 if (activity_log && activity_log->IsLogEnabled()) | 87 if (activity_log && activity_log->IsLogEnabled()) { |
| 81 activity_log->LogAPIAction(extension, api_call, args.get(), extra); | 88 if (call_type == kApiCall) |
| 89 activity_log->LogAPIAction(extension, api_call, args.get(), extra); |
| 90 else if (call_type == kEvent) |
| 91 activity_log->LogEventAction(extension, api_call, args.get(), extra); |
| 92 } |
| 82 } | 93 } |
| 83 } | 94 } |
| 84 | 95 |
| 85 void AddDOMActionToExtensionActivityLog( | 96 void AddDOMActionToExtensionActivityLog( |
| 86 Profile* profile, | 97 Profile* profile, |
| 87 const extensions::Extension* extension, | 98 const extensions::Extension* extension, |
| 88 const GURL& url, | 99 const GURL& url, |
| 89 const string16& url_title, | 100 const string16& url_title, |
| 90 const std::string& api_call, | 101 const std::string& api_call, |
| 91 scoped_ptr<ListValue> args, | 102 scoped_ptr<ListValue> args, |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 OnExtensionShouldSuspendAck) | 186 OnExtensionShouldSuspendAck) |
| 176 IPC_MESSAGE_HANDLER(ExtensionHostMsg_GenerateUniqueID, | 187 IPC_MESSAGE_HANDLER(ExtensionHostMsg_GenerateUniqueID, |
| 177 OnExtensionGenerateUniqueID) | 188 OnExtensionGenerateUniqueID) |
| 178 IPC_MESSAGE_HANDLER(ExtensionHostMsg_SuspendAck, OnExtensionSuspendAck) | 189 IPC_MESSAGE_HANDLER(ExtensionHostMsg_SuspendAck, OnExtensionSuspendAck) |
| 179 IPC_MESSAGE_HANDLER(ExtensionHostMsg_ResumeRequests, | 190 IPC_MESSAGE_HANDLER(ExtensionHostMsg_ResumeRequests, |
| 180 OnExtensionResumeRequests); | 191 OnExtensionResumeRequests); |
| 181 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddAPIActionToActivityLog, | 192 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddAPIActionToActivityLog, |
| 182 OnAddAPIActionToExtensionActivityLog); | 193 OnAddAPIActionToExtensionActivityLog); |
| 183 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddDOMActionToActivityLog, | 194 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddDOMActionToActivityLog, |
| 184 OnAddDOMActionToExtensionActivityLog); | 195 OnAddDOMActionToExtensionActivityLog); |
| 196 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddEventToActivityLog, |
| 197 OnAddEventToExtensionActivityLog); |
| 185 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowDatabase, OnAllowDatabase) | 198 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowDatabase, OnAllowDatabase) |
| 186 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowDOMStorage, OnAllowDOMStorage) | 199 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowDOMStorage, OnAllowDOMStorage) |
| 187 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowFileSystem, OnAllowFileSystem) | 200 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowFileSystem, OnAllowFileSystem) |
| 188 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowIndexedDB, OnAllowIndexedDB) | 201 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowIndexedDB, OnAllowIndexedDB) |
| 189 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_CanTriggerClipboardRead, | 202 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_CanTriggerClipboardRead, |
| 190 OnCanTriggerClipboardRead) | 203 OnCanTriggerClipboardRead) |
| 191 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_CanTriggerClipboardWrite, | 204 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_CanTriggerClipboardWrite, |
| 192 OnCanTriggerClipboardWrite) | 205 OnCanTriggerClipboardWrite) |
| 193 IPC_MESSAGE_UNHANDLED(handled = false) | 206 IPC_MESSAGE_UNHANDLED(handled = false) |
| 194 IPC_END_MESSAGE_MAP() | 207 IPC_END_MESSAGE_MAP() |
| (...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 584 *unique_id = next_unique_id++; | 597 *unique_id = next_unique_id++; |
| 585 } | 598 } |
| 586 | 599 |
| 587 void ChromeRenderMessageFilter::OnExtensionResumeRequests(int route_id) { | 600 void ChromeRenderMessageFilter::OnExtensionResumeRequests(int route_id) { |
| 588 content::ResourceDispatcherHost::Get()->ResumeBlockedRequestsForRoute( | 601 content::ResourceDispatcherHost::Get()->ResumeBlockedRequestsForRoute( |
| 589 render_process_id_, route_id); | 602 render_process_id_, route_id); |
| 590 } | 603 } |
| 591 | 604 |
| 592 void ChromeRenderMessageFilter::OnAddAPIActionToExtensionActivityLog( | 605 void ChromeRenderMessageFilter::OnAddAPIActionToExtensionActivityLog( |
| 593 const std::string& extension_id, | 606 const std::string& extension_id, |
| 594 const ExtensionHostMsg_APIAction_Params& params) { | 607 const ExtensionHostMsg_APIActionOrEvent_Params& params) { |
| 595 const extensions::Extension* extension = | 608 const extensions::Extension* extension = |
| 596 extension_info_map_->extensions().GetByID(extension_id); | 609 extension_info_map_->extensions().GetByID(extension_id); |
| 597 scoped_ptr<ListValue> args(params.arguments.DeepCopy()); | 610 scoped_ptr<ListValue> args(params.arguments.DeepCopy()); |
| 598 // The activity is recorded as an API action in the extension | 611 // The activity is recorded as an API action in the extension |
| 599 // activity log. | 612 // activity log. |
| 600 AddAPIActionToExtensionActivityLog(profile_, extension, | 613 AddAPIActionToExtensionActivityLog(profile_, kApiCall, extension, |
| 601 params.api_call, args.Pass(), | 614 params.api_call, args.Pass(), |
| 602 params.extra); | 615 params.extra); |
| 603 } | 616 } |
| 604 | 617 |
| 605 void ChromeRenderMessageFilter::OnAddDOMActionToExtensionActivityLog( | 618 void ChromeRenderMessageFilter::OnAddDOMActionToExtensionActivityLog( |
| 606 const std::string& extension_id, | 619 const std::string& extension_id, |
| 607 const ExtensionHostMsg_DOMAction_Params& params) { | 620 const ExtensionHostMsg_DOMAction_Params& params) { |
| 608 const extensions::Extension* extension = | 621 const extensions::Extension* extension = |
| 609 extension_info_map_->extensions().GetByID(extension_id); | 622 extension_info_map_->extensions().GetByID(extension_id); |
| 610 scoped_ptr<ListValue> args(params.arguments.DeepCopy()); | 623 scoped_ptr<ListValue> args(params.arguments.DeepCopy()); |
| 611 // The activity is recorded as a DOM action on the extension | 624 // The activity is recorded as a DOM action on the extension |
| 612 // activity log. | 625 // activity log. |
| 613 AddDOMActionToExtensionActivityLog(profile_, extension, | 626 AddDOMActionToExtensionActivityLog(profile_, extension, |
| 614 params.url, params.url_title, | 627 params.url, params.url_title, |
| 615 params.api_call, args.Pass(), | 628 params.api_call, args.Pass(), |
| 616 params.extra); | 629 params.extra); |
| 617 } | 630 } |
| 618 | 631 |
| 632 void ChromeRenderMessageFilter::OnAddEventToExtensionActivityLog( |
| 633 const std::string& extension_id, |
| 634 const ExtensionHostMsg_APIActionOrEvent_Params& params) { |
| 635 const extensions::Extension* extension = |
| 636 extension_info_map_->extensions().GetByID(extension_id); |
| 637 scoped_ptr<ListValue> args(params.arguments.DeepCopy()); |
| 638 // The activity is recorded as an event in the extension |
| 639 // activity log. |
| 640 AddAPIActionToExtensionActivityLog(profile_, kEvent, extension, |
| 641 params.api_call, args.Pass(), |
| 642 params.extra); |
| 643 } |
| 644 |
| 619 void ChromeRenderMessageFilter::OnAllowDatabase(int render_view_id, | 645 void ChromeRenderMessageFilter::OnAllowDatabase(int render_view_id, |
| 620 const GURL& origin_url, | 646 const GURL& origin_url, |
| 621 const GURL& top_origin_url, | 647 const GURL& top_origin_url, |
| 622 const string16& name, | 648 const string16& name, |
| 623 const string16& display_name, | 649 const string16& display_name, |
| 624 bool* allowed) { | 650 bool* allowed) { |
| 625 *allowed = cookie_settings_->IsSettingCookieAllowed(origin_url, | 651 *allowed = cookie_settings_->IsSettingCookieAllowed(origin_url, |
| 626 top_origin_url); | 652 top_origin_url); |
| 627 BrowserThread::PostTask( | 653 BrowserThread::PostTask( |
| 628 BrowserThread::UI, FROM_HERE, | 654 BrowserThread::UI, FROM_HERE, |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 703 | 729 |
| 704 void ChromeRenderMessageFilter::OnSetCookie(const IPC::Message& message, | 730 void ChromeRenderMessageFilter::OnSetCookie(const IPC::Message& message, |
| 705 const GURL& url, | 731 const GURL& url, |
| 706 const GURL& first_party_for_cookies, | 732 const GURL& first_party_for_cookies, |
| 707 const std::string& cookie) { | 733 const std::string& cookie) { |
| 708 #if defined(ENABLE_AUTOMATION) | 734 #if defined(ENABLE_AUTOMATION) |
| 709 AutomationResourceMessageFilter::SetCookiesForUrl( | 735 AutomationResourceMessageFilter::SetCookiesForUrl( |
| 710 render_process_id_, message.routing_id(), url, cookie); | 736 render_process_id_, message.routing_id(), url, cookie); |
| 711 #endif | 737 #endif |
| 712 } | 738 } |
| OLD | NEW |