1 // Copyright (c) 2012 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.
5 #include "chrome/browser/google/google_url_tracker_map_entry.h"
7 #include "chrome/browser/chrome_notification_types.h"
8 #include "chrome/browser/google/google_url_tracker.h"
9 #include "chrome/browser/google/google_url_tracker_infobar_delegate.h"
10 #include "chrome/browser/infobars/infobar.h"
11 #include "content/public/browser/notification_details.h"
12 #include "content/public/browser/notification_source.h"
15 GoogleURLTrackerMapEntry::GoogleURLTrackerMapEntry(
16 GoogleURLTracker
* google_url_tracker
,
17 InfoBarService
* infobar_service
,
18 const content::NavigationController
* navigation_controller
)
19 : google_url_tracker_(google_url_tracker
),
20 infobar_service_(infobar_service
),
21 infobar_delegate_(NULL
),
22 navigation_controller_(navigation_controller
) {
25 GoogleURLTrackerMapEntry::~GoogleURLTrackerMapEntry() {
28 void GoogleURLTrackerMapEntry::Observe(
30 const content::NotificationSource
& source
,
31 const content::NotificationDetails
& details
) {
32 DCHECK(infobar_delegate_
);
33 DCHECK_EQ(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED
, type
);
34 DCHECK_EQ(infobar_service_
, content::Source
<InfoBarService
>(source
).ptr());
35 if (content::Details
<InfoBar::RemovedDetails
>(details
)->first
->delegate() ==
37 google_url_tracker_
->DeleteMapEntryForService(infobar_service_
);
38 // WARNING: At this point |this| has been deleted!
42 void GoogleURLTrackerMapEntry::SetInfoBarDelegate(
43 GoogleURLTrackerInfoBarDelegate
* infobar_delegate
) {
44 DCHECK(!infobar_delegate_
);
45 infobar_delegate_
= infobar_delegate
;
46 registrar_
.Add(this, chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED
,
47 content::Source
<InfoBarService
>(infobar_service_
));
50 void GoogleURLTrackerMapEntry::Close(bool redo_search
) {
51 if (infobar_delegate_
) {
52 infobar_delegate_
->Close(redo_search
);
54 // WARNING: |infobar_service_| may point to a deleted object. Do not
55 // dereference it! See GoogleURLTracker::OnTabClosed().
56 google_url_tracker_
->DeleteMapEntryForService(infobar_service_
);
58 // WARNING: At this point |this| has been deleted!