| Index: chrome/browser/chrome_to_mobile_service.h
|
| diff --git a/chrome/browser/chrome_to_mobile_service.h b/chrome/browser/chrome_to_mobile_service.h
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..6a70094abe83745ddc8a83b3a2d1b59803207a5f
|
| --- /dev/null
|
| +++ b/chrome/browser/chrome_to_mobile_service.h
|
| @@ -0,0 +1,133 @@
|
| +// Copyright (c) 2012 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 CHROME_BROWSER_CHROME_TO_MOBILE_SERVICE_H_
|
| +#define CHROME_BROWSER_CHROME_TO_MOBILE_SERVICE_H_
|
| +#pragma once
|
| +
|
| +#include <map>
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "base/file_util.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +#include "base/scoped_temp_dir.h"
|
| +#include "base/string16.h"
|
| +#include "base/timer.h"
|
| +#include "chrome/browser/profiles/profile_keyed_service.h"
|
| +#include "chrome/common/net/gaia/oauth2_access_token_consumer.h"
|
| +#include "content/public/common/url_fetcher_delegate.h"
|
| +#include "googleurl/src/gurl.h"
|
| +
|
| +class OAuth2AccessTokenFetcher;
|
| +class CloudPrintURL;
|
| +class Profile;
|
| +
|
| +// ChromeToMobileService connects to the cloud print service to enumerate
|
| +// compatible mobiles owned by its profile and send URLs and MHTML snapshots.
|
| +// The mobile list updates regularly, and explicitly by RequestMobileListUpdate.
|
| +class ChromeToMobileService : public ProfileKeyedService,
|
| + public content::URLFetcherDelegate,
|
| + public OAuth2AccessTokenConsumer {
|
| + public:
|
| + class Observer {
|
| + public:
|
| + virtual ~Observer();
|
| +
|
| + // Called on generation of the page's MHTML snapshot.
|
| + virtual void SnapshotGenerated(const FilePath& path, int64 bytes) = 0;
|
| +
|
| + // Called after URLFetcher responses from sending the URL (and snapshot).
|
| + virtual void OnSendComplete(bool success) = 0;
|
| + };
|
| +
|
| + // The URLFetcher request types.
|
| + enum RequestType {
|
| + SEARCH,
|
| + URL,
|
| + DELAYED_SNAPSHOT,
|
| + SNAPSHOT,
|
| + };
|
| +
|
| + // The aggregated URLFetcher submission data.
|
| + struct RequestData {
|
| + RequestData();
|
| + ~RequestData();
|
| +
|
| + string16 mobile_id;
|
| + GURL url;
|
| + string16 title;
|
| + FilePath snapshot_path;
|
| + std::string snapshot_id;
|
| + RequestType type;
|
| + };
|
| +
|
| + explicit ChromeToMobileService(Profile* profile);
|
| + virtual ~ChromeToMobileService();
|
| +
|
| + // content::URLFetcherDelegate methods.
|
| + virtual void OnURLFetchComplete(const content::URLFetcher* source) OVERRIDE;
|
| +
|
| + // OAuth2AccessTokenConsumer methods.
|
| + virtual void OnGetTokenSuccess(const std::string& access_token) OVERRIDE;
|
| + virtual void OnGetTokenFailure(const GoogleServiceAuthError& error) OVERRIDE;
|
| +
|
| + // Get the list of mobile devices.
|
| + const std::vector<base::DictionaryValue*>& mobiles() { return mobiles_; }
|
| +
|
| + // Request an updated mobile device list, request auth first if needed.
|
| + void RequestMobileListUpdate();
|
| +
|
| + // Callback with an MHTML snapshot of the profile's selected WebContents.
|
| + void GenerateSnapshot(base::WeakPtr<Observer> observer);
|
| +
|
| + // Send the profile's selected WebContents to the specified mobile device.
|
| + void SendToMobile(const string16& mobile_id,
|
| + const FilePath& snapshot,
|
| + base::WeakPtr<Observer> observer);
|
| +
|
| + private:
|
| + // Utility function to initialize the ScopedTempDir.
|
| + void CreateUniqueTempDir();
|
| +
|
| + // Utility function to create URLFetcher requests.
|
| + content::URLFetcher* CreateRequest(const RequestData& data);
|
| +
|
| + void RequestAuth();
|
| + void RequestSearch();
|
| +
|
| + void HandleSearchResponse();
|
| + void HandleSubmitResponse(const content::URLFetcher* source);
|
| +
|
| + Profile* profile_;
|
| +
|
| + // A utility class for accessing the cloud print service.
|
| + scoped_ptr<CloudPrintURL> cloud_print_url_;
|
| +
|
| + // The list of mobile devices retrieved from the cloud print service.
|
| + std::vector<base::DictionaryValue*> mobiles_;
|
| +
|
| + // The temporary directory for MHTML snapshot files.
|
| + ScopedTempDir temp_dir_;
|
| +
|
| + // Map URLFetchers to observers for reporting OnSendComplete.
|
| + typedef std::map<const content::URLFetcher*, base::WeakPtr<Observer> >
|
| + RequestObserverMap;
|
| + RequestObserverMap request_observer_map_;
|
| +
|
| + // The OAuth2 token and retry count.
|
| + std::string oauth2_token_;
|
| + size_t oauth2_retry_count_;
|
| +
|
| + // The pending URL requests.
|
| + scoped_ptr<OAuth2AccessTokenFetcher> oauth2_request_;
|
| + scoped_ptr<content::URLFetcher> search_request_;
|
| +
|
| + // A timer for authentication retries and mobile device list updates.
|
| + base::OneShotTimer<ChromeToMobileService> request_timer_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ChromeToMobileService);
|
| +};
|
| +
|
| +#endif // CHROME_BROWSER_CHROME_TO_MOBILE_SERVICE_H_
|
|
|