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

Side by Side Diff: chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.cc

Issue 2476783002: Adding a destination platform histogram for UMA. (Closed)
Patch Set: Removing histograms include Created 4 years, 1 month 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
« no previous file with comments | « no previous file | chrome/browser/chromeos/arc/intent_helper/arc_navigation_throttle.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/chromeos/arc/intent_helper/arc_external_protocol_dialog .h" 5 #include "chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog .h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
13 #include "base/metrics/histogram_macros.h"
14 #include "chrome/browser/chromeos/arc/intent_helper/arc_navigation_throttle.h" 13 #include "chrome/browser/chromeos/arc/intent_helper/arc_navigation_throttle.h"
15 #include "chrome/browser/chromeos/external_protocol_dialog.h" 14 #include "chrome/browser/chromeos/external_protocol_dialog.h"
16 #include "chrome/browser/tab_contents/tab_util.h" 15 #include "chrome/browser/tab_contents/tab_util.h"
17 #include "chrome/browser/ui/browser_dialogs.h" 16 #include "chrome/browser/ui/browser_dialogs.h"
18 #include "components/arc/arc_bridge_service.h" 17 #include "components/arc/arc_bridge_service.h"
19 #include "components/arc/arc_service_manager.h" 18 #include "components/arc/arc_service_manager.h"
20 #include "components/arc/intent_helper/activity_icon_loader.h" 19 #include "components/arc/intent_helper/activity_icon_loader.h"
21 #include "components/arc/intent_helper/arc_intent_helper_bridge.h" 20 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
22 #include "components/arc/intent_helper/page_transition_util.h" 21 #include "components/arc/intent_helper/page_transition_util.h"
23 #include "content/public/browser/browser_context.h" 22 #include "content/public/browser/browser_context.h"
24 #include "content/public/browser/browser_thread.h" 23 #include "content/public/browser/browser_thread.h"
25 #include "content/public/browser/page_navigator.h" 24 #include "content/public/browser/page_navigator.h"
26 #include "content/public/browser/web_contents.h" 25 #include "content/public/browser/web_contents.h"
27 #include "content/public/common/referrer.h" 26 #include "content/public/common/referrer.h"
28 #include "ui/base/page_transition_types.h" 27 #include "ui/base/page_transition_types.h"
29 #include "ui/base/window_open_disposition.h" 28 #include "ui/base/window_open_disposition.h"
30 #include "ui/gfx/image/image.h" 29 #include "ui/gfx/image/image.h"
31 #include "url/gurl.h" 30 #include "url/gurl.h"
32 31
33 using content::WebContents; 32 using content::WebContents;
34 33
35 namespace arc { 34 namespace arc {
36 35
37 namespace { 36 namespace {
38 37
39 constexpr uint32_t kMinVersionForHandleUrl = 2; 38 constexpr uint32_t kMinVersionForHandleUrl = 2;
40 constexpr uint32_t kMinVersionForRequestUrlHandlerList = 2; 39 constexpr uint32_t kMinVersionForRequestUrlHandlerList = 2;
41 constexpr uint32_t kMinVersionForAddPreferredPackage = 7; 40 constexpr uint32_t kMinVersionForAddPreferredPackage = 7;
42 41
43 void RecordUma(ArcNavigationThrottle::CloseReason close_reason) {
44 UMA_HISTOGRAM_ENUMERATION(
45 "Arc.IntentHandlerAction", static_cast<int>(close_reason),
46 static_cast<int>(ArcNavigationThrottle::CloseReason::SIZE));
47 }
48
49 // Shows the Chrome OS' original external protocol dialog as a fallback. 42 // Shows the Chrome OS' original external protocol dialog as a fallback.
50 void ShowFallbackExternalProtocolDialog(int render_process_host_id, 43 void ShowFallbackExternalProtocolDialog(int render_process_host_id,
51 int routing_id, 44 int routing_id,
52 const GURL& url) { 45 const GURL& url) {
53 WebContents* web_contents = 46 WebContents* web_contents =
54 tab_util::GetWebContentsByID(render_process_host_id, routing_id); 47 tab_util::GetWebContentsByID(render_process_host_id, routing_id);
55 new ExternalProtocolDialog(web_contents, url); 48 new ExternalProtocolDialog(web_contents, url);
56 } 49 }
57 50
58 scoped_refptr<ActivityIconLoader> GetIconLoader() { 51 scoped_refptr<ActivityIconLoader> GetIconLoader() {
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 << ", handlers.size=" << handlers.size(); 257 << ", handlers.size=" << handlers.size();
265 // fall through. 258 // fall through.
266 } 259 }
267 case ArcNavigationThrottle::CloseReason::DIALOG_DEACTIVATED: { 260 case ArcNavigationThrottle::CloseReason::DIALOG_DEACTIVATED: {
268 // The user didn't select any ARC activity. Show the Chrome OS dialog. 261 // The user didn't select any ARC activity. Show the Chrome OS dialog.
269 ShowFallbackExternalProtocolDialog(render_process_host_id, routing_id, 262 ShowFallbackExternalProtocolDialog(render_process_host_id, routing_id,
270 url); 263 url);
271 break; 264 break;
272 } 265 }
273 } 266 }
274 RecordUma(close_reason); 267
268 ArcNavigationThrottle::Platform platform =
269 ArcNavigationThrottle::GetDestinationPlatform(selected_app_package,
270 close_reason);
271 ArcNavigationThrottle::RecordUma(close_reason, platform);
275 } 272 }
276 273
277 // Called when ARC returned activity icons for the |handlers|. 274 // Called when ARC returned activity icons for the |handlers|.
278 void OnAppIconsReceived( 275 void OnAppIconsReceived(
279 int render_process_host_id, 276 int render_process_host_id,
280 int routing_id, 277 int routing_id,
281 const GURL& url, 278 const GURL& url,
282 mojo::Array<mojom::IntentHandlerInfoPtr> handlers, 279 mojo::Array<mojom::IntentHandlerInfoPtr> handlers,
283 std::unique_ptr<ActivityIconLoader::ActivityToIconsMap> icons) { 280 std::unique_ptr<ActivityIconLoader::ActivityToIconsMap> icons) {
284 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 281 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 if (!instance || !icon_loader) { 314 if (!instance || !icon_loader) {
318 // ARC is not running anymore. Show the Chrome OS dialog. 315 // ARC is not running anymore. Show the Chrome OS dialog.
319 ShowFallbackExternalProtocolDialog(render_process_host_id, routing_id, url); 316 ShowFallbackExternalProtocolDialog(render_process_host_id, routing_id, url);
320 return; 317 return;
321 } 318 }
322 319
323 // Check if the |url| should be handled right away without showing the UI. 320 // Check if the |url| should be handled right away without showing the UI.
324 GetActionResult result; 321 GetActionResult result;
325 if (HandleUrl(render_process_host_id, routing_id, url, handlers, 322 if (HandleUrl(render_process_host_id, routing_id, url, handlers,
326 handlers.size(), &result)) { 323 handlers.size(), &result)) {
327 if (result == GetActionResult::HANDLE_URL_IN_ARC) 324 if (result == GetActionResult::HANDLE_URL_IN_ARC) {
328 RecordUma(ArcNavigationThrottle::CloseReason::PREFERRED_ACTIVITY_FOUND); 325 ArcNavigationThrottle::RecordUma(
326 ArcNavigationThrottle::CloseReason::PREFERRED_ACTIVITY_FOUND,
327 ArcNavigationThrottle::Platform::ARC);
328 }
329 return; // the |url| has been handled. 329 return; // the |url| has been handled.
330 } 330 }
331 331
332 // Otherwise, retrieve icons of the activities. 332 // Otherwise, retrieve icons of the activities.
333 std::vector<ActivityIconLoader::ActivityName> activities; 333 std::vector<ActivityIconLoader::ActivityName> activities;
334 for (const auto& handler : handlers) { 334 for (const auto& handler : handlers) {
335 activities.emplace_back(handler->package_name, handler->activity_name); 335 activities.emplace_back(handler->package_name, handler->activity_name);
336 } 336 }
337 icon_loader->GetActivityIcons( 337 icon_loader->GetActivityIcons(
338 activities, base::Bind(OnAppIconsReceived, render_process_host_id, 338 activities, base::Bind(OnAppIconsReceived, render_process_host_id,
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 GetActionResult GetActionForTesting( 393 GetActionResult GetActionForTesting(
394 const GURL& original_url, 394 const GURL& original_url,
395 const mojo::Array<mojom::IntentHandlerInfoPtr>& handlers, 395 const mojo::Array<mojom::IntentHandlerInfoPtr>& handlers,
396 size_t selected_app_index, 396 size_t selected_app_index,
397 std::pair<GURL, std::string>* out_url_and_package) { 397 std::pair<GURL, std::string>* out_url_and_package) {
398 return GetAction(original_url, handlers, selected_app_index, 398 return GetAction(original_url, handlers, selected_app_index,
399 out_url_and_package); 399 out_url_and_package);
400 } 400 }
401 401
402 } // namespace arc 402 } // namespace arc
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/chromeos/arc/intent_helper/arc_navigation_throttle.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698