Emit("did-change-theme-color", atom::ToRGBHex(theme_color));
}
+void WebContents::DidNavigateAnyFrame(content::RenderFrameHost* render_frame_host,
+ const content::LoadCommittedDetails& details,
+ const content::FrameNavigateParams& params) {
+ static_cast<AtomBrowserContext*>(web_contents()->GetBrowserContext())->
+ AddVisitedURLs(params.redirects);
+}
+
void WebContents::DocumentLoadedInFrame(
content::RenderFrameHost* render_frame_host) {
if (!render_frame_host->GetParent())
void MediaStoppedPlaying(const MediaPlayerInfo& video_type,
const MediaPlayerId& id) override;
void DidChangeThemeColor(SkColor theme_color) override;
+ void DidNavigateAnyFrame(
+ content::RenderFrameHost* render_frame_host,
+ const content::LoadCommittedDetails& details,
+ const content::FrameNavigateParams& params) override;
// content::NotificationObserver:
void Observe(int type,
ct_delegate_(new AtomCTDelegate),
network_delegate_(new AtomNetworkDelegate),
cookie_delegate_(new AtomCookieDelegate) {
+ InitVisitedLinkMaster();
// Construct user agent string.
Browser* browser = Browser::Get();
std::string name = RemoveWhitespace(browser->GetName());
return new AtomBrowserContext(partition, in_memory, options);
}
+void AtomBrowserContext::InitVisitedLinkMaster() {
+ if (!IsOffTheRecord()) {
+ visitedlink_master_.reset(new visitedlink::VisitedLinkMaster(this, this, false));
+ visitedlink_master_->Init();
+ }
+}
+
+void AtomBrowserContext::AddVisitedURLs(const std::vector<GURL>& urls) {
+ if (!IsOffTheRecord()) {
+ DCHECK(visitedlink_master_);
+ visitedlink_master_->AddURLs(urls);
+ }
+}
+
+void AtomBrowserContext::RebuildTable(const scoped_refptr<URLEnumerator>& enumerator) {
+ if (!IsOffTheRecord()) {
+ // WebView rebuilds from WebChromeClient.getVisitedHistory. The client
+ // can change in the lifetime of this WebView and may not yet be set here.
+ // Therefore this initialization path is not used.
+ enumerator->OnComplete(true);
+ }
+}
+
} // namespace atom
#include "atom/browser/net/atom_cookie_delegate.h"
#include "brightray/browser/browser_context.h"
+#include "components/visitedlink/browser/visitedlink_delegate.h"
+#include "components/visitedlink/browser/visitedlink_master.h"
#include "net/cookies/cookie_monster.h"
namespace atom {
class AtomPermissionManager;
class WebViewManager;
-class AtomBrowserContext : public brightray::BrowserContext {
+class AtomBrowserContext : public brightray::BrowserContext,
+ public visitedlink::VisitedLinkDelegate {
public:
// Get or create the BrowserContext according to its |partition| and
// |in_memory|. The |options| will be passed to constructor when there is no
void SetUserAgent(const std::string& user_agent);
+ // These methods map to Add methods in visitedlink::VisitedLinkMaster.
+ void AddVisitedURLs(const std::vector<GURL>& urls);
+ // visitedlink::VisitedLinkDelegate implementation.
+ void RebuildTable(const scoped_refptr<URLEnumerator>& enumerator) override;
+ // Reset visitedlink master and initialize it.
+ void InitVisitedLinkMaster();
+
// brightray::URLRequestContextGetter::Delegate:
net::NetworkDelegate* CreateNetworkDelegate() override;
net::CookieMonsterDelegate* CreateCookieDelegate() override;
~AtomBrowserContext() override;
private:
+ std::unique_ptr<visitedlink::VisitedLinkMaster> visitedlink_master_;
std::unique_ptr<AtomDownloadManagerDelegate> download_manager_delegate_;
std::unique_ptr<WebViewManager> guest_manager_;
std::unique_ptr<AtomPermissionManager> permission_manager_;
#include "base/command_line.h"
#include "content/public/renderer/render_frame.h"
#include "native_mate/dictionary.h"
+#include "services/service_manager/public/cpp/interface_registry.h"
#include "third_party/WebKit/public/web/WebDocument.h"
#include "third_party/WebKit/public/web/WebLocalFrame.h"
#include "tizen/common/env_variables.h"
widget_.reset(wrt_widget);
content::RenderThread* thread = content::RenderThread::Get();
thread->AddObserver(wrt_widget->GetObserver());
+ visited_link_slave_.reset(new visitedlink::VisitedLinkSlave());
+ thread->GetInterfaceRegistry()->AddInterface(
+ visited_link_slave_->GetBindCallback());
std::string theme = command_line->GetSwitchValueASCII("widget-theme");
std::string encoded_bundle = command_line->GetSwitchValueASCII("widget-encoded-bundle");
std::string scale = command_line->GetSwitchValueASCII("widget-scale");
ignore_result(func->Call(context, v8::Null(isolate), 1, args));
}
+unsigned long long AtomRendererClient::VisitedLinkHash(const char* canonical_url,
+ size_t length) {
+ return visited_link_slave_->ComputeURLFingerprint(canonical_url, length);
+}
+
+bool AtomRendererClient::IsLinkVisited(unsigned long long link_hash) {
+ return visited_link_slave_->IsVisited(link_hash);
+}
+
} // namespace atom
#include <vector>
#include "atom/renderer/renderer_client_base.h"
+#include "components/visitedlink/renderer/visitedlink_slave.h"
#include "tizen_src/ewk/efl_integration/wrt/wrtwidget.h"
namespace atom {
content::RenderFrame* render_frame) override;
void SetupMainWorldOverrides(v8::Handle<v8::Context> context) override;
bool isolated_world() override { return isolated_world_; }
+ unsigned long long VisitedLinkHash(const char* canonical_url,
+ size_t length);
+
+ bool IsLinkVisited(unsigned long long link_hash);
private:
enum NodeIntegration {
DISABLE,
};
std::unique_ptr<V8Widget> widget_;
+ std::unique_ptr<visitedlink::VisitedLinkSlave> visited_link_slave_;
void RenderThreadStarted() override;
void RenderFrameCreated(content::RenderFrame*) override;