// Copyright 2013 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.

#include "remoting/client/plugin/pepper_token_fetcher.h"

#include "remoting/client/plugin/chromoting_instance.h"

namespace remoting {

PepperTokenFetcher::PepperTokenFetcher(base::WeakPtr<ChromotingInstance> plugin,
                                       const std::string& host_public_key)
    : plugin_(plugin),
      host_public_key_(host_public_key),
      weak_factory_(this) {
}

PepperTokenFetcher::~PepperTokenFetcher() {
}

void PepperTokenFetcher::FetchThirdPartyToken(
    const GURL& token_url,
    const std::string& scope,
    const TokenFetchedCallback& token_fetched_callback) {
  if (plugin_.get()) {
    token_fetched_callback_ = token_fetched_callback;
    plugin_->FetchThirdPartyToken(token_url, host_public_key_, scope,
                                  weak_factory_.GetWeakPtr());
  }
}

void PepperTokenFetcher::OnTokenFetched(
    const std::string& token, const std::string& shared_secret) {
  if (!token_fetched_callback_.is_null()) {
    token_fetched_callback_.Run(token, shared_secret);
    token_fetched_callback_.Reset();
  }
}

}  // namespace remoting
