Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / components / cronet / android / java / src / org / chromium / net / UserAgent.java
1 // 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 package org.chromium.net;
6
7 import android.content.Context;
8 import android.content.pm.PackageInfo;
9 import android.content.pm.PackageManager;
10 import android.content.pm.PackageManager.NameNotFoundException;
11 import android.os.Build;
12
13 import java.util.Locale;
14
15 /**
16  * Constructs a User-Agent string.
17  */
18 public final class UserAgent {
19     private static final Object sLock = new Object();
20
21     private static int sVersionCode;
22
23     private UserAgent() {
24     }
25
26     public static String from(Context context) {
27         StringBuilder builder = new StringBuilder();
28
29         // Our package name and version.
30         builder.append(context.getPackageName());
31         builder.append('/');
32         builder.append(versionFromContext(context));
33
34         // The platform version.
35         builder.append(" (Linux; U; Android ");
36         builder.append(Build.VERSION.RELEASE);
37         builder.append("; ");
38         builder.append(Locale.getDefault().toString());
39
40         String model = Build.MODEL;
41         if (model.length() > 0) {
42             builder.append("; ");
43             builder.append(model);
44         }
45
46         String id = Build.ID;
47         if (id.length() > 0) {
48             builder.append("; Build/");
49             builder.append(id);
50         }
51
52         builder.append("; Cronet/");
53         builder.append(Version.CRONET_VERSION);
54
55         builder.append(')');
56
57         return builder.toString();
58     }
59
60     private static int versionFromContext(Context context) {
61         synchronized (sLock) {
62             if (sVersionCode == 0) {
63                 PackageManager packageManager = context.getPackageManager();
64                 String packageName = context.getPackageName();
65                 try {
66                     PackageInfo packageInfo = packageManager.getPackageInfo(
67                             packageName, 0);
68                     sVersionCode = packageInfo.versionCode;
69                 } catch (NameNotFoundException e) {
70                     throw new IllegalStateException(
71                             "Cannot determine package version");
72                 }
73             }
74             return sVersionCode;
75         }
76     }
77 }