15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/android/meta_tag_observer.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/chrome_constants.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/render_messages.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/browser/render_frame_host.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/web_contents.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/web_contents_observer.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)MetaTagObserver::MetaTagObserver(const std::string& meta_tag) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : meta_tag_(meta_tag) { 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (meta_tag_.size() > chrome::kMaxMetaTagAttributeLength) { 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VLOG(1) << "Length of the <meta> name attribute is too large."; 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NOTREACHED(); 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)MetaTagObserver::~MetaTagObserver() { 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid MetaTagObserver::DidFinishLoad(content::RenderFrameHost* render_frame_host, 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& validated_url) { 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (render_frame_host->GetParent()) 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) validated_url_ = validated_url; 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Send(new ChromeViewMsg_RetrieveMetaTagContent(routing_id(), 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) validated_url, 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) meta_tag_)); 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool MetaTagObserver::OnMessageReceived(const IPC::Message& message) { 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool handled = true; 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(MetaTagObserver, message) 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DidRetrieveMetaTagContent, 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OnDidRetrieveMetaTagContent) 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IPC_MESSAGE_UNHANDLED(handled = false) 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IPC_END_MESSAGE_MAP() 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return handled; 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void MetaTagObserver::OnDidRetrieveMetaTagContent( 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool success, 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& tag_name, 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& tag_content, 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL& expected_url) { 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!success || tag_name != meta_tag_ || validated_url_ != expected_url || 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tag_content.size() >= chrome::kMaxMetaTagAttributeLength) { 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) HandleMetaTagContent(tag_content, expected_url); 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 55