summaryrefslogtreecommitdiff
path: root/chromium/components/update_client/protocol_builder.h
blob: 7c6422eb37e107655b42d5d570d04515e3bc78cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_UPDATE_CLIENT_PROTOCOL_BUILDER_H_
#define COMPONENTS_UPDATE_CLIENT_PROTOCOL_BUILDER_H_

#include <memory>
#include <string>
#include <vector>

#include "components/update_client/component.h"
#include "components/update_client/crx_downloader.h"
#include "components/update_client/updater_state.h"

namespace update_client {

class Configurator;
class PersistedData;

// Builds an update check request for |components|. |additional_attributes| is
// serialized as part of the <request> element of the request to customize it
// with data that is not platform or component specific. For each |item|, a
// corresponding <app> element is created and inserted as a child node of
// the <request>.
//
// <request protocol="3.0"....>
//    <app appid="hnimpnehoodheedghdeeijklkeaacbdc"
//         version="0.1.2.3" installsource="ondemand">
//      <updatecheck/>
//      <packages>
//        <package fp="abcd"/>
//      </packages>
//    </app>
// </request>
std::string BuildUpdateCheckRequest(
    const Configurator& config,
    const std::vector<std::string>& ids_checked,
    const IdToComponentPtrMap& components,
    PersistedData* metadata,
    const std::string& additional_attributes,
    bool enabled_component_updates,
    const std::unique_ptr<UpdaterState::Attributes>& updater_state_attributes);

// Builds a ping request for the specified component. The request contains one
// or more ping events associated with this component. The events are
// serialized as children of the <app> node. For example:
//
// <request protocol="3.0"....>
//    <app appid="hnimpnehoodheedghdeeijklkeaacbdc"
//         version="1.0" nextversion="2.0">
//          <event eventtype="3" eventresult="1"/>
//          <event eventtype="14\" eventresult="0" downloader="direct"
//              "errorcode="-1" url="http://host1/path1" downloaded="123"
//              "total="456"/>
//    </app>
// </request>
std::string BuildEventPingRequest(const Configurator& config,
                                  const Component& component);

// Returns a string representing one ping event for the update of a component.
// The event type for this ping event is 3.
std::string BuildUpdateCompleteEventElement(const Component& component);

// Returns a string representing one ping event for the uninstall of a
// component. The event type for this ping event is 4.
std::string BuildUninstalledEventElement(const Component& component);

// Returns a string representing a download complete event corresponding to
// one download metrics instance. The event type for this ping event is 14.
std::string BuildDownloadCompleteEventElement(
    const CrxDownloader::DownloadMetrics& metrics);

std::string BuildActionRunEventElement(bool succeeded,
                                       int error_code,
                                       int extra_code1);

// An update protocol request starts with a common preamble which includes
// version and platform information for Chrome and the operating system,
// followed by a request body, which is the actual payload of the request.
// For example:
//
// <?xml version="1.0" encoding="UTF-8"?>
// <request protocol="3.0" version="chrome-32.0.1.0" prodversion="32.0.1.0"
//        requestid="{7383396D-B4DD-46E1-9104-AAC6B918E792}"
//        updaterchannel="canary" arch="x86" nacl_arch="x86-64"
//        ADDITIONAL ATTRIBUTES>
//   <hw physmemory="16"/>
//   <os platform="win" version="6.1" arch="x86"/>
//   ... REQUEST BODY ...
// </request>

// Builds a protocol request string by creating the outer envelope for
// the request and including the request body specified as a parameter.
// If present, the |download_preference| specifies a group policy that
// affects the list of download URLs returned in the update response.
// If specified, |additional_attributes| are appended as attributes of the
// request element. The additional attributes have to be well-formed for
// insertion in the request element. |updater_state_attributes| is an optional
// parameter specifying that an <updater> element is serialized as part of
// the request.
std::string BuildProtocolRequest(
    const std::string& prod_id,
    const std::string& browser_version,
    const std::string& channel,
    const std::string& lang,
    const std::string& os_long_name,
    const std::string& download_preference,
    const std::string& request_body,
    const std::string& additional_attributes,
    const std::unique_ptr<UpdaterState::Attributes>& updater_state_attributes);

}  // namespace update_client

#endif  // COMPONENTS_UPDATE_CLIENT_PROTOCOL_BUILDER_H_