summaryrefslogtreecommitdiffstats
path: root/chrome/common/net/net_error_tracker.h
blob: 530abcbeab11255d84a4749a800411d74c838d55 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// Copyright (c) 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.

#ifndef CHROME_COMMON_NET_NET_ERROR_TRACKER_H_
#define CHROME_COMMON_NET_NET_ERROR_TRACKER_H_

#include "base/bind.h"

class NetErrorTracker {
 public:
  enum FrameType {
    FRAME_SUB,
    FRAME_MAIN
  };

  enum PageType {
    PAGE_NORMAL,
    PAGE_ERROR
  };

  enum ErrorType {
    ERROR_OTHER,
    ERROR_DNS
  };

  enum DnsErrorPageState {
    DNS_ERROR_PAGE_NONE,
    DNS_ERROR_PAGE_PENDING,
    DNS_ERROR_PAGE_LOADED
  };

  typedef base::Callback<void(DnsErrorPageState state)> Callback;

  explicit NetErrorTracker(const Callback& callback);
  ~NetErrorTracker();

  void OnStartProvisionalLoad(FrameType frame, PageType page);
  void OnCommitProvisionalLoad(FrameType frame);
  void OnFailProvisionalLoad(FrameType frame, ErrorType error);
  void OnFinishLoad(FrameType frame);

 private:
  enum LoadState {
    LOAD_NONE,
    LOAD_STARTED,
    LOAD_COMMITTED,
    LOAD_FAILED,
    LOAD_FINISHED
  };

  void SetDnsErrorPageState(DnsErrorPageState state);

  Callback callback_;

  LoadState load_state_;
  PageType load_type_;

  ErrorType error_type_;

  DnsErrorPageState dns_error_page_state_;

  DISALLOW_COPY_AND_ASSIGN(NetErrorTracker);
};

#endif  // CHROME_COMMON_NET_NET_ERROR_TRACKER_H_