| OLD | NEW |
| (Empty) | |
| 1 #ifndef GeolocationPowerbox_h |
| 2 #define GeolocationPowerbox_h |
| 3 |
| 4 #include <functional> |
| 5 #include <map> |
| 6 #include <vector> |
| 7 #include "googleurl/src/gurl.h" |
| 8 |
| 9 namespace WebCore { |
| 10 class ChaosGeolocation; |
| 11 class ChooseGeolocationProvider; |
| 12 |
| 13 // This class should only be used in the renderer process |
| 14 class GeolocationPowerbox { |
| 15 public: |
| 16 static WebCore::ChooseGeolocationProvider *choose( |
| 17 WebCore::ChaosGeolocation *geolocation); |
| 18 |
| 19 // FIXME(benl): probably should be a dynamic list some day. |
| 20 // FIXME(benl): move out of this class, since it is shared across |
| 21 // processes. |
| 22 enum ProviderId { |
| 23 NO_PROVIDER_FOUND, // only used to indicate failure |
| 24 EXACT, |
| 25 CITY, |
| 26 NONE |
| 27 }; |
| 28 // FIXME(benl): lazy lazy lazy |
| 29 static const char *decisionAsString(GeolocationPowerbox::ProviderId id) { |
| 30 switch(id) { |
| 31 case EXACT: return "exact location"; |
| 32 case CITY: return "rough location"; |
| 33 case NONE: return "no location"; |
| 34 case NO_PROVIDER_FOUND: return "ARG YOU SHOULD NOT SEE THIS!"; |
| 35 } |
| 36 return NULL; |
| 37 } |
| 38 }; |
| 39 |
| 40 // This class should only be used in the browser process |
| 41 class GeolocationBrowserPowerbox { |
| 42 public: |
| 43 typedef std::pair<GURL, GeolocationPowerbox::ProviderId> DecisionPair; |
| 44 |
| 45 void addDecision(const GURL &gurl, |
| 46 GeolocationPowerbox::ProviderId provider_id) { |
| 47 decisions_[gurl] = provider_id; |
| 48 } |
| 49 void deleteDecision(const GURL &gurl) { |
| 50 decisions_.erase(gurl); |
| 51 } |
| 52 GeolocationPowerbox::ProviderId findDecision(const GURL &gurl) const { |
| 53 GURLMap::const_iterator found = decisions_.find(gurl); |
| 54 if (found == decisions_.end()) |
| 55 return GeolocationPowerbox::NO_PROVIDER_FOUND; |
| 56 return found->second; |
| 57 } |
| 58 static const DecisionPair identity(const DecisionPair &pair) { |
| 59 return pair; |
| 60 } |
| 61 std::vector<DecisionPair> decisions() const { |
| 62 std::vector<DecisionPair> result; |
| 63 |
| 64 std::transform(decisions_.begin(), decisions_.end(), |
| 65 std::back_inserter(result), identity); |
| 66 return result; |
| 67 } |
| 68 static const char *decisionAsString(GeolocationPowerbox::ProviderId id) { |
| 69 return GeolocationPowerbox::decisionAsString(id); |
| 70 } |
| 71 static GeolocationBrowserPowerbox powerbox; |
| 72 private: |
| 73 typedef std::map<GURL, GeolocationPowerbox::ProviderId> GURLMap; |
| 74 GURLMap decisions_; |
| 75 }; |
| 76 } // namespace WebCore |
| 77 |
| 78 |
| 79 #endif // ndef GeolocationPowerbox_h |
| OLD | NEW |