Browse Source

Merge pull request #10429 from qazbnm456/web-request-origin

Track the origin of webRequest events
Cheng Zhao 7 years ago
parent
commit
2048a1a638

+ 3 - 3
atom/browser/api/trackable_object.h

@@ -30,15 +30,15 @@ class TrackableObjectBase {
   // Wrap TrackableObject into a class that SupportsUserData.
   void AttachAsUserData(base::SupportsUserData* wrapped);
 
+  // Get the weak_map_id from SupportsUserData.
+  static int32_t GetIDFromWrappedClass(base::SupportsUserData* wrapped);
+
  protected:
   virtual ~TrackableObjectBase();
 
   // Returns a closure that can destroy the native class.
   base::Closure GetDestroyClosure();
 
-  // Get the weak_map_id from SupportsUserData.
-  static int32_t GetIDFromWrappedClass(base::SupportsUserData* wrapped);
-
   // Register a callback that should be destroyed before JavaScript environment
   // gets destroyed.
   static base::Closure RegisterDestructionCallback(const base::Closure& c);

+ 15 - 4
atom/browser/net/atom_network_delegate.cc

@@ -6,11 +6,13 @@
 
 #include <utility>
 
+#include "atom/browser/api/atom_api_web_contents.h"
 #include "atom/common/native_mate_converters/net_converter.h"
 #include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "brightray/browser/net/devtools_network_transaction.h"
 #include "content/public/browser/browser_thread.h"
+#include "content/public/browser/render_frame_host.h"
 #include "net/url_request/url_request.h"
 
 using brightray::DevToolsNetworkTransaction;
@@ -74,10 +76,19 @@ void ToDictionary(base::DictionaryValue* details, net::URLRequest* request) {
   FillRequestDetails(details, request);
   details->SetInteger("id", request->identifier());
   details->SetDouble("timestamp", base::Time::Now().ToDoubleT() * 1000);
-  auto info = content::ResourceRequestInfo::ForRequest(request);
-  details->SetString("resourceType",
-                     info ? ResourceTypeToString(info->GetResourceType())
-                          : "other");
+  const auto* info = content::ResourceRequestInfo::ForRequest(request);
+  if (info) {
+    int process_id = info->GetChildID();
+    int frame_id = info->GetRenderFrameID();
+    auto* webContents = content::WebContents::FromRenderFrameHost(
+        content::RenderFrameHost::FromID(process_id, frame_id));
+    details->SetInteger("webContentsId",
+        atom::api::WebContents::GetIDFromWrappedClass(webContents));
+    details->SetString("resourceType",
+        ResourceTypeToString(info->GetResourceType()));
+  } else {
+    details->SetString("resourceType", "other");
+  }
 }
 
 void ToDictionary(base::DictionaryValue* details,

+ 1 - 0
spec/api-web-request-spec.js

@@ -89,6 +89,7 @@ describe('webRequest module', function () {
       ses.webRequest.onBeforeRequest(function (details, callback) {
         assert.equal(typeof details.id, 'number')
         assert.equal(typeof details.timestamp, 'number')
+        assert.equal(typeof details.webContentsId, 'number')
         assert.equal(details.url, defaultURL)
         assert.equal(details.method, 'GET')
         assert.equal(details.resourceType, 'xhr')