1// Copyright 2013 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#include "chrome/browser/local_discovery/privet_confirm_api_flow.h"
6
7#include "base/strings/stringprintf.h"
8#include "base/values.h"
9#include "chrome/browser/local_discovery/gcd_api_flow.h"
10#include "chrome/browser/local_discovery/gcd_constants.h"
11#include "chrome/browser/local_discovery/privet_constants.h"
12#include "chrome/common/cloud_print/cloud_print_constants.h"
13#include "components/cloud_devices/common/cloud_devices_urls.h"
14#include "net/base/url_util.h"
15
16namespace local_discovery {
17
18namespace {
19
20GURL GetConfirmFlowUrl(const std::string& token) {
21  return net::AppendQueryParameter(
22      cloud_devices::GetCloudPrintRelativeURL("confirm"), "token", token);
23}
24
25}  // namespace
26
27PrivetConfirmApiCallFlow::PrivetConfirmApiCallFlow(
28    const std::string& token,
29    const ResponseCallback& callback)
30    : callback_(callback), token_(token) {
31}
32
33PrivetConfirmApiCallFlow::~PrivetConfirmApiCallFlow() {
34}
35
36void PrivetConfirmApiCallFlow::OnGCDAPIFlowError(GCDApiFlow::Status status) {
37  callback_.Run(status);
38}
39
40void PrivetConfirmApiCallFlow::OnGCDAPIFlowComplete(
41    const base::DictionaryValue& value) {
42  bool success = false;
43
44  if (!value.GetBoolean(cloud_print::kSuccessValue, &success)) {
45    callback_.Run(GCDApiFlow::ERROR_MALFORMED_RESPONSE);
46    return;
47  }
48
49  if (success) {
50    callback_.Run(GCDApiFlow::SUCCESS);
51  } else {
52    callback_.Run(GCDApiFlow::ERROR_FROM_SERVER);
53  }
54}
55
56net::URLFetcher::RequestType PrivetConfirmApiCallFlow::GetRequestType() {
57  return net::URLFetcher::GET;
58}
59
60GURL PrivetConfirmApiCallFlow::GetURL() {
61  return GetConfirmFlowUrl(token_);
62}
63
64}  // namespace local_discovery
65