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

Unified Diff: chrome/browser/net/net_log_temp_file.cc

Issue 11828036: First cut at UI for saving net_logs data into a temporary file on (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 11 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/net/net_log_temp_file.h ('k') | chrome/browser/net/net_log_temp_file_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/net/net_log_temp_file.cc
===================================================================
--- chrome/browser/net/net_log_temp_file.cc (revision 0)
+++ chrome/browser/net/net_log_temp_file.cc (revision 0)
@@ -0,0 +1,156 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/net/net_log_temp_file.h"
+
+#include "base/file_util.h"
+#include "base/values.h"
+#include "chrome/browser/net/chrome_net_log.h"
+#include "chrome/browser/net/net_log_logger.h"
+#include "content/public/browser/browser_thread.h"
+
+using content::BrowserThread;
+
+NetLogTempFile::NetLogTempFile(ChromeNetLog* chrome_net_log)
+ : state_(STATE_UNINITIALIZED),
+ log_filename_(FILE_PATH_LITERAL("chrome-net-export-log.json")),
+ chrome_net_log_(chrome_net_log) {
+}
+
+NetLogTempFile::~NetLogTempFile() {
+ if (net_log_logger_)
+ net_log_logger_->StopObserving();
+}
+
+void NetLogTempFile::ProcessCommand(Command command) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE_USER_BLOCKING));
+ if (!EnsureInit())
+ return;
+
+ switch (command) {
+ case DO_START:
+ StartNetLog();
+ break;
+ case DO_STOP:
+ StopNetLog();
+ break;
+ default:
+ NOTREACHED();
+ break;
+ }
+}
+
+DictionaryValue* NetLogTempFile::GetState() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE_USER_BLOCKING));
+ base::DictionaryValue* dict = new base::DictionaryValue;
+
+ EnsureInit();
+
+#ifndef NDEBUG
+ dict->SetString("file", log_path_.LossyDisplayName());
+#endif // NDEBUG
+
+ switch (state_) {
+ case STATE_ALLOW_START:
+ dict->SetString("state", "ALLOW_START");
+ break;
+ case STATE_ALLOW_STOP:
+ dict->SetString("state", "ALLOW_STOP");
+ break;
+ case STATE_ALLOW_START_SEND:
+ dict->SetString("state", "ALLOW_START_SEND");
+ break;
+ default:
+ dict->SetString("state", "UNINITIALIZED");
+ break;
+ }
+ return dict;
+}
+
+bool NetLogTempFile::EnsureInit() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE_USER_BLOCKING));
+ if (state_ != STATE_UNINITIALIZED)
+ return true;
+
+ if (!GetNetExportLog())
+ return false;
+
+ if (NetExportLogExists())
+ state_ = STATE_ALLOW_START_SEND;
+ else
+ state_ = STATE_ALLOW_START;
+
+ return true;
+}
+
+void NetLogTempFile::StartNetLog() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE_USER_BLOCKING));
+ if (state_ == STATE_ALLOW_STOP)
+ return;
+
+ DCHECK_NE(STATE_UNINITIALIZED, state_);
+ DCHECK(!log_path_.empty());
+
+ // Try to make sure we can create the file.
+ // TODO(rtenneti): Find a better for doing the following. Surface some error
+ // to the user if we couldn't create the file.
+ FILE* fp = file_util::OpenFile(log_path_, "w");
+ if (!fp)
+ return;
+ file_util::CloseFile(fp);
+
+ net_log_logger_.reset(new NetLogLogger(log_path_));
+ net_log_logger_->StartObserving(chrome_net_log_);
+ state_ = STATE_ALLOW_STOP;
+}
+
+void NetLogTempFile::StopNetLog() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE_USER_BLOCKING));
+ if (state_ != STATE_ALLOW_STOP)
+ return;
+
+ net_log_logger_->StopObserving();
+ net_log_logger_.reset();
+ state_ = STATE_ALLOW_START_SEND;
+}
+
+bool NetLogTempFile::GetFilePath(FilePath* path) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE_USER_BLOCKING));
+ if (state_ != STATE_ALLOW_START_SEND)
+ return false;
+
+ if (!NetExportLogExists())
+ return false;
+
+ DCHECK(!log_path_.empty());
+#if defined(OS_POSIX)
+ // Users, group and others can read, write and traverse.
+ int mode = file_util::FILE_PERMISSION_MASK;
+ file_util::SetPosixFilePermissions(log_path_, mode);
+#endif // defined(OS_POSIX)
+
+ *path = log_path_;
+ return true;
+}
+
+bool NetLogTempFile::GetNetExportLog() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE_USER_BLOCKING));
+ FilePath temp_dir;
+ if (!GetNetExportLogDirectory(&temp_dir))
+ return false;
+
+ log_path_ = temp_dir.Append(log_filename_);
+ return true;
+}
+
+bool NetLogTempFile::GetNetExportLogDirectory(FilePath* path) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE_USER_BLOCKING));
+ return file_util::GetTempDir(path);
+}
+
+bool NetLogTempFile::NetExportLogExists() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE_USER_BLOCKING));
+ DCHECK(!log_path_.empty());
+ return file_util::PathExists(log_path_);
+}
« no previous file with comments | « chrome/browser/net/net_log_temp_file.h ('k') | chrome/browser/net/net_log_temp_file_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698