1 // Copyright 2014 The Chromium Authors 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.impl; 6 7 import android.os.Build; 8 9 import java.util.Locale; 10 11 /** Constructs a User-Agent string. */ 12 public final class UserAgent { 13 UserAgent()14 private UserAgent() {} 15 16 /** 17 * Returns a default User-Agent string including system build version, model and Id, 18 * and Cronet version. 19 */ getDefault()20 public static String getDefault() { 21 return UserAgentsHolder.DEFAULT_USER_AGENT; 22 } 23 24 /** 25 * Returns default QUIC User Agent Id string including the Cronet version. 26 */ getDefaultQuicUserAgentId()27 static String getDefaultQuicUserAgentId() { 28 return UserAgentsHolder.DEFAULT_QUIC_USER_AGENT; 29 } 30 31 private static class UserAgentsHolder { 32 static final String DEFAULT_USER_AGENT = createDefaultUserAgent(); 33 static final String DEFAULT_QUIC_USER_AGENT = createDefaultQuicUserAgent(); 34 createDefaultQuicUserAgent()35 private static String createDefaultQuicUserAgent() { 36 StringBuilder builder = new StringBuilder(); 37 38 // Application name and cronet version. 39 builder.append("AndroidHttpClient"); 40 appendCronetVersion(builder); 41 42 return builder.toString(); 43 } 44 createDefaultUserAgent()45 private static String createDefaultUserAgent() { 46 StringBuilder builder = new StringBuilder(); 47 48 // Our package name and version. 49 builder.append("AndroidHttpClient"); 50 51 // The platform version. 52 builder.append(" (Linux; U; Android "); 53 builder.append(Build.VERSION.RELEASE); 54 builder.append("; "); 55 builder.append(Locale.getDefault().toString()); 56 57 String model = Build.MODEL; 58 if (model.length() > 0) { 59 builder.append("; "); 60 builder.append(model); 61 } 62 63 String id = Build.ID; 64 if (id.length() > 0) { 65 builder.append("; Build/"); 66 builder.append(id); 67 } 68 69 builder.append(";"); 70 appendCronetVersion(builder); 71 72 builder.append(')'); 73 74 return builder.toString(); 75 } 76 appendCronetVersion(StringBuilder builder)77 private static void appendCronetVersion(StringBuilder builder) { 78 builder.append(" Cronet/"); 79 builder.append(ImplVersion.getCronetVersion()); 80 } 81 } 82 } 83