Home | History | Annotate | Download | only in web_request
      1 // Copyright (c) 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/extensions/api/web_request/chrome_extension_web_request_event_router_delegate.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/bind_helpers.h"
      9 #include "base/strings/string_number_conversions.h"
     10 #include "base/strings/string_util.h"
     11 #include "base/strings/utf_string_conversions.h"
     12 #include "chrome/browser/extensions/activity_log/activity_action_constants.h"
     13 #include "chrome/browser/extensions/activity_log/activity_log.h"
     14 #include "chrome/browser/extensions/extension_renderer_state.h"
     15 #include "content/public/browser/resource_request_info.h"
     16 #include "extensions/browser/api/activity_log/web_request_constants.h"
     17 #include "extensions/browser/api/web_request/web_request_api.h"
     18 #include "extensions/browser/api/web_request/web_request_api_constants.h"
     19 #include "extensions/browser/api/web_request/web_request_api_helpers.h"
     20 #include "net/url_request/url_request.h"
     21 
     22 namespace activitylog = activity_log_web_request_constants;
     23 namespace helpers = extension_web_request_api_helpers;
     24 namespace keys = extension_web_request_api_constants;
     25 
     26 namespace {
     27 
     28 void ExtractExtraRequestDetailsInternal(
     29     net::URLRequest* request, int* tab_id, int* window_id) {
     30   if (!request->GetUserData(NULL))
     31     return;
     32 
     33   const content::ResourceRequestInfo* info =
     34       content::ResourceRequestInfo::ForRequest(request);
     35   ExtensionRendererState::GetInstance()->GetTabAndWindowId(
     36       info, tab_id, window_id);
     37 }
     38 
     39 }  // namespace
     40 
     41 ChromeExtensionWebRequestEventRouterDelegate::
     42     ChromeExtensionWebRequestEventRouterDelegate(){
     43 }
     44 
     45 ChromeExtensionWebRequestEventRouterDelegate::
     46     ~ChromeExtensionWebRequestEventRouterDelegate() {
     47 }
     48 
     49 void ChromeExtensionWebRequestEventRouterDelegate::LogExtensionActivity(
     50     content::BrowserContext* browser_context,
     51     bool is_incognito,
     52     const std::string& extension_id,
     53     const GURL& url,
     54     const std::string& api_call,
     55     scoped_ptr<base::DictionaryValue> details) {
     56   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
     57   if (!extensions::ExtensionsBrowserClient::Get()->IsValidContext(
     58       browser_context))
     59     return;
     60 
     61   scoped_refptr<extensions::Action> action =
     62       new extensions::Action(extension_id,
     63                               base::Time::Now(),
     64                               extensions::Action::ACTION_WEB_REQUEST,
     65                               api_call);
     66   action->set_page_url(url);
     67   action->set_page_incognito(is_incognito);
     68   action->mutable_other()->Set(activity_log_constants::kActionWebRequest,
     69                                details.release());
     70   extensions::ActivityLog::GetInstance(browser_context)->LogAction(action);
     71 }
     72 
     73 void ChromeExtensionWebRequestEventRouterDelegate::ExtractExtraRequestDetails(
     74    net::URLRequest* request, base::DictionaryValue* out) {
     75   int tab_id = -1;
     76   int window_id = -1;
     77   ExtractExtraRequestDetailsInternal(request, &tab_id, &window_id);
     78   out->SetInteger(keys::kTabIdKey, tab_id);
     79 }
     80 
     81 bool
     82 ChromeExtensionWebRequestEventRouterDelegate::OnGetMatchingListenersImplCheck(
     83     int filter_tab_id, int filter_window_id, net::URLRequest* request) {
     84   int tab_id = -1;
     85   int window_id = -1;
     86   ExtractExtraRequestDetailsInternal(request, &tab_id, &window_id);
     87   if (filter_tab_id != -1 && tab_id != filter_tab_id)
     88     return true;
     89   if (filter_window_id != -1 && window_id != filter_window_id)
     90     return true;
     91   return false;
     92 }
     93