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

Side by Side Diff: client/help_url_builder.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months 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 | « client/help_url_builder.h ('k') | client/help_url_builder_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2008 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15 #include "omaha/client/help_url_builder.h"
16 #include <windows.h>
17 #include <atlstr.h>
18 #include <vector>
19 #include "omaha/base/debug.h"
20 #include "omaha/base/logging.h"
21 #include "omaha/base/omaha_version.h"
22 #include "omaha/base/string.h"
23 #include "omaha/base/utils.h"
24 #include "omaha/base/vistautil.h"
25 #include "omaha/common/config_manager.h"
26 #include "omaha/common/goopdate_utils.h"
27 #include "goopdate/omaha3_idl.h"
28 #include "omaha/net/http_client.h"
29
30 namespace omaha {
31
32 namespace {
33
34 // Query element name-value pair.
35 typedef std::pair<CString, CString> QueryElement;
36
37 // Builds a query string from the provided name-value pairs.
38 // The string does not begin or end in a pair separator.
39 HRESULT BuildQueryString(const std::vector<QueryElement>& elements,
40 CString* query) {
41 ASSERT1(query);
42
43 query->Empty();
44
45 for (size_t i = 0; i < elements.size(); ++i) {
46 CString escaped_str;
47 HRESULT hr = StringEscape(elements[i].second, false, &escaped_str);
48 if (FAILED(hr)) {
49 CORE_LOG(LEVEL_WARNING, (_T("[StringEscape failed][0x%08x]"), hr));
50 return hr;
51 }
52
53 CString element;
54 element.FormatMessage(_T("%1=%2"), elements[i].first, escaped_str);
55
56 if (0 < i) {
57 query->Append(_T("&"));
58 }
59 query->Append(element);
60 }
61
62 return S_OK;
63 }
64
65 } // namespace
66
67 HRESULT HelpUrlBuilder::BuildUrl(const std::vector<AppResult>& app_results,
68 CString* help_url) const {
69 ASSERT1(help_url);
70 help_url->Empty();
71
72 CString more_info_url;
73 VERIFY1(SUCCEEDED(ConfigManager::Instance()->GetMoreInfoUrl(&more_info_url)));
74
75 const TCHAR* const kHelpLinkSourceId = _T("gethelp");
76 HRESULT hr = BuildHttpGetString(more_info_url,
77 app_results,
78 GetVersionString(),
79 kHelpLinkSourceId,
80 help_url);
81 if (FAILED(hr)) {
82 // Make sure a failed URL is not displayed.
83 help_url->Empty();
84 return hr;
85 }
86
87 return S_OK;
88 }
89
90 HRESULT HelpUrlBuilder::BuildHttpGetString(
91 const CString& service_url,
92 const std::vector<AppResult>& app_results,
93 const CString& goopdate_version,
94 const CString& source_id,
95 CString* get_request) const {
96 ASSERT1(get_request);
97 if (service_url.IsEmpty()) {
98 return E_INVALIDARG;
99 }
100 ASSERT1(_T('?') == service_url.GetAt(service_url.GetLength() - 1) ||
101 _T('&') == service_url.GetAt(service_url.GetLength() - 1));
102
103 CString os_version;
104 CString service_pack;
105 HRESULT hr = goopdate_utils::GetOSInfo(&os_version, &service_pack);
106 if (FAILED(hr)) {
107 CORE_LOG(LEVEL_WARNING, (_T("[GetOSInfo failed][0x%08x]"), hr));
108 }
109 const CString iid_string =
110 ::IsEqualGUID(GUID_NULL, iid_) ? _T("") : GuidToString(iid_);
111
112 std::vector<QueryElement> elements;
113 elements.push_back(QueryElement(_T("hl"), language_));
114
115 CString error_code_str;
116 CString extra_code_str;
117 CString element_name;
118 for (std::vector<AppResult>::size_type i = 0; i < app_results.size(); ++i) {
119 error_code_str.Format(_T("0x%x"), app_results[i].error_code);
120 extra_code_str.Format(_T("%d"), app_results[i].extra_code);
121 element_name.Format(_T("app.%d"), i);
122 elements.push_back(QueryElement(element_name, app_results[i].guid));
123 element_name.Format(_T("ec.%d"), i);
124 elements.push_back(QueryElement(element_name, error_code_str));
125 element_name.Format(_T("ex.%d"), i);
126 elements.push_back(QueryElement(element_name, extra_code_str));
127 }
128
129 elements.push_back(QueryElement(_T("guver"), goopdate_version));
130 elements.push_back(QueryElement(_T("m"), is_machine_ ? _T("1") : _T("0")));
131 elements.push_back(QueryElement(_T("os"), os_version));
132 elements.push_back(QueryElement(_T("sp"), service_pack));
133 elements.push_back(QueryElement(_T("iid"), iid_string));
134 elements.push_back(QueryElement(_T("brand"), brand_));
135 elements.push_back(QueryElement(_T("source"), source_id));
136
137 CString test_source = ConfigManager::Instance()->GetTestSource();
138 if (!test_source.IsEmpty()) {
139 elements.push_back(QueryElement(_T("testsource"), test_source));
140 }
141
142 CString query;
143 hr = BuildQueryString(elements, &query);
144 if (FAILED(hr)) {
145 CORE_LOG(LEVEL_WARNING, (_T("[BuildQueryString failed][0x%08x]"), hr));
146 return hr;
147 }
148 get_request->FormatMessage(_T("%1%2"), service_url, query);
149
150 // The length should be smaller than the maximum allowed get length.
151 ASSERT1(get_request->GetLength() <= INTERNET_MAX_URL_LENGTH);
152 if (get_request->GetLength() > INTERNET_MAX_URL_LENGTH) {
153 return E_FAIL;
154 }
155
156 return S_OK;
157 }
158
159 } // namespace omaha
OLDNEW
« no previous file with comments | « client/help_url_builder.h ('k') | client/help_url_builder_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698