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#ifndef SYNC_ENGINE_DOWNLOAD_H_
6#define SYNC_ENGINE_DOWNLOAD_H_
7
8#include "sync/base/sync_export.h"
9#include "sync/engine/sync_directory_update_handler.h"
10#include "sync/internal_api/public/base/model_type.h"
11#include "sync/internal_api/public/util/syncer_error.h"
12#include "sync/protocol/sync.pb.h"
13
14namespace sync_pb {
15class DebugInfo;
16}  // namespace sync_pb
17
18namespace syncer {
19
20namespace sessions {
21class DebugInfoGetter;
22class NudgeTracker;
23class StatusController;
24class SyncSession;
25}  // namespace sessions
26
27namespace download {
28
29// This function executes a single GetUpdate request and stores the response in
30// the session's StatusController.  It constructs the type of request used to
31// keep types in sync when in normal mode.
32SYNC_EXPORT_PRIVATE void BuildNormalDownloadUpdates(
33    sessions::SyncSession* session,
34    bool create_mobile_bookmarks_folder,
35    ModelTypeSet request_types,
36    const sessions::NudgeTracker& nudge_tracker,
37    sync_pb::ClientToServerMessage* client_to_server_message);
38
39// Helper function.  Defined here for testing.
40SYNC_EXPORT_PRIVATE void BuildNormalDownloadUpdatesImpl(
41    ModelTypeSet proto_request_types,
42    UpdateHandlerMap* update_handler_map,
43    const sessions::NudgeTracker& nudge_tracker,
44    sync_pb::GetUpdatesMessage* get_updates);
45
46// This function executes a single GetUpdate request and stores the response in
47// the session's StatusController.  It constructs the type of request used to
48// initialize a type for the first time.
49SYNC_EXPORT_PRIVATE void BuildDownloadUpdatesForConfigure(
50    sessions::SyncSession* session,
51    bool create_mobile_bookmarks_folder,
52    sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source,
53    ModelTypeSet request_types,
54    sync_pb::ClientToServerMessage* client_to_server_message);
55
56// Helper function.  Defined here for testing.
57SYNC_EXPORT_PRIVATE void BuildDownloadUpdatesForConfigureImpl(
58    ModelTypeSet proto_request_types,
59    UpdateHandlerMap* update_handler_map,
60    sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source,
61    sync_pb::GetUpdatesMessage* get_updates);
62
63// This function executes a single GetUpdate request and stores the response in
64// the session's status controller.  It constructs the type of request used for
65// periodic polling.
66SYNC_EXPORT_PRIVATE void BuildDownloadUpdatesForPoll(
67    sessions::SyncSession* session,
68    bool create_mobile_bookmarks_folder,
69    ModelTypeSet request_types,
70    sync_pb::ClientToServerMessage* client_to_server_message);
71
72// Helper function.  Defined here for testing.
73SYNC_EXPORT_PRIVATE void BuildDownloadUpdatesForPollImpl(
74    ModelTypeSet proto_request_types,
75    UpdateHandlerMap* update_handler_map,
76    sync_pb::GetUpdatesMessage* get_updates);
77
78// Sends the specified message to the server and stores the response in a member
79// of the |session|'s StatusController.
80SYNC_EXPORT_PRIVATE SyncerError
81    ExecuteDownloadUpdates(ModelTypeSet request_types,
82                           sessions::SyncSession* session,
83                           sync_pb::ClientToServerMessage* msg);
84
85// Helper function for processing responses from the server.
86// Defined here for testing.
87SYNC_EXPORT_PRIVATE SyncerError ProcessResponse(
88    const sync_pb::GetUpdatesResponse& gu_response,
89    ModelTypeSet proto_request_types,
90    UpdateHandlerMap* handler_map,
91    sessions::StatusController* status);
92
93// Helper function to copy client debug info from debug_info_getter to
94// debug_info.  Defined here for testing.
95SYNC_EXPORT_PRIVATE void CopyClientDebugInfo(
96    sessions::DebugInfoGetter* debug_info_getter,
97    sync_pb::DebugInfo* debug_info);
98
99}  // namespace download
100
101}  // namespace syncer
102
103#endif  // SYNC_ENGINE_DOWNLOAD_H_
104