blob: 087b40650fae487107c38d20ae3f1879a19f5b81 [file] [log] [blame]
[email protected]c11e6592014-06-27 17:07:341// Copyright 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 "extensions/renderer/scripts_run_info.h"
6
asvitkinef5d4ee562016-11-07 18:57:087#include "base/metrics/histogram_macros.h"
rdevlin.cronin45dca7f2015-06-08 19:47:038#include "content/public/renderer/render_frame.h"
rdevlin.cronin3ae4a32012015-06-30 17:43:199#include "content/public/renderer/render_thread.h"
[email protected]c11e6592014-06-27 17:07:3410#include "extensions/common/extension_messages.h"
11#include "extensions/renderer/script_context.h"
Blink Reformata30d4232018-04-07 15:31:0612#include "third_party/blink/public/web/web_local_frame.h"
[email protected]c11e6592014-06-27 17:07:3413
14namespace extensions {
15
rdevlin.cronin3ae4a32012015-06-30 17:43:1916ScriptsRunInfo::ScriptsRunInfo(content::RenderFrame* render_frame,
17 UserScript::RunLocation location)
18 : num_css(0u),
19 num_js(0u),
20 num_blocking_js(0u),
21 routing_id_(render_frame->GetRoutingID()),
22 run_location_(location),
Takeshi Yoshino41b671a2017-08-01 12:17:5123 frame_url_(ScriptContext::GetDocumentLoaderURLForFrame(
24 render_frame->GetWebFrame())) {}
[email protected]c11e6592014-06-27 17:07:3425
26ScriptsRunInfo::~ScriptsRunInfo() {
27}
28
rdevlin.cronin6fba7ec2016-06-24 16:15:0529void ScriptsRunInfo::LogRun(bool send_script_activity) {
[email protected]c11e6592014-06-27 17:07:3430 // Notify the browser if any extensions are now executing scripts.
rdevlin.cronin6fba7ec2016-06-24 16:15:0531 if (!executing_scripts.empty() && send_script_activity) {
rdevlin.cronin3ae4a32012015-06-30 17:43:1932 content::RenderThread::Get()->Send(
33 new ExtensionHostMsg_ContentScriptsExecuting(
34 routing_id_, executing_scripts, frame_url_));
[email protected]c11e6592014-06-27 17:07:3435 }
36
Kunihiko Sakamotocf8f3b582017-08-29 02:40:2137 base::TimeDelta elapsed = timer.Elapsed();
38
rdevlin.cronin3ae4a32012015-06-30 17:43:1939 switch (run_location_) {
[email protected]c11e6592014-06-27 17:07:3440 case UserScript::DOCUMENT_START:
41 UMA_HISTOGRAM_COUNTS_100("Extensions.InjectStart_CssCount", num_css);
42 UMA_HISTOGRAM_COUNTS_100("Extensions.InjectStart_ScriptCount", num_js);
kozyatinskiyc8bc9a582015-03-06 09:33:4143 if (num_blocking_js) {
44 UMA_HISTOGRAM_COUNTS_100("Extensions.InjectStart_BlockingScriptCount",
45 num_blocking_js);
46 } else if (num_css || num_js) {
Kunihiko Sakamotocf8f3b582017-08-29 02:40:2147 UMA_HISTOGRAM_TIMES("Extensions.InjectStart_Time", elapsed);
kozyatinskiyc8bc9a582015-03-06 09:33:4148 }
[email protected]c11e6592014-06-27 17:07:3449 break;
50 case UserScript::DOCUMENT_END:
51 UMA_HISTOGRAM_COUNTS_100("Extensions.InjectEnd_ScriptCount", num_js);
kozyatinskiyc8bc9a582015-03-06 09:33:4152 if (num_blocking_js) {
53 UMA_HISTOGRAM_COUNTS_100("Extensions.InjectEnd_BlockingScriptCount",
54 num_blocking_js);
55 } else if (num_js) {
Kunihiko Sakamotocf8f3b582017-08-29 02:40:2156 UMA_HISTOGRAM_TIMES("Extensions.InjectEnd_Time", elapsed);
kozyatinskiyc8bc9a582015-03-06 09:33:4157 }
[email protected]c11e6592014-06-27 17:07:3458 break;
59 case UserScript::DOCUMENT_IDLE:
60 UMA_HISTOGRAM_COUNTS_100("Extensions.InjectIdle_ScriptCount", num_js);
kozyatinskiyc8bc9a582015-03-06 09:33:4161 if (num_blocking_js) {
62 UMA_HISTOGRAM_COUNTS_100("Extensions.InjectIdle_BlockingScriptCount",
63 num_blocking_js);
64 } else if (num_js) {
Kunihiko Sakamotocf8f3b582017-08-29 02:40:2165 UMA_HISTOGRAM_TIMES("Extensions.InjectIdle_Time", elapsed);
kozyatinskiyc8bc9a582015-03-06 09:33:4166 }
[email protected]c11e6592014-06-27 17:07:3467 break;
68 case UserScript::RUN_DEFERRED:
markdittmer3ac200042014-08-28 23:43:0869 case UserScript::BROWSER_DRIVEN:
[email protected]c11e6592014-06-27 17:07:3470 // TODO(rdevlin.cronin): Add histograms.
71 break;
72 case UserScript::UNDEFINED:
73 case UserScript::RUN_LOCATION_LAST:
74 NOTREACHED();
75 }
76}
77
[email protected]c11e6592014-06-27 17:07:3478} // namespace extensions