Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(389)

Side by Side Diff: ios/chrome/browser/ui/reader_mode/reader_mode_checker.h

Issue 2589583003: Upstream Chrome on iOS source code [7/11]. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 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 IOS_CHROME_BROWSER_UI_READER_MODE_READER_MODE_CHECKER_H_
6 #define IOS_CHROME_BROWSER_UI_READER_MODE_READER_MODE_CHECKER_H_
7
8 #import <Foundation/Foundation.h>
9
10 #include "base/memory/weak_ptr.h"
11 #include "base/observer_list.h"
12 #include "ios/web/public/web_state/web_state_observer.h"
13
14 namespace web {
15 class WebState;
16 }
17
18 class ReaderModeChecker;
19
20 @class CRWJSInjectionReceiver;
21
22 class ReaderModeCheckerObserver {
23 public:
24 explicit ReaderModeCheckerObserver(ReaderModeChecker* readerModeChecker);
25 virtual ~ReaderModeCheckerObserver();
26
27 // Called when the content of the page is known to be distillable.
28 virtual void PageIsDistillable() = 0;
29
30 // Invoked when the ReaderModeChecker is being destroyed. Gives subclasses a
31 // chance to cleanup.
32 virtual void ReaderModeCheckerDestroyed() {}
33
34 private:
35 ReaderModeChecker* readerModeChecker_;
36 DISALLOW_COPY_AND_ASSIGN(ReaderModeCheckerObserver);
37 };
38
39 // Checks if a page loaded in a container that allows javascript execution is
40 // suitable for reader mode.
41 class ReaderModeChecker : web::WebStateObserver {
42 public:
43 explicit ReaderModeChecker(web::WebState* web_state);
44 ~ReaderModeChecker() override;
45
46 // Returns the switch status of the current page.
47 bool CanSwitchToReaderMode();
48
49 // web::WebStateObserver.
50 void NavigationItemCommitted(
51 const web::LoadCommittedDetails& load_details) override;
52 void PageLoaded(
53 web::PageLoadCompletionStatus load_completion_status) override;
54 void WebStateDestroyed() override;
55
56 // Adds and removes observers for page navigation notifications. The order in
57 // which notifications are sent to observers is undefined. Clients must be
58 // sure to remove the observer before they go away.
59 void AddObserver(ReaderModeCheckerObserver* observer);
60 void RemoveObserver(ReaderModeCheckerObserver* observer);
61
62 private:
63 // Checks if the current webstate is distillable.
64 void CheckIsDistillable();
65 // Does a simple check, Just checking OpenGraph properties.
66 void CheckIsDistillableOG(CRWJSInjectionReceiver* receiver);
67 // Does a more involved check.
68 void CheckIsDistillableDetector(CRWJSInjectionReceiver* receiver);
69 // Stores if the current webstate URL is suitable for reader mode.
70 enum class Status;
71 Status is_distillable_;
72 // A list of observers notified when page state changes. Weak references.
73 base::ObserverList<ReaderModeCheckerObserver, true> observers_;
74 base::WeakPtrFactory<ReaderModeChecker> weak_factory_;
75 DISALLOW_COPY_AND_ASSIGN(ReaderModeChecker);
76 };
77
78 #endif // IOS_CHROME_BROWSER_UI_READER_MODE_READER_MODE_CHECKER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698